summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-05-06 20:13:00 +0000
committerZac Medico <zmedico@gentoo.org>2007-05-06 20:13:00 +0000
commita19511798f8e34ac464b8972cf70cc8de79f7176 (patch)
treefe1390259871d27f982a1138147ce864dde088fb /pym
parent831012141601a654e1450ea2f9a5f5d9d6610d1a (diff)
downloadportage-a19511798f8e34ac464b8972cf70cc8de79f7176.tar.gz
portage-a19511798f8e34ac464b8972cf70cc8de79f7176.tar.bz2
portage-a19511798f8e34ac464b8972cf70cc8de79f7176.zip
Use shlex for better splitting of PORTAGE_RSYNC_OPTS and PORTAGE_RSYNC_EXTRA_OPTS.
svn path=/main/trunk/; revision=6492
Diffstat (limited to 'pym')
-rw-r--r--pym/emerge/__init__.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py
index f8c899e68..f38ca1b40 100644
--- a/pym/emerge/__init__.py
+++ b/pym/emerge/__init__.py
@@ -3896,7 +3896,7 @@ def action_sync(settings, trees, mtimedb, myopts, myaction):
mytimeout=180
rsync_opts = []
-
+ import shlex, StringIO
if settings["PORTAGE_RSYNC_OPTS"] == "":
portage.writemsg("PORTAGE_RSYNC_OPTS empty or unset, using hardcoded defaults\n")
rsync_opts.extend([
@@ -3923,7 +3923,11 @@ def action_sync(settings, trees, mtimedb, myopts, myaction):
# defaults.
portage.writemsg("Using PORTAGE_RSYNC_OPTS instead of hardcoded defaults\n", 1)
- rsync_opts.extend(settings["PORTAGE_RSYNC_OPTS"].split())
+ lexer = shlex.shlex(StringIO.StringIO(
+ settings.get("PORTAGE_RSYNC_OPTS","")), posix=True)
+ lexer.whitespace_split = True
+ rsync_opts.extend(lexer)
+ del lexer
for opt in ("--recursive", "--times"):
if opt not in rsync_opts:
@@ -4032,8 +4036,12 @@ def action_sync(settings, trees, mtimedb, myopts, myaction):
user_name=""
updatecache_flg=True
all_rsync_opts = set(rsync_opts)
- all_rsync_opts.update(
- settings.get("PORTAGE_RSYNC_EXTRA_OPTS","").split())
+ lexer = shlex.shlex(StringIO.StringIO(
+ settings.get("PORTAGE_RSYNC_EXTRA_OPTS","")), posix=True)
+ lexer.whitespace_split = True
+ extra_rsync_opts = list(lexer)
+ del lexer
+ all_rsync_opts.update(extra_rsync_opts)
family = socket.AF_INET
if "-4" in all_rsync_opts or "--ipv4" in all_rsync_opts:
family = socket.AF_INET
@@ -4091,8 +4099,7 @@ def action_sync(settings, trees, mtimedb, myopts, myaction):
if mytimestamp != 0 and "--quiet" not in myopts:
print ">>> Checking server timestamp ..."
- rsynccommand = " ".join(["/usr/bin/rsync", " ".join(rsync_opts),
- settings.get("PORTAGE_RSYNC_EXTRA_OPTS","")])
+ rsynccommand = ["/usr/bin/rsync"] + rsync_opts + extra_rsync_opts
if "--debug" in myopts:
print rsynccommand
@@ -4105,7 +4112,7 @@ def action_sync(settings, trees, mtimedb, myopts, myaction):
# connection attempt to an unresponsive server which rsync's
# --timeout option does not prevent.
if True:
- mycommand = rsynccommand.split()
+ mycommand = rsynccommand[:]
mycommand.append(dosyncuri.rstrip("/") + \
"/metadata/timestamp.chk")
mycommand.append(tmpservertimestampfile)
@@ -4179,8 +4186,7 @@ def action_sync(settings, trees, mtimedb, myopts, myaction):
print
elif (servertimestamp == 0) or (servertimestamp > mytimestamp):
# actual sync
- mycommand=rsynccommand+" "+dosyncuri+"/ "+myportdir
- mycommand = mycommand.split()
+ mycommand = rsynccommand + [dosyncuri+"/", myportdir]
exitcode = portage.process.spawn(mycommand,
env=settings.environ())
if exitcode in [0,1,3,4,11,14,20,21]: