diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2015-05-14 10:18:18 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-05-16 22:31:51 +0100 |
commit | 1bab18f26fe162cc2f577944f02ec3a2d4f01702 (patch) | |
tree | 9944dd608f797c5552e83d744e0bdcc22ba61139 /scripts/lib/devtool/standard.py | |
parent | 18114bb8a6074368922351b6cd229f21385d2901 (diff) | |
download | poky-1bab18f26fe162cc2f577944f02ec3a2d4f01702.tar.gz |
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 rev: 98a716d79bfc5434a5b42d3ca683eab3eea30a41)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/devtool/standard.py')
-rw-r--r-- | scripts/lib/devtool/standard.py | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index 2f8b194c5f..61c0df9b11 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py | |||
@@ -97,8 +97,12 @@ def add(args, config, basepath, workspace): | |||
97 | source = srctree | 97 | source = srctree |
98 | if args.version: | 98 | if args.version: |
99 | extracmdopts += ' -V %s' % args.version | 99 | extracmdopts += ' -V %s' % args.version |
100 | stdout, _ = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s" %s' % (color, recipefile, source, extracmdopts)) | 100 | try: |
101 | logger.info('Recipe %s has been automatically created; further editing may be required to make it fully functional' % recipefile) | 101 | stdout, _ = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s" %s' % (color, recipefile, source, extracmdopts)) |
102 | logger.info('Recipe %s has been automatically created; further editing may be required to make it fully functional' % recipefile) | ||
103 | except bb.process.ExecutionError as e: | ||
104 | logger.error('Command \'%s\' failed:\n%s' % (e.command, e.stdout)) | ||
105 | return 1 | ||
102 | 106 | ||
103 | _add_md5(config, args.recipename, recipefile) | 107 | _add_md5(config, args.recipename, recipefile) |
104 | 108 | ||
@@ -688,7 +692,7 @@ def status(args, config, basepath, workspace): | |||
688 | 692 | ||
689 | def reset(args, config, basepath, workspace): | 693 | def reset(args, config, basepath, workspace): |
690 | """Entry point for the devtool 'reset' subcommand""" | 694 | """Entry point for the devtool 'reset' subcommand""" |
691 | import bb.utils | 695 | import bb |
692 | if args.recipename: | 696 | if args.recipename: |
693 | if args.all: | 697 | if args.all: |
694 | logger.error("Recipe cannot be specified if -a/--all is used") | 698 | logger.error("Recipe cannot be specified if -a/--all is used") |
@@ -708,7 +712,11 @@ def reset(args, config, basepath, workspace): | |||
708 | for pn in recipes: | 712 | for pn in recipes: |
709 | if not args.no_clean: | 713 | if not args.no_clean: |
710 | logger.info('Cleaning sysroot for recipe %s...' % pn) | 714 | logger.info('Cleaning sysroot for recipe %s...' % pn) |
711 | exec_build_env_command(config.init_path, basepath, 'bitbake -c clean %s' % pn) | 715 | try: |
716 | exec_build_env_command(config.init_path, basepath, 'bitbake -c clean %s' % pn) | ||
717 | except bb.process.ExecutionError as e: | ||
718 | 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)) | ||
719 | return 1 | ||
712 | 720 | ||
713 | _check_preserve(config, pn) | 721 | _check_preserve(config, pn) |
714 | 722 | ||
@@ -735,7 +743,11 @@ def build(args, config, basepath, workspace): | |||
735 | logger.error("no recipe named %s in your workspace" % args.recipename) | 743 | logger.error("no recipe named %s in your workspace" % args.recipename) |
736 | return -1 | 744 | return -1 |
737 | build_task = config.get('Build', 'build_task', 'populate_sysroot') | 745 | build_task = config.get('Build', 'build_task', 'populate_sysroot') |
738 | exec_build_env_command(config.init_path, basepath, 'bitbake -c %s %s' % (build_task, args.recipename), watch=True) | 746 | try: |
747 | exec_build_env_command(config.init_path, basepath, 'bitbake -c %s %s' % (build_task, args.recipename), watch=True) | ||
748 | except bb.process.ExecutionError as e: | ||
749 | # We've already seen the output since watch=True, so just ensure we return something to the user | ||
750 | return e.exitcode | ||
739 | 751 | ||
740 | return 0 | 752 | return 0 |
741 | 753 | ||