summaryrefslogtreecommitdiffstats
path: root/pym/getbinpkg.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-06-25 02:11:43 +0000
committerZac Medico <zmedico@gentoo.org>2007-06-25 02:11:43 +0000
commitf1ca0e56fa470a03d655d82c90e87a9953af42c3 (patch)
treeb6660e2e033ac560c99961b92310c2fadca06a2a /pym/getbinpkg.py
parenta8f01f071456e4621903c6a6939a4b1a626ebcad (diff)
downloadportage-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.py35
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