[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#855608: unblock: diffoscope/78 (preapproval)



On Sun, Feb 26, 2017 at 03:57:00PM +0000, Niels Thykier wrote:
> Please go ahead.

Thank you, uploaded.  The final debdiff:

% debdiff -p diffoscope_77.dsc diffoscope_78.dsc
diffstat for diffoscope-77 diffoscope-78

 debian/changelog                    |   18 ++++++++++++++
 diffoscope/__init__.py              |    2 -
 diffoscope/comparators/directory.py |   44 ++++++++++++++++++++----------------
 diffoscope/comparators/elf.py       |    2 -
 diffoscope/comparators/json.py      |    2 -
 tests/comparators/test_binary.py    |    6 ----
 tests/comparators/test_device.py    |    6 ++--
 tests/comparators/test_rpm.py       |    4 +--
 tests/comparators/utils/data.py     |   12 +++++++++
 9 files changed, 64 insertions(+), 32 deletions(-)

diff -Nru diffoscope-77/debian/changelog diffoscope-78/debian/changelog
--- diffoscope-77/debian/changelog	2017-02-13 16:25:02.000000000 +0100
+++ diffoscope-78/debian/changelog	2017-02-26 17:26:48.000000000 +0100
@@ -1,3 +1,21 @@
+diffoscope (78) unstable; urgency=medium 
+
+  [ Brett Smith ]
+  * comparators.json:
+    + Catch bad JSON errors on Python pre-3.5.  Closes: #855233
+
+  [ Chris Lamb ]
+  * tests:
+    + Move normalize_zeros to more generic `utils.data` module.
+    + Fix tests that call xxd fail on jessie due to output change.
+      Closes: #855239
+
+  [ Ed Maste ]
+  * comparators.directory:
+    + Assume BSD-style stat(1) on FreeBSD.  Closes: #855169
+
+ -- Mattia Rizzolo <mattia@debian.org>  Sun, 26 Feb 2017 17:26:48 +0100
+
 diffoscope (77) unstable; urgency=medium
 
   [ Chris Lamb ]
diff -Nru diffoscope-77/diffoscope/comparators/directory.py diffoscope-78/diffoscope/comparators/directory.py
--- diffoscope-77/diffoscope/comparators/directory.py	2017-02-13 13:24:56.000000000 +0100
+++ diffoscope-78/diffoscope/comparators/directory.py	2017-02-26 17:23:10.000000000 +0100
@@ -45,25 +45,31 @@
     return all_files
 
 
-class Stat(Command):
-    @tool_required('stat')
-    def cmdline(self):
-        return ['stat', self.path]
-
-    FILE_RE = re.compile(r'^\s*File:.*$')
-    DEVICE_RE = re.compile(r'Device: [0-9a-f]+h/[0-9]+d\s+')
-    INODE_RE = re.compile(r'Inode: [0-9]+\s+')
-    ACCESS_TIME_RE = re.compile(r'^Access: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$')
-    CHANGE_TIME_RE = re.compile(r'^Change: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$')
-
-    def filter(self, line):
-        line = line.decode('utf-8')
-        line = Stat.FILE_RE.sub('', line)
-        line = Stat.DEVICE_RE.sub('', line)
-        line = Stat.INODE_RE.sub('', line)
-        line = Stat.ACCESS_TIME_RE.sub('', line)
-        line = Stat.CHANGE_TIME_RE.sub('', line)
-        return line.encode('utf-8')
+if os.uname()[0] == 'FreeBSD':
+    class Stat(Command):
+        @tool_required('stat')
+        def cmdline(self):
+            return ['stat', '-t', '%Y-%m-%d %H:%M:%S', '-f', '%Sp %l %Su %Sg %z %Sm %k %b %#Xf', self.path]
+else:
+    class Stat(Command):
+        @tool_required('stat')
+        def cmdline(self):
+            return ['stat', self.path]
+
+        FILE_RE = re.compile(r'^\s*File:.*$')
+        DEVICE_RE = re.compile(r'Device: [0-9a-f]+h/[0-9]+d\s+')
+        INODE_RE = re.compile(r'Inode: [0-9]+\s+')
+        ACCESS_TIME_RE = re.compile(r'^Access: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$')
+        CHANGE_TIME_RE = re.compile(r'^Change: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$')
+
+        def filter(self, line):
+            line = line.decode('utf-8')
+            line = Stat.FILE_RE.sub('', line)
+            line = Stat.DEVICE_RE.sub('', line)
+            line = Stat.INODE_RE.sub('', line)
+            line = Stat.ACCESS_TIME_RE.sub('', line)
+            line = Stat.CHANGE_TIME_RE.sub('', line)
+            return line.encode('utf-8')
 
 
 @tool_required('lsattr')
diff -Nru diffoscope-77/diffoscope/comparators/elf.py diffoscope-78/diffoscope/comparators/elf.py
--- diffoscope-77/diffoscope/comparators/elf.py	2017-02-10 23:54:34.000000000 +0100
+++ diffoscope-78/diffoscope/comparators/elf.py	2017-02-26 17:23:38.000000000 +0100
@@ -398,7 +398,7 @@
                 output = output[2:]
             output = output[5:]
 
-            # Entires of readelf --section-headers have the following columns:
+            # Entries of readelf --section-headers have the following columns:
             # [Nr]  Name  Type  Address  Off  Size  ES  Flg  Lk  Inf  Al
             self._sections = collections.OrderedDict()
             for line in output:
diff -Nru diffoscope-77/diffoscope/comparators/json.py diffoscope-78/diffoscope/comparators/json.py
--- diffoscope-77/diffoscope/comparators/json.py	2017-01-14 11:59:14.000000000 +0100
+++ diffoscope-78/diffoscope/comparators/json.py	2017-02-26 17:23:38.000000000 +0100
@@ -37,7 +37,7 @@
         with open(file.path) as f:
             try:
                 file.parsed = json.load(f, object_pairs_hook=collections.OrderedDict)
-            except json.JSONDecodeError:
+            except ValueError:
                 return False
 
         return True
diff -Nru diffoscope-77/diffoscope/__init__.py diffoscope-78/diffoscope/__init__.py
--- diffoscope-77/diffoscope/__init__.py	2017-02-13 15:30:54.000000000 +0100
+++ diffoscope-78/diffoscope/__init__.py	2017-02-26 17:26:48.000000000 +0100
@@ -17,4 +17,4 @@
 # You should have received a copy of the GNU General Public License
 # along with diffoscope.  If not, see <https://www.gnu.org/licenses/>.
 
-VERSION = "77"
+VERSION = "78"
diff -Nru diffoscope-77/tests/comparators/test_binary.py diffoscope-78/tests/comparators/test_binary.py
--- diffoscope-77/tests/comparators/test_binary.py	2017-02-10 23:54:34.000000000 +0100
+++ diffoscope-78/tests/comparators/test_binary.py	2017-02-26 17:23:38.000000000 +0100
@@ -32,7 +32,7 @@
 from diffoscope.comparators.missing_file import MissingFile
 from diffoscope.comparators.utils.compare import Xxd
 
-from utils.data import data, init_fixture, get_data
+from utils.data import data, init_fixture, get_data, normalize_zeros
 from utils.tools import skip_unless_tools_exist
 
 
@@ -46,10 +46,6 @@
 binary1 = init_fixture(TEST_FILE1_PATH)
 binary2 = init_fixture(TEST_FILE2_PATH)
 
-def normalize_zeros(s):
-    # older xxd had one zero less.  Make sure there are always 8.
-    return s.replace('-0000000:', '-00000000:').replace('+0000000:', '+00000000:')
-
 def test_same_content(binary1):
     assert binary1.has_same_content_as(binary1) is True
 
diff -Nru diffoscope-77/tests/comparators/test_device.py diffoscope-78/tests/comparators/test_device.py
--- diffoscope-77/tests/comparators/test_device.py	2017-02-10 23:54:40.000000000 +0100
+++ diffoscope-78/tests/comparators/test_device.py	2017-02-26 17:23:38.000000000 +0100
@@ -23,7 +23,7 @@
 from diffoscope.comparators.device import Device
 from diffoscope.comparators.utils.specialize import specialize
 
-from utils.data import load_fixture, get_data
+from utils.data import load_fixture, get_data, normalize_zeros
 from utils.tools import skip_unless_tools_exist
 
 
@@ -47,9 +47,9 @@
 @skip_unless_tools_exist('xxd')
 def test_diff(differences):
     expected_diff = get_data('device_expected_diff')
-    assert differences.unified_diff == expected_diff
+    assert normalize_zeros(differences.unified_diff) == expected_diff
 
 @skip_unless_tools_exist('xxd')
 def test_diff_reverse(differences_reverse):
     expected_diff = get_data('device_expected_diff_reverse')
-    assert differences_reverse.unified_diff == expected_diff
+    assert normalize_zeros(differences_reverse.unified_diff) == expected_diff
diff -Nru diffoscope-77/tests/comparators/test_rpm.py diffoscope-78/tests/comparators/test_rpm.py
--- diffoscope-77/tests/comparators/test_rpm.py	2017-02-10 23:54:40.000000000 +0100
+++ diffoscope-78/tests/comparators/test_rpm.py	2017-02-26 17:23:38.000000000 +0100
@@ -23,7 +23,7 @@
 from diffoscope.comparators.binary import FilesystemFile
 from diffoscope.comparators.utils.specialize import specialize
 
-from utils.data import load_fixture, data, get_data
+from utils.data import load_fixture, data, get_data, normalize_zeros
 from utils.tools import skip_unless_tools_exist, skip_unless_module_exists
 from utils.nonexisting import assert_non_existing
 
@@ -92,4 +92,4 @@
     assert rpm2.compare(rpm2) is None
 
     expected_diff = get_data('rpm_fallback_expected_diff')
-    assert rpm1.compare(rpm2).unified_diff == expected_diff
+    assert normalize_zeros(rpm1.compare(rpm2).unified_diff) == expected_diff
diff -Nru diffoscope-77/tests/comparators/utils/data.py diffoscope-78/tests/comparators/utils/data.py
--- diffoscope-77/tests/comparators/utils/data.py	2017-02-10 23:54:34.000000000 +0100
+++ diffoscope-78/tests/comparators/utils/data.py	2017-02-26 17:23:38.000000000 +0100
@@ -19,11 +19,16 @@
 # along with diffoscope.  If not, see <https://www.gnu.org/licenses/>.
 
 import os
+import re
 import pytest
 
 from diffoscope.comparators.binary import FilesystemFile
 from diffoscope.comparators.utils.specialize import specialize
 
+re_normalize_zeros = re.compile(
+    r'^(?P<prefix>[ \-\+])(?P<offset>[0-9a-f]+)(?=: )', re.MULTILINE,
+)
+
 
 def init_fixture(filename):
     return pytest.fixture(
@@ -47,3 +52,10 @@
 
 def load_fixture(filename):
     return init_fixture(data(filename))
+
+
+def normalize_zeros(s):
+    # older xxd had one zero less.  Make sure there are always 8.
+    def repl(x):
+        return '{}{:08x}'.format(x.group('prefix'), int(x.group('offset'), 16))
+    return re_normalize_zeros.sub(repl, s)


-- 
regards,
                        Mattia Rizzolo

GPG Key: 66AE 2B4A FCCF 3F52 DA18  4D18 4B04 3FCD B944 4540      .''`.
more about me:  https://mapreri.org                             : :'  :
Launchpad user: https://launchpad.net/~mapreri                  `. `'`
Debian QA page: https://qa.debian.org/developer.php?login=mattia  `-

Attachment: signature.asc
Description: PGP signature


Reply to: