chiark / gitweb /
working on copyup copydown of dirs
authorIan Jackson <ian@anarres>
Fri, 9 Dec 2005 19:48:03 +0000 (19:48 +0000)
committerIan Jackson <ian@anarres>
Fri, 9 Dec 2005 19:48:03 +0000 (19:48 +0000)
virt-chroot/adt-virt-chroot
virt-chroot/test-input

index 481811ce11bb43972bd386f1dce5dacb01cae02e..038a2b53e633c1ecbe73e869cefe241802b8e575 100755 (executable)
@@ -169,8 +169,12 @@ def cmd_execute(c, ce):
                        " visible to us `%s'" % out)
        return [`status`]
 
-def copyupdown(c, ce, up_p):
+def copyupdown(c, ce, upp):
        cmdnumargs(c, ce, 2)
+       isrc = 0
+       idst = 1
+       ilocal = 0 + upp
+       iremote = 1 - upp
        wh = ce[0]
        sd = c[1:]
        sde = ce[1:]
@@ -187,38 +191,34 @@ def copyupdown(c, ce, up_p):
        preexecfns = [None, None]
        if not dirsp:
                gobody = "      setfd(%s,'%s',%s)\n" % (
-                                       1-up_p, sde[0], not up_p)
+                                       1-upp, sde[iremote], not upp)
                gobody += "     os.execvp('cat', ['cat'])\n"
-               if up_p: deststdout = file(sd[1], 'w')
-               else: srcstdin = file(sd[0], 'r')
+               if upp: deststdout = file(sd[idst], 'w')
+               else: srcstdin = file(sd[isrc], 'r')
                localcmdl = ['cat']
        else:
-               paxbase = 'pax -p p -x cpio'
-               gobody = "      dir = urllib.unquote('%s'))\n" % sde[0]
-               if up_p:
-                       try: os.mkdir(sd[1])
+               gobody = "      dir = urllib.unquote('%s')\n" % sde[iremote]
+               if upp:
+                       try: os.mkdir(sd[ilocal])
                        except OSError, oe:
                                if oe.errno != errno.EEXIST: raise
                else:
                        gobody += ("    try: os.mkdir(dir)\n"
                                "       except OSError, oe:\n"
                                "               if oe.errno != errno.EEXIST: raise\n")
-               preexecfns[not up_p] = lambda *any: os.chdir(sd[not up_p])
-               gobody += "     os.chdir(dir)\n"
-               gobody += "     paxcmd = '%s'.split()\n" % paxbase
-               localcmdl = ['sh','-ec',
-                               'cd "$1"; shift; exec "$@"',
-                       'x'] + paxbase.split()
-               if up_p:
-                       gobody += "     paxcmd += ['-w','.']\n"
-                       localcmdl += ['-r']
-               else:
-                       gobody += "     paxcmd += ['-r']\n"
-                       localcmdl += ['-w','.']
+               gobody +=( "    os.chdir(dir)\n"
+                       "       tarcmd = 'tar -f -'.split()\n")
+               localcmdl = 'tar -f -'.split()
+               taropts = [None, None]
+               taropts[isrc] = '-c .'
+               taropts[idst] = '-p -x --no-same-owner'
+               gobody += "     tarcmd += '%s'.split()\n" % taropts[iremote]
+               localcmdl += ['-C',sd[ilocal]]
+               localcmdl += taropts[ilocal].split()
 
        downcmdl = down_python_script(gobody, functions)
 
-       if up_p: cmdls = (downcmdl, localcmdl)
+       if upp: cmdls = (downcmdl, localcmdl)
        else: cmdls = (localcmdl, downcmdl)
 
        debug(`["cmdls", `cmdls`]`)
index aa8b566051c3b134fd9963fbde0f03b2faf36276..83b415ed821bb14eaaeb389b53409662628b2537 100644 (file)
@@ -1,6 +1,7 @@
 open
-copydown test-input foo
-execute ls,-l /dev/null out err
+copydown /u/ian/junk/d/pikdev-0.8.0/admin/ zork/
+copydown test-file zork/foo
+execute ls,-l,zork /dev/null out err
 copyup out /dev/tty
 copyup out outh
 copyup err errh