From b317d79fb7a058582f587e24463a1b67f38aec37 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Thu, 14 May 2015 10:18:18 +0100 Subject: devtool: fix build env command execution error handling If we execute an external command, we ought to prepare for the possibility that it can fail and handle the failure appropriately. We can especially expect this to happen when running bitbake in this scenario. Ensure we return the appropriate exit code to the calling process. Fixes [YOCTO #7757]. (From OE-Core master rev: 98a716d79bfc5434a5b42d3ca683eab3eea30a41) (From OE-Core rev: 2791fe9236f7173e6b998cf9b40fe238566ed8ee) Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- scripts/lib/devtool/standard.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'scripts/lib/devtool/standard.py') diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index 4dc175d..d9b5d15 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py @@ -64,8 +64,12 @@ def add(args, config, basepath, workspace): color = 'always' else: color = args.color - stdout, stderr = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s %s' % (color, recipefile, srctree)) - logger.info('Recipe %s has been automatically created; further editing may be required to make it fully functional' % recipefile) + try: + stdout, stderr = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s"' % (color, recipefile, srctree)) + logger.info('Recipe %s has been automatically created; further editing may be required to make it fully functional' % recipefile) + except bb.process.ExecutionError as e: + logger.error('Command \'%s\' failed:\n%s' % (e.command, e.stdout)) + return 1 _add_md5(config, args.recipename, recipefile) @@ -610,7 +614,7 @@ def status(args, config, basepath, workspace): def reset(args, config, basepath, workspace): - import bb.utils + import bb if args.recipename: if args.all: logger.error("Recipe cannot be specified if -a/--all is used") @@ -630,7 +634,11 @@ def reset(args, config, basepath, workspace): for pn in recipes: if not args.no_clean: logger.info('Cleaning sysroot for recipe %s...' % pn) - exec_build_env_command(config.init_path, basepath, 'bitbake -c clean %s' % pn) + try: + exec_build_env_command(config.init_path, basepath, 'bitbake -c clean %s' % pn) + except bb.process.ExecutionError as e: + logger.error('Command \'%s\' failed, output:\n%s\nIf you wish, you may specify -n/--no-clean to skip running this command when resetting' % (e.command, e.stdout)) + return 1 _check_preserve(config, pn) @@ -656,7 +664,11 @@ def build(args, config, basepath, workspace): logger.error("no recipe named %s in your workspace" % args.recipename) return -1 build_task = config.get('Build', 'build_task', 'populate_sysroot') - exec_build_env_command(config.init_path, basepath, 'bitbake -c %s %s' % (build_task, args.recipename), watch=True) + try: + exec_build_env_command(config.init_path, basepath, 'bitbake -c %s %s' % (build_task, args.recipename), watch=True) + except bb.process.ExecutionError as e: + # We've already seen the output since watch=True, so just ensure we return something to the user + return e.exitcode return 0 -- cgit v1.1