]> arthur.barton.de Git - bup.git/commitdiff
test-prune-older: accommodate unified_diff break in python 3.5
authorRob Browning <rlb@defaultvalue.org>
Sun, 15 Nov 2020 17:44:27 +0000 (11:44 -0600)
committerRob Browning <rlb@defaultvalue.org>
Thu, 26 Nov 2020 21:53:09 +0000 (15:53 -0600)
Apparently python 3.5 changed unified_diff to crash when given bytes
arguments, and added a new diff_bytes function.  Use the latter when
the version is >= 3.5.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
test/ext/test-prune-older

index d42c3fc00fd49259454c2a6bbc45b3a4cc0def0e..0c8b6237300b9c61cce637b9e1f92fa319233d2f 100755 (executable)
@@ -7,7 +7,6 @@ exec "$bup_python" "$0" ${1+"$@"}
 
 from __future__ import absolute_import, print_function
 from collections import defaultdict
-from difflib import unified_diff
 from itertools import chain, dropwhile, groupby, takewhile
 from os import chdir
 from os.path import abspath, dirname
@@ -18,6 +17,11 @@ from sys import stderr
 from time import localtime, strftime, time
 import os, random, sys
 
+if sys.version_info[:2] >= (3, 5):
+    from difflib import diff_bytes, unified_diff
+else:
+    from difflib import unified_diff
+
 # For buptest, wvtest, ...
 sys.path[:0] = (abspath(os.path.dirname(__file__) + '/../..'),)
 sys.path[:0] = (abspath(os.path.dirname(__file__) + '/../../test/lib'),)
@@ -29,8 +33,12 @@ from wvtest import wvfail, wvpass, wvpasseq, wvpassne, wvstart
 from bup import compat
 from bup.compat import environ
 from bup.helpers import partition, period_as_secs, readpipe
+from bup.io import byte_stream
 import bup.path
 
+if sys.version_info[:2] < (3, 5):
+    def diff_bytes(_, *args):
+        return unified_diff(*args)
 
 def create_older_random_saves(n, start_utc, end_utc):
     with open(b'foo', 'wb') as f:
@@ -127,14 +135,17 @@ def check_prune_result(expected):
     actual = sorted([int(x)
                      for x in exo([b'git', b'log',
                                    b'--pretty=format:%at']).out.splitlines()])
+
     if expected != actual:
         for x in expected:
             print('ex:', x, strftime('%Y-%m-%d-%H%M%S', localtime(x)),
                   file=stderr)
-        for line in unified_diff([result_diffline(x) for x in expected],
-                                 [result_diffline(x) for x in actual],
-                                 fromfile='expected', tofile='actual'):
-            sys.stderr.write(line)
+        for line in diff_bytes(unified_diff,
+                               [result_diffline(x) for x in expected],
+                               [result_diffline(x) for x in actual],
+                               fromfile=b'expected', tofile=b'actual'):
+            sys.stderr.flush()
+            byte_stream(sys.stderr).write(line)
     wvpass(expected == actual)