]> arthur.barton.de Git - bup.git/blob - cmd/mux-cmd.py
Adjust sparse restore tests for test fs block size
[bup.git] / cmd / mux-cmd.py
1 #!/usr/bin/env python
2 import os, sys, subprocess, struct
3 from bup import options
4 from bup.helpers import *
5
6 # Give the subcommand exclusive access to stdin.
7 orig_stdin = os.dup(0)
8 devnull = os.open('/dev/null', os.O_RDONLY)
9 os.dup2(devnull, 0)
10 os.close(devnull)
11
12 optspec = """
13 bup mux command [arguments...]
14 --
15 """
16 o = options.Options(optspec)
17 (opt, flags, extra) = o.parse(sys.argv[1:])
18 if len(extra) < 1:
19     o.fatal('command is required')
20
21 subcmd = extra
22
23 debug2('bup mux: starting %r\n' % (extra,))
24
25 outr, outw = os.pipe()
26 errr, errw = os.pipe()
27 def close_fds():
28     os.close(outr)
29     os.close(errr)
30
31 p = subprocess.Popen(subcmd, stdin=orig_stdin, stdout=outw, stderr=errw,
32                      preexec_fn=close_fds)
33 os.close(outw)
34 os.close(errw)
35 sys.stdout.write('BUPMUX')
36 sys.stdout.flush()
37 mux(p, sys.stdout.fileno(), outr, errr)
38 os.close(outr)
39 os.close(errr)
40 prv = p.wait()
41
42 if prv:
43     debug1('%s exited with code %d\n' % (extra[0], prv))
44
45 debug1('bup mux: done\n')
46
47 sys.exit(prv)