diff options
author | Martin Jansa <martin.jansa@gmail.com> | 2014-02-23 11:44:22 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-03-07 14:58:40 +0000 |
commit | 148c04c1bf39ca0d21288fdce61c51dc8e1c3226 (patch) | |
tree | da6cae65a5980983327ca548938ea51636b49d16 /meta/lib/oe/package.py | |
parent | a4261ab92735abfba835e916931d2e920f335aaa (diff) | |
download | openembedded-core-contrib-148c04c1bf39ca0d21288fdce61c51dc8e1c3226.tar.gz |
package.py: use subprocess.Popen for rpmdeps call
* I've noticed errors like this in log.do_package:
DEBUG: Executing python function package_do_filedeps
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
DEBUG: Python function package_do_filedeps finished
which are actually caused by some filenames included in package
containing '()' characters
Maybe we should change meta/classes/package.bbclass to
fail when some filedeprunner call fails like this and fix
filedeprunner to escape '()' and other possibly dangerous chars
it's called like this:
processed = list(pool.imap(oe.package.filedeprunner, pkglist))
* don't use shell=True
* show the command when it fails and let do_package task to fail
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Diffstat (limited to 'meta/lib/oe/package.py')
-rw-r--r-- | meta/lib/oe/package.py | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py index 9a0ddb85361..f8b532220a1 100644 --- a/meta/lib/oe/package.py +++ b/meta/lib/oe/package.py @@ -54,7 +54,7 @@ def file_translate(file): return ft def filedeprunner(arg): - import re + import re, subprocess, shlex (pkg, pkgfiles, rpmdeps, pkgdest) = arg provides = {} @@ -89,8 +89,11 @@ def filedeprunner(arg): return provides, requires - dep_pipe = os.popen(rpmdeps + " " + " ".join(pkgfiles)) - - provides, requires = process_deps(dep_pipe, pkg, pkgdest, provides, requires) + try: + dep_popen = subprocess.Popen(shlex.split(rpmdeps) + pkgfiles, stdout=subprocess.PIPE) + provides, requires = process_deps(dep_popen.stdout, pkg, pkgdest, provides, requires) + except OSError as e: + bb.error("rpmdeps: '%s' command failed, '%s'" % (shlex.split(rpmdeps) + pkgfiles, e)) + raise e return (pkg, provides, requires) |