diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-06-25 02:11:43 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-06-25 02:11:43 +0000 |
commit | f1ca0e56fa470a03d655d82c90e87a9953af42c3 (patch) | |
tree | b6660e2e033ac560c99961b92310c2fadca06a2a /pym/getbinpkg.py | |
parent | a8f01f071456e4621903c6a6939a4b1a626ebcad (diff) | |
download | portage-f1ca0e56fa470a03d655d82c90e87a9953af42c3.tar.gz portage-f1ca0e56fa470a03d655d82c90e87a9953af42c3.tar.bz2 portage-f1ca0e56fa470a03d655d82c90e87a9953af42c3.zip |
Clean up file_get() to use shlex, varexpand, and spawn. (trunk r7014)
svn path=/main/branches/2.1.2/; revision=7015
Diffstat (limited to 'pym/getbinpkg.py')
-rw-r--r-- | pym/getbinpkg.py | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/pym/getbinpkg.py b/pym/getbinpkg.py index a506f4a13..c3bd0b5ee 100644 --- a/pym/getbinpkg.py +++ b/pym/getbinpkg.py @@ -366,28 +366,19 @@ def file_get(baseurl,dest,conn=None,fcmd=None): if not fcmd: return file_get_lib(baseurl,dest,conn) - fcmd = fcmd.replace("${DISTDIR}",dest) - fcmd = fcmd.replace("${URI}", baseurl) - fcmd = fcmd.replace("${FILE}", os.path.basename(baseurl)) - mysplit = fcmd.split() - mycmd = mysplit[0] - myargs = [os.path.basename(mycmd)]+mysplit[1:] - mypid=os.fork() - if mypid == 0: - try: - os.execv(mycmd,myargs) - except OSError: - pass - sys.stderr.write("!!! Failed to spawn fetcher.\n") - sys.stderr.flush() - os._exit(1) - retval=os.waitpid(mypid,0)[1] - if (retval & 0xff) == 0: - retval = retval >> 8 - else: - sys.stderr.write("Spawned processes caught a signal.\n") - sys.exit(1) - if retval != 0: + variables = { + "DISTDIR": dest, + "URI": baseurl, + "FILE": os.path.basename(baseurl) + } + import shlex, StringIO + from portage_util import varexpand + from portage_exec import spawn + lexer = shlex.shlex(StringIO.StringIO(fcmd), posix=True) + lexer.whitespace_split = True + myfetch = [varexpand(x, mydict=variables) for x in lexer] + retval = spawn(myfetch, env=os.environ.copy()) + if retval != os.EX_OK: sys.stderr.write("Fetcher exited with a failure condition.\n") return 0 return 1 |