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