X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=cmd%2Fon-cmd.py;h=2c0e9fc808538ba4abb264be964bb3b36e0138c9;hb=HEAD;hp=10b1e3f249710aae44fae64faa4af83a81624bd6;hpb=7e1f05fe8b8d580d61c6a233ec1440adc248c97c;p=bup.git diff --git a/cmd/on-cmd.py b/cmd/on-cmd.py deleted file mode 100755 index 10b1e3f..0000000 --- a/cmd/on-cmd.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/sh -"""": # -*-python-*- -bup_python="$(dirname "$0")/bup-python" || exit $? -exec "$bup_python" "$0" ${1+"$@"} -""" -# end of bup preamble - -import sys, os, struct, getopt, subprocess, signal - -from subprocess import PIPE -from bup import options, ssh, path -from bup.helpers import DemuxConn, log - - -optspec = """ -bup on index ... -bup on save ... -bup on split ... -""" -o = options.Options(optspec, optfunc=getopt.getopt) -(opt, flags, extra) = o.parse(sys.argv[1:]) -if len(extra) < 2: - o.fatal('arguments expected') - -class SigException(Exception): - def __init__(self, signum): - self.signum = signum - Exception.__init__(self, 'signal %d received' % signum) -def handler(signum, frame): - raise SigException(signum) - -signal.signal(signal.SIGTERM, handler) -signal.signal(signal.SIGINT, handler) - -try: - sp = None - p = None - ret = 99 - - hp = extra[0].split(':') - if len(hp) == 1: - (hostname, port) = (hp[0], None) - else: - (hostname, port) = hp - argv = extra[1:] - p = ssh.connect(hostname, port, 'on--server', stderr=PIPE) - - try: - argvs = '\0'.join(['bup'] + argv) - p.stdin.write(struct.pack('!I', len(argvs)) + argvs) - p.stdin.flush() - sp = subprocess.Popen([path.exe(), 'server'], - 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 - # in case our child doesn't die. - try: - ret = p.wait() - if sp: - sp.wait() - break - except SigException as e: - log('\nbup on: %s\n' % e) - os.kill(p.pid, e.signum) - ret = 84 -except SigException as e: - if ret == 0: - ret = 99 - log('\nbup on: %s\n' % e) - -sys.exit(ret)