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/__init__.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/__init__.py')
-rw-r--r-- | scripts/lib/devtool/__init__.py | 9 |
1 files changed, 7 insertions, 2 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): | |||
44 | if watch: | 44 | if watch: |
45 | if sys.stdout.isatty(): | 45 | if sys.stdout.isatty(): |
46 | # Fool bitbake into thinking it's outputting to a terminal (because it is, indirectly) | 46 | # Fool bitbake into thinking it's outputting to a terminal (because it is, indirectly) |
47 | cmd = 'script -q -c "%s" /dev/null' % cmd | 47 | cmd = 'script -e -q -c "%s" /dev/null' % cmd |
48 | return exec_watch('%s%s' % (init_prefix, cmd), **options) | 48 | return exec_watch('%s%s' % (init_prefix, cmd), **options) |
49 | else: | 49 | else: |
50 | return bb.process.run('%s%s' % (init_prefix, cmd), **options) | 50 | return bb.process.run('%s%s' % (init_prefix, cmd), **options) |
51 | 51 | ||
52 | def exec_watch(cmd, **options): | 52 | def exec_watch(cmd, **options): |
53 | """Run program with stdout shown on sys.stdout""" | 53 | """Run program with stdout shown on sys.stdout""" |
54 | import bb | ||
54 | if isinstance(cmd, basestring) and not "shell" in options: | 55 | if isinstance(cmd, basestring) and not "shell" in options: |
55 | options["shell"] = True | 56 | options["shell"] = True |
56 | 57 | ||
@@ -67,7 +68,11 @@ def exec_watch(cmd, **options): | |||
67 | buf += out | 68 | buf += out |
68 | elif out == '' and process.poll() != None: | 69 | elif out == '' and process.poll() != None: |
69 | break | 70 | break |
70 | return buf | 71 | |
72 | if process.returncode != 0: | ||
73 | raise bb.process.ExecutionError(cmd, process.returncode, buf, None) | ||
74 | |||
75 | return buf, None | ||
71 | 76 | ||
72 | def setup_tinfoil(): | 77 | def setup_tinfoil(): |
73 | """Initialize tinfoil api from bitbake""" | 78 | """Initialize tinfoil api from bitbake""" |