buf = sys.stdin.read(sz)
assert(len(buf) == sz)
argv = buf.split('\0')
+argv = [argv[0], 'mux', '--'] + argv
# stdin/stdout are supposedly connected to 'bup server' that the caller
# started for us (often on the other end of an ssh tunnel), so we don't want
#!/usr/bin/env python
import sys, os, struct, getopt, subprocess, signal
+from subprocess import PIPE
from bup import options, ssh, path
from bup.helpers import *
(hostname, port) = (hp[0], None)
else:
(hostname, port) = hp
-
argv = extra[1:]
- p = ssh.connect(hostname, port, 'on--server')
+ p = ssh.connect(hostname, port, 'on--server', stderr=PIPE)
try:
argvs = '\0'.join(['bup'] + argv)
stdin=p.stdout, stdout=p.stdin)
p.stdin.close()
p.stdout.close()
+ # Demultiplex remote client's stderr (back to stdout/stderr).
+ dmc = DemuxConn(p.stderr.fileno(), open(os.devnull, "w"))
+ for line in iter(dmc.readline, ""):
+ sys.stdout.write(line)
finally:
while 1:
# if we get a signal while waiting, we have to keep waiting, just
from bup import helpers, path
-def connect(rhost, port, subcmd):
+def connect(rhost, port, subcmd, stderr=None):
"""Connect to 'rhost' and execute the bup subcommand 'subcmd' on it."""
assert(not re.search(r'[^\w-]', subcmd))
nicedir = re.sub(r':', "_", path.exedir())
os.environ.get('PATH', '')])
os.setsid()
return subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+ stderr=stderr,
preexec_fn=setup)
WVPASS date > src/bar
WVPASS bup random 1k > src/baz
WVPASS bup on - index src
-WVPASS bup on - save -n src src
+WVPASS bup on - save -ctn src src > get.log
+WVPASSEQ "$(cat get.log | wc -l)" 2
+tree_id=$(WVPASS awk 'FNR == 1' get.log) || exit $?
+commit_id=$(WVPASS awk 'FNR == 2' get.log) || exit $?
+WVPASS git ls-tree "$tree_id"
+WVPASS git cat-file commit "$commit_id" | head -n 1 \
+ | WVPASS grep "^tree $tree_id\$"
+
WVPASS bup restore -C restore "src/latest/$(pwd)/src/."
WVPASS compare-trees src/ restore/
WVPASS rm -r restore
WVSTART "split"
-WVPASS bup on - split -n baz src/baz
+WVPASS bup on - split -ctn baz src/baz > get.log
+tree_id=$(WVPASS awk 'FNR == 1' get.log) || exit $?
+commit_id=$(WVPASS awk 'FNR == 2' get.log) || exit $?
+WVPASS git ls-tree "$tree_id"
+WVPASS git cat-file commit "$commit_id" | head -n 1 \
+ | WVPASS grep "^tree $tree_id\$"
WVPASS bup join baz > restore-baz
WVPASS cmp src/baz restore-baz