]> arthur.barton.de Git - bup.git/commitdiff
mux: convert to internal command
authorRob Browning <rlb@defaultvalue.org>
Fri, 12 Feb 2021 20:15:11 +0000 (14:15 -0600)
committerRob Browning <rlb@defaultvalue.org>
Sat, 6 Mar 2021 18:29:39 +0000 (12:29 -0600)
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
lib/bup/cmd/mux.py
lib/cmd/bup

index 3204bec07f47f06ae97694db26d4416f70bf781f..606f027b6e28033d2428c497182aa5dd961ac79a 100755 (executable)
@@ -1,72 +1,55 @@
-#!/bin/sh
-"""": # -*-python-*-
-# https://sourceware.org/bugzilla/show_bug.cgi?id=26034
-export "BUP_ARGV_0"="$0"
-arg_i=1
-for arg in "$@"; do
-    export "BUP_ARGV_${arg_i}"="$arg"
-    shift
-    arg_i=$((arg_i + 1))
-done
-# Here to end of preamble replaced during install
-bup_python="$(dirname "$0")/../../../config/bin/python" || exit $?
-exec "$bup_python" "$0"
-"""
-# end of bup preamble
 
 from __future__ import absolute_import
+import os, struct, subprocess, sys
 
-# Intentionally replace the dirname "$0" that python prepends
-import os, sys
-sys.path[0] = os.path.dirname(os.path.realpath(__file__)) + '/../..'
-
-import struct, subprocess
-
-from bup import compat, options
+from bup import options
 from bup.helpers import debug1, debug2, mux
 from bup.io import byte_stream
 
-# Give the subcommand exclusive access to stdin.
-orig_stdin = os.dup(0)
-devnull = os.open(os.devnull, os.O_RDONLY)
-os.dup2(devnull, 0)
-os.close(devnull)
 
 optspec = """
 bup mux command [arguments...]
 --
 """
-o = options.Options(optspec)
-opt, flags, extra = o.parse(compat.argv[1:])
-if len(extra) < 1:
-    o.fatal('command is required')
 
-subcmd = extra
-
-debug2('bup mux: starting %r\n' % (extra,))
-
-outr, outw = os.pipe()
-errr, errw = os.pipe()
-def close_fds():
+def main(argv):
+    # Give the subcommand exclusive access to stdin.
+    orig_stdin = os.dup(0)
+    devnull = os.open(os.devnull, os.O_RDONLY)
+    os.dup2(devnull, 0)
+    os.close(devnull)
+
+    o = options.Options(optspec)
+    opt, flags, extra = o.parse_bytes(argv[1:])
+    if len(extra) < 1:
+        o.fatal('command is required')
+
+    subcmd = extra
+
+    debug2('bup mux: starting %r\n' % (extra,))
+
+    outr, outw = os.pipe()
+    errr, errw = os.pipe()
+    def close_fds():
+        os.close(outr)
+        os.close(errr)
+
+    p = subprocess.Popen(subcmd, stdin=orig_stdin, stdout=outw, stderr=errw,
+                         close_fds=False, preexec_fn=close_fds)
+    os.close(outw)
+    os.close(errw)
+    sys.stdout.flush()
+    out = byte_stream(sys.stdout)
+    out.write(b'BUPMUX')
+    out.flush()
+    mux(p, out.fileno(), outr, errr)
     os.close(outr)
     os.close(errr)
+    prv = p.wait()
 
-p = subprocess.Popen(subcmd, stdin=orig_stdin, stdout=outw, stderr=errw,
-                     close_fds=False, preexec_fn=close_fds)
-os.close(outw)
-os.close(errw)
-sys.stdout.flush()
-out = byte_stream(sys.stdout)
-out.write(b'BUPMUX')
-out.flush()
-mux(p, out.fileno(), outr, errr)
-os.close(outr)
-os.close(errr)
-prv = p.wait()
-
-if prv:
-    debug1('%s exited with code %d\n' % (extra[0], prv))
+    if prv:
+        debug1('%s exited with code %d\n' % (extra[0], prv))
 
-debug1('bup mux: done\n')
+    debug1('bup mux: done\n')
 
-sys.exit(prv)
+    sys.exit(prv)
index aacb20b139b6b36e24ec820867a6241e03044ba9..7beda76bb116a868660a595b0239beb97cef58f9 100755 (executable)
@@ -203,6 +203,7 @@ try:
                            b'memtest',
                            b'meta',
                            b'midx',
+                           b'mux',
                            b'random',
                            b'rm',
                            b'split',