]> arthur.barton.de Git - bup.git/commitdiff
Adjust --exclude* parsing and drecurse-cmd for python 3 and test
authorRob Browning <rlb@defaultvalue.org>
Wed, 1 Jan 2020 19:03:46 +0000 (13:03 -0600)
committerRob Browning <rlb@defaultvalue.org>
Sun, 2 Feb 2020 19:30:12 +0000 (13:30 -0600)
Handle --exclude and --exclude-from values as bytes, adjust
drecurse-command for python 3, and include test-drecurse.sh
in the python 3 test set.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
Makefile
cmd/drecurse-cmd.py
lib/bup/helpers.py

index 89bbffbf52af3f89e9384d61fbd4858443655b22..2158f49c750d6506f02c45750a5c99395da3f5ea 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -170,6 +170,7 @@ runtests-python: all t/tmp
 cmdline_tests := \
   t/test-argv \
   t/test-compression.sh \
+  t/test-drecurse.sh \
   t/test-fsck.sh \
   t/test-index-clear.sh \
   t/test-ls \
@@ -190,7 +191,6 @@ ifeq "2" "$(bup_python_majver)"
     t/test-index.sh \
     t/test-split-join.sh \
     t/test-fuse.sh \
-    t/test-drecurse.sh \
     t/test-cat-file.sh \
     t/test-index-check-device.sh \
     t/test-meta.sh \
index a3a7d30aa4a368ce682bc55b83c55f0478bb84b2..3fa155fdd27548a748ac8890a9083cdd6045a4a6 100755 (executable)
@@ -10,7 +10,9 @@ from os.path import relpath
 import sys
 
 from bup import options, drecurse
+from bup.compat import argv_bytes
 from bup.helpers import log, parse_excludes, parse_rx_excludes, saved_errors
+from bup.io import byte_stream
 
 
 optspec = """
@@ -30,9 +32,9 @@ o = options.Options(optspec)
 if len(extra) != 1:
     o.fatal("exactly one filename expected")
 
-drecurse_top = extra[0]
+drecurse_top = argv_bytes(extra[0])
 excluded_paths = parse_excludes(flags, o.fatal)
-if not drecurse_top.startswith('/'):
+if not drecurse_top.startswith(b'/'):
     excluded_paths = [relpath(x) for x in excluded_paths]
 exclude_rxs = parse_rx_excludes(flags, o.fatal)
 it = drecurse.recursive_dirlist([drecurse_top], opt.xdev,
@@ -49,8 +51,10 @@ else:
         for i in it:
             pass
     else:
+        sys.stdout.flush()
+        out = byte_stream(sys.stdout)
         for (name,st) in it:
-            print(name)
+            out.write(name + b'\n')
 
 if saved_errors:
     log('WARNING: %d errors encountered.\n' % len(saved_errors))
index 8773cfc0cf98e28f08e511642083881ab25c060f..a85c3784232ccae8625d0279751f41cc9f153cf3 100644 (file)
@@ -12,7 +12,7 @@ import hashlib, heapq, math, operator, time, grp, tempfile
 
 from bup import _helpers
 from bup import compat
-from bup.compat import byte_int
+from bup.compat import argv_bytes, byte_int
 from bup.io import path_msg
 # This function should really be in helpers, not in bup.options.  But we
 # want options.py to be standalone so people can include it in other projects.
@@ -964,12 +964,12 @@ def parse_excludes(options, fatal):
     for flag in options:
         (option, parameter) = flag
         if option == '--exclude':
-            excluded_paths.append(resolve_parent(parameter))
+            excluded_paths.append(resolve_parent(argv_bytes(parameter)))
         elif option == '--exclude-from':
             try:
-                f = open(resolve_parent(parameter))
+                f = open(resolve_parent(argv_bytes(parameter)), 'rb')
             except IOError as e:
-                raise fatal("couldn't read %s" % parameter)
+                raise fatal("couldn't read %r" % parameter)
             for exclude_path in f.readlines():
                 # FIXME: perhaps this should be rstrip('\n')
                 exclude_path = resolve_parent(exclude_path.strip())
@@ -987,22 +987,22 @@ def parse_rx_excludes(options, fatal):
         (option, parameter) = flag
         if option == '--exclude-rx':
             try:
-                excluded_patterns.append(re.compile(parameter))
+                excluded_patterns.append(re.compile(argv_bytes(parameter)))
             except re.error as ex:
-                fatal('invalid --exclude-rx pattern (%s): %s' % (parameter, ex))
+                fatal('invalid --exclude-rx pattern (%r): %s' % (parameter, ex))
         elif option == '--exclude-rx-from':
             try:
-                f = open(resolve_parent(parameter))
+                f = open(resolve_parent(parameter), 'rb')
             except IOError as e:
-                raise fatal("couldn't read %s" % parameter)
+                raise fatal("couldn't read %r" % parameter)
             for pattern in f.readlines():
-                spattern = pattern.rstrip('\n')
+                spattern = pattern.rstrip(b'\n')
                 if not spattern:
                     continue
                 try:
                     excluded_patterns.append(re.compile(spattern))
                 except re.error as ex:
-                    fatal('invalid --exclude-rx pattern (%s): %s' % (spattern, ex))
+                    fatal('invalid --exclude-rx pattern (%r): %s' % (spattern, ex))
     return excluded_patterns