summaryrefslogtreecommitdiff
path: root/scripts/lib/devtool
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/devtool')
-rw-r--r--scripts/lib/devtool/__init__.py9
-rw-r--r--scripts/lib/devtool/standard.py22
2 files changed, 24 insertions, 7 deletions
diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py
index 88665124d1..5a06c78b57 100644
--- a/scripts/lib/devtool/__init__.py
+++ b/scripts/lib/devtool/__init__.py
@@ -44,13 +44,14 @@ def exec_build_env_command(init_path, builddir, cmd, watch=False, **options):
if watch:
if sys.stdout.isatty():
# Fool bitbake into thinking it's outputting to a terminal (because it is, indirectly)
- cmd = 'script -q -c "%s" /dev/null' % cmd
+ cmd = 'script -e -q -c "%s" /dev/null' % cmd
return exec_watch('%s%s' % (init_prefix, cmd), **options)
else:
return bb.process.run('%s%s' % (init_prefix, cmd), **options)
def exec_watch(cmd, **options):
"""Run program with stdout shown on sys.stdout"""
+ import bb
if isinstance(cmd, basestring) and not "shell" in options:
options["shell"] = True
@@ -67,7 +68,11 @@ def exec_watch(cmd, **options):
buf += out
elif out == '' and process.poll() != None:
break
- return buf
+
+ if process.returncode != 0:
+ raise bb.process.ExecutionError(cmd, process.returncode, buf, None)
+
+ return buf, None
def setup_tinfoil():
"""Initialize tinfoil api from bitbake"""
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):
source = srctree
if args.version:
extracmdopts += ' -V %s' % args.version
- stdout, _ = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s" %s' % (color, recipefile, source, extracmdopts))
- logger.info('Recipe %s has been automatically created; further editing may be required to make it fully functional' % recipefile)
+ try:
+ stdout, _ = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s" %s' % (color, recipefile, source, extracmdopts))
+ 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)
@@ -688,7 +692,7 @@ def status(args, config, basepath, workspace):
def reset(args, config, basepath, workspace):
"""Entry point for the devtool 'reset' subcommand"""
- import bb.utils
+ import bb
if args.recipename:
if args.all:
logger.error("Recipe cannot be specified if -a/--all is used")
@@ -708,7 +712,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)
@@ -735,7 +743,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