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:46 +0000 |
commit | ff8d8fbc9e49bf9a6e7499a9550b343f5bf4942a (patch) | |
tree | c235668fd864faa63597d1a2295ceb9705d380b7 /meta | |
parent | d31d2e85cfab8b85988047facd60438539467813 (diff) | |
download | poky-ff8d8fbc9e49bf9a6e7499a9550b343f5bf4942a.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
(From OE-Core rev: 148c04c1bf39ca0d21288fdce61c51dc8e1c3226)
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-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 9a0ddb8536..f8b532220a 100644 --- a/meta/lib/oe/package.py +++ b/meta/lib/oe/package.py | |||
@@ -54,7 +54,7 @@ def file_translate(file): | |||
54 | return ft | 54 | return ft |
55 | 55 | ||
56 | def filedeprunner(arg): | 56 | def filedeprunner(arg): |
57 | import re | 57 | import re, subprocess, shlex |
58 | 58 | ||
59 | (pkg, pkgfiles, rpmdeps, pkgdest) = arg | 59 | (pkg, pkgfiles, rpmdeps, pkgdest) = arg |
60 | provides = {} | 60 | provides = {} |
@@ -89,8 +89,11 @@ def filedeprunner(arg): | |||
89 | 89 | ||
90 | return provides, requires | 90 | return provides, requires |
91 | 91 | ||
92 | dep_pipe = os.popen(rpmdeps + " " + " ".join(pkgfiles)) | 92 | try: |
93 | 93 | dep_popen = subprocess.Popen(shlex.split(rpmdeps) + pkgfiles, stdout=subprocess.PIPE) | |
94 | provides, requires = process_deps(dep_pipe, pkg, pkgdest, provides, requires) | 94 | provides, requires = process_deps(dep_popen.stdout, pkg, pkgdest, provides, requires) |
95 | except OSError as e: | ||
96 | bb.error("rpmdeps: '%s' command failed, '%s'" % (shlex.split(rpmdeps) + pkgfiles, e)) | ||
97 | raise e | ||
95 | 98 | ||
96 | return (pkg, provides, requires) | 99 | return (pkg, provides, requires) |