[diffoscope] 02/02: Add support for Debian .buildinfo files

Jérémy Bobbio lunar at moszumanska.debian.org
Wed Jan 20 17:04:34 CET 2016


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch master
in repository diffoscope.

commit 6c5c6a37447fd0df6da20b6c0c1eb91c4cf5b764
Author: Jérémy Bobbio <lunar at debian.org>
Date:   Wed Jan 20 16:02:56 2016 +0000

    Add support for Debian .buildinfo files
---
 diffoscope/comparators/__init__.py        |   5 +-
 diffoscope/comparators/debian.py          |  41 ++++++++-
 diffoscope/comparators/debian_fallback.py |  14 +++
 tests/comparators/test_debian.py          |  59 +++++++++++-
 tests/data/test1.buildinfo                | 144 ++++++++++++++++++++++++++++++
 tests/data/test2.buildinfo                | 144 ++++++++++++++++++++++++++++++
 6 files changed, 399 insertions(+), 8 deletions(-)

diff --git a/diffoscope/comparators/__init__.py b/diffoscope/comparators/__init__.py
index 755f7e0..5224ca1 100644
--- a/diffoscope/comparators/__init__.py
+++ b/diffoscope/comparators/__init__.py
@@ -38,11 +38,11 @@ from diffoscope.comparators.cbfs import CbfsFile
 from diffoscope.comparators.cpio import CpioFile
 from diffoscope.comparators.deb import DebFile, Md5sumsFile, DebDataTarFile
 try:
-    from diffoscope.comparators.debian import DotChangesFile, DotDscFile
+    from diffoscope.comparators.debian import DotChangesFile, DotDscFile, DotBuildinfoFile
 except ImportError as ex:
     if hasattr(ex, 'msg') and not ex.msg.startswith("No module named 'debian"):
         raise
-    from diffoscope.comparators.debian_fallback import DotChangesFile, DotDscFile
+    from diffoscope.comparators.debian_fallback import DotChangesFile, DotDscFile, DotBuildinfoFile
 from diffoscope.comparators.device import Device
 from diffoscope.comparators.dex import DexFile
 from diffoscope.comparators.directory import FilesystemDirectory, Directory, compare_directories
@@ -127,6 +127,7 @@ FILE_CLASSES = (
     Device,
     DotChangesFile,
     DotDscFile,
+    DotBuildinfoFile,
     Md5sumsFile,
     DebDataTarFile,
     ElfSection,
diff --git a/diffoscope/comparators/debian.py b/diffoscope/comparators/debian.py
index 495df66..298ccc2 100644
--- a/diffoscope/comparators/debian.py
+++ b/diffoscope/comparators/debian.py
@@ -30,6 +30,7 @@ from diffoscope.comparators.binary import File, NonExistingFile
 from diffoscope.comparators.utils import Container, NO_COMMENT
 from diffoscope.config import Config
 from diffoscope.difference import Difference
+from diffoscope import logger
 
 
 DOT_CHANGES_FIELDS = [
@@ -88,7 +89,8 @@ class DebControlContainer(Container):
         return OrderedDict([(self._trim_version_number(name), self.get_member(name)) for name in self.get_member_names()])
 
     def get_member_names(self):
-        return [d['name'] for d in self.source.deb822.get('Files')]
+        field = self.source.deb822.get('Files') or self.source.deb822.get('Checksums-Sha256')
+        return [d['name'] for d in field]
 
     def get_member(self, member_name):
         return DebControlMember(self, member_name)
@@ -120,9 +122,14 @@ class DebControlFile(File):
                                    my_value, other_value,
                                    self.path, other.path, source=field))
         # compare Files as string
-        differences.append(Difference.from_text(self.deb822.get_as_string('Files'),
-                                                other.deb822.get_as_string('Files'),
-                                                self.path, other.path, source='Files'))
+        if self.deb822.get('Files'):
+            differences.append(Difference.from_text(self.deb822.get_as_string('Files'),
+                                                    other.deb822.get_as_string('Files'),
+                                                    self.path, other.path, source='Files'))
+        else:
+            differences.append(Difference.from_text(self.deb822.get_as_string('Checksums-Sha256'),
+                                                    other.deb822.get_as_string('Checksums-Sha256'),
+                                                    self.path, other.path, source='Checksums-Sha256'))
         return differences
 
 class DotChangesFile(DebControlFile):
@@ -140,6 +147,7 @@ class DotChangesFile(DebControlFile):
         file._deb822 = changes
         return True
 
+
 class DotDscFile(DebControlFile):
     RE_FILE_EXTENSION = re.compile(r'\.dsc$')
 
@@ -162,3 +170,28 @@ class DotDscFile(DebControlFile):
                     return False
             file._deb822 = dsc
         return True
+
+
+class DotBuildinfoFile(DebControlFile):
+    RE_FILE_EXTENSION = re.compile(r'\.buildinfo$')
+
+    @staticmethod
+    def recognizes(file):
+        if not DotBuildinfoFile.RE_FILE_EXTENSION.search(file.name):
+            return False
+        with open(file.path, 'rb') as f:
+            # We can parse .buildinfo just like .dsc
+            buildinfo = Dsc(f)
+            for d in buildinfo.get('Checksums-Sha256'):
+                sha256 = hashlib.sha256()
+                # XXX: this will not work for containers
+                in_buildinfo_path = os.path.join(os.path.dirname(file.path), d['Name'])
+                if not os.path.exists(in_buildinfo_path):
+                    return False
+                with open(in_buildinfo_path, 'rb') as f:
+                    for buf in iter(partial(f.read, 32768), b''):
+                        sha256.update(buf)
+                if sha256.hexdigest() != d['sha256']:
+                    return False
+            file._deb822 = buildinfo
+        return True
diff --git a/diffoscope/comparators/debian_fallback.py b/diffoscope/comparators/debian_fallback.py
index 0f44e6f..0633c97 100644
--- a/diffoscope/comparators/debian_fallback.py
+++ b/diffoscope/comparators/debian_fallback.py
@@ -47,3 +47,17 @@ class DotDscFile(TextFile):
             return None
         difference.add_comment('Unable to find Python debian module. Falling back to text comparison.')
         return difference
+
+class DotBuildinfoFile(TextFile):
+    RE_FILE_EXTENSION = re.compile(r'\.buildinfo$')
+
+    @staticmethod
+    def recognizes(file):
+        return DotDscFile.RE_FILE_EXTENSION.search(file.name)
+
+    def compare(self, other, source=None):
+        difference = super().compare(other)
+        if not difference:
+            return None
+        difference.add_comment('Unable to find Python debian module. Falling back to text comparison.')
+        return difference
diff --git a/tests/comparators/test_debian.py b/tests/comparators/test_debian.py
index f839930..86e70c2 100644
--- a/tests/comparators/test_debian.py
+++ b/tests/comparators/test_debian.py
@@ -23,10 +23,10 @@ import pytest
 from diffoscope.comparators import specialize
 from diffoscope.comparators.binary import FilesystemFile, NonExistingFile
 try:
-    from diffoscope.comparators.debian import DotChangesFile, DotDscFile
+    from diffoscope.comparators.debian import DotChangesFile, DotDscFile, DotBuildinfoFile
     miss_debian_module = False
 except ImportError:
-    from diffoscope.comparators.debian_fallback import DotChangesFile, DotDscFile
+    from diffoscope.comparators.debian_fallback import DotChangesFile, DotDscFile, DotBuildinfoFile
     miss_debian_module = True
 from diffoscope.config import Config
 from diffoscope.presenters.text import output_text
@@ -146,3 +146,58 @@ def test_dot_dsc_compare_non_existing(monkeypatch, dot_dsc1):
     output_text(difference, print_func=print)
     assert difference.source2 == '/nonexisting'
     assert difference.details[-1].source2 == '/dev/null'
+
+TEST_DOT_BUILDINFO_FILE1_PATH = os.path.join(os.path.dirname(__file__), '../data/test1.buildinfo')
+TEST_DOT_BUILDINFO_FILE2_PATH = os.path.join(os.path.dirname(__file__), '../data/test2.buildinfo')
+
+ at pytest.fixture
+def dot_buildinfo1(tmpdir):
+    tmpdir.mkdir('a')
+    dot_buildinfo_path = str(tmpdir.join('a/test_1.buildinfo'))
+    shutil.copy(TEST_DOT_BUILDINFO_FILE1_PATH, dot_buildinfo_path)
+    shutil.copy(TEST_DOT_DSC_FILE1_PATH, str(tmpdir.join('a/test_1.dsc')))
+    shutil.copy(TEST_DEB_FILE1_PATH, str(tmpdir.join('a/test_1_all.deb')))
+    return specialize(FilesystemFile(dot_buildinfo_path))
+
+ at pytest.fixture
+def dot_buildinfo2(tmpdir):
+    tmpdir.mkdir('b')
+    dot_buildinfo_path = str(tmpdir.join('b/test_1.buildinfo'))
+    shutil.copy(TEST_DOT_BUILDINFO_FILE2_PATH, dot_buildinfo_path)
+    shutil.copy(TEST_DOT_DSC_FILE2_PATH, str(tmpdir.join('b/test_1.dsc')))
+    shutil.copy(TEST_DEB_FILE2_PATH, str(tmpdir.join('b/test_1_all.deb')))
+    return specialize(FilesystemFile(dot_buildinfo_path))
+
+def test_dot_buildinfo_identification(dot_buildinfo1):
+    assert isinstance(dot_buildinfo1, DotBuildinfoFile)
+
+ at pytest.mark.skipif(miss_debian_module, reason='debian module is not installed')
+def test_dot_buildinfo_invalid(tmpdir):
+    tmpdir.mkdir('a')
+    dot_buildinfo_path = str(tmpdir.join('a/test_1.buildinfo'))
+    shutil.copy(TEST_DOT_BUILDINFO_FILE1_PATH, dot_buildinfo_path)
+    # we don't copy the referenced .deb
+    identified = specialize(FilesystemFile(dot_buildinfo_path))
+    assert not isinstance(identified, DotBuildinfoFile)
+
+def test_dot_buildinfo_no_differences(dot_buildinfo1):
+    difference = dot_buildinfo1.compare(dot_buildinfo1)
+    assert difference is None
+
+ at pytest.fixture
+def dot_buildinfo_differences(dot_buildinfo1, dot_buildinfo2):
+    difference = dot_buildinfo1.compare(dot_buildinfo2)
+    output_text(difference, print_func=print)
+    return difference.details
+
+ at pytest.mark.skipif(miss_debian_module, reason='debian module is not installed')
+def test_dot_buildinfo_internal_diff(dot_buildinfo_differences):
+    assert dot_buildinfo_differences[1].source1 == 'test_1_all.deb'
+
+ at pytest.mark.skipif(miss_debian_module, reason='debian module is not installed')
+def test_dot_buildinfo_compare_non_existing(monkeypatch, dot_buildinfo1):
+    monkeypatch.setattr(Config.general, 'new_file', True)
+    difference = dot_buildinfo1.compare(NonExistingFile('/nonexisting', dot_buildinfo1))
+    output_text(difference, print_func=print)
+    assert difference.source2 == '/nonexisting'
+    assert difference.details[-1].source2 == '/dev/null'
diff --git a/tests/data/test1.buildinfo b/tests/data/test1.buildinfo
new file mode 100644
index 0000000..538d2c1
--- /dev/null
+++ b/tests/data/test1.buildinfo
@@ -0,0 +1,144 @@
+Format: 1.0
+Build-Architecture: amd64
+Source: test
+Binary: test
+Architecture: all
+Version: 1
+Checksums-Md5:
+ 660ad4713e5d8271df2e7e86bf246dc0 2262 devel optional test_1_all.deb
+Checksums-Sha1:
+ b21eeec5004853c4955d5b856a6546068c2d7dc9 2262 test_1_all.deb
+Checksums-Sha256:
+ d2b2ea8b9cf8ef645a328cdb882586ee465e141fc66a2dbe1ad29b29ac1e7920 2262 test_1_all.deb
+Build-Path: /build/test-1
+Build-Environment:
+ base-files (= 9.4),
+ base-passwd (= 3.5.38),
+ bash (= 4.3-14),
+ binutils (= 2.25.1-5),
+ bsdmainutils (= 9.0.6),
+ bsdutils (= 1:2.27-3),
+ build-essential (= 12.1),
+ bzip2 (= 1.0.6-8),
+ coreutils (= 8.23-4),
+ cpp (= 4:5.2.1-4),
+ cpp-5 (= 5.2.1-21),
+ dash (= 0.5.7-4+b1),
+ debconf (= 1.5.57),
+ debhelper (= 9.20151005.0~reproducible2),
+ debianutils (= 4.5.1),
+ dh-strip-nondeterminism (= 0.013-1),
+ diffutils (= 1:3.3-2),
+ dpkg (= 1.18.5~reproducible1),
+ dpkg-dev (= 1.18.5~reproducible1),
+ e2fslibs (= 1.42.13-1),
+ e2fsprogs (= 1.42.13-1),
+ file (= 1:5.25-2),
+ findutils (= 4.4.2-9+b1),
+ g++ (= 4:5.2.1-4),
+ g++-5 (= 5.2.1-21),
+ gcc (= 4:5.2.1-4),
+ gcc-5 (= 5.2.1-21),
+ gcc-5-base (= 5.2.1-21),
+ gettext (= 0.19.6-1),
+ gettext-base (= 0.19.6-1),
+ grep (= 2.21-2),
+ groff-base (= 1.22.3-1),
+ gzip (= 1.6-4),
+ hostname (= 3.16),
+ init (= 1.23),
+ initscripts (= 2.88dsf-59.2),
+ insserv (= 1.14.0-5),
+ intltool-debian (= 0.35.0+20060710.4),
+ libacl1 (= 2.2.52-2),
+ libarchive-zip-perl (= 1.53-1),
+ libasan2 (= 5.2.1-21),
+ libatomic1 (= 5.2.1-21),
+ libattr1 (= 1:2.4.47-2),
+ libaudit-common (= 1:2.4.4-4),
+ libaudit1 (= 1:2.4.4-4),
+ libblkid1 (= 2.27-3),
+ libbz2-1.0 (= 1.0.6-8),
+ libc-bin (= 2.19-22),
+ libc-dev-bin (= 2.19-22),
+ libc6 (= 2.19-22),
+ libc6-dev (= 2.19-22),
+ libcap2 (= 1:2.24-12),
+ libcc1-0 (= 5.2.1-21),
+ libcilkrts5 (= 5.2.1-21),
+ libcomerr2 (= 1.42.13-1),
+ libcroco3 (= 0.6.8-3+b1),
+ libdb5.3 (= 5.3.28-11),
+ libdebconfclient0 (= 0.195),
+ libdpkg-perl (= 1.18.5~reproducible1),
+ libffi6 (= 3.2.1-3),
+ libfile-stripnondeterminism-perl (= 0.013-1),
+ libgcc-5-dev (= 5.2.1-21),
+ libgcc1 (= 1:5.2.1-21),
+ libgcrypt20 (= 1.6.3-2),
+ libgdbm3 (= 1.8.3-13.1),
+ libglib2.0-0 (= 2.46.0-2),
+ libgmp10 (= 2:6.0.0+dfsg-7),
+ libgomp1 (= 5.2.1-21),
+ libgpg-error0 (= 1.20-1),
+ libicu55 (= 55.1-5),
+ libisl13 (= 0.14-2),
+ libitm1 (= 5.2.1-21),
+ liblsan0 (= 5.2.1-21),
+ liblzma5 (= 5.1.1alpha+20120614-2.1),
+ libmagic1 (= 1:5.25-2),
+ libmount1 (= 2.27-3),
+ libmpc3 (= 1.0.3-1),
+ libmpfr4 (= 3.1.3-1),
+ libmpx0 (= 5.2.1-21),
+ libncurses5 (= 6.0+20150810-1),
+ libpam-modules (= 1.1.8-3.1),
+ libpam-modules-bin (= 1.1.8-3.1),
+ libpam-runtime (= 1.1.8-3.1),
+ libpam0g (= 1.1.8-3.1),
+ libpcre3 (= 2:8.35-7.2),
+ libpipeline1 (= 1.4.1-1),
+ libquadmath0 (= 5.2.1-21),
+ libselinux1 (= 2.3-2+b1),
+ libsemanage-common (= 2.3-1),
+ libsemanage1 (= 2.3-1+b2),
+ libsepol1 (= 2.3-2),
+ libsmartcols1 (= 2.27-3),
+ libss2 (= 1.42.13-1),
+ libstdc++-5-dev (= 5.2.1-21),
+ libstdc++6 (= 5.2.1-21),
+ libsystemd0 (= 226-4),
+ libtimedate-perl (= 2.3000-2),
+ libtinfo5 (= 6.0+20150810-1),
+ libtsan0 (= 5.2.1-21),
+ libubsan0 (= 5.2.1-21),
+ libudev1 (= 228-2),
+ libunistring0 (= 0.9.3-5.2+b1),
+ libustr-1.0-1 (= 1.0.4-5),
+ libuuid1 (= 2.27-3),
+ libxml2 (= 2.9.2+zdfsg1-4),
+ linux-libc-dev (= 4.2.3-1),
+ login (= 1:4.2-3),
+ lsb-base (= 9.20150917),
+ make (= 4.0-8.2),
+ man-db (= 2.7.4-1),
+ mount (= 2.27-3),
+ ncurses-base (= 6.0+20150810-1),
+ ncurses-bin (= 6.0+20150810-1),
+ passwd (= 1:4.2-3),
+ patch (= 2.7.5-1),
+ perl (= 5.20.2-6),
+ perl-base (= 5.20.2-6),
+ perl-modules (= 5.20.2-6),
+ po-debconf (= 1.0.18),
+ sed (= 4.2.2-6.1),
+ sensible-utils (= 0.0.9),
+ startpar (= 0.59-3),
+ sysv-rc (= 2.88dsf-59.2),
+ sysvinit-core (= 2.88dsf-59.2),
+ sysvinit-utils (= 2.88dsf-59.2),
+ tar (= 1.28-2),
+ tzdata (= 2015g-1),
+ util-linux (= 2.27.1-1),
+ xz-utils (= 5.1.1alpha+20120614-2.1),
+ zlib1g (= 1:1.2.8.dfsg-2+b1)
diff --git a/tests/data/test2.buildinfo b/tests/data/test2.buildinfo
new file mode 100644
index 0000000..c87548f
--- /dev/null
+++ b/tests/data/test2.buildinfo
@@ -0,0 +1,144 @@
+Format: 1.0
+Build-Architecture: amd64
+Source: test
+Binary: test
+Architecture: all
+Version: 1
+Checksums-Md5:
+ d323c454462407fe3bfde31a74b23eba 2388 test_1_all.deb
+Checksums-Sha1:
+ 70982664db2015334bff6441b429d7e3c58dbecb 2388 test_1_all.deb
+Checksums-Sha256:
+ 2f2e45ee3a5fdacd9b30133ec728121588bf9b97af3b947b3882b2b28a0555da 2388 test_1_all.deb
+Build-Path: /build/test-1
+Build-Environment:
+ base-files (= 9.4),
+ base-passwd (= 3.5.38),
+ bash (= 4.3-14),
+ binutils (= 2.25.1-5),
+ bsdmainutils (= 9.0.6),
+ bsdutils (= 1:2.27-3),
+ build-essential (= 12.1),
+ bzip2 (= 1.0.6-8),
+ coreutils (= 8.23-4),
+ cpp (= 4:5.2.1-4),
+ cpp-5 (= 5.2.1-21),
+ dash (= 0.5.7-4+b1),
+ debconf (= 1.5.57),
+ debhelper (= 9.20151005.0~reproducible2),
+ debianutils (= 4.5.1),
+ dh-strip-nondeterminism (= 0.013-1),
+ diffutils (= 1:3.3-2),
+ dpkg (= 1.18.5~reproducible1),
+ dpkg-dev (= 1.18.5~reproducible1),
+ e2fslibs (= 1.42.13-1),
+ e2fsprogs (= 1.42.13-1),
+ file (= 1:5.25-2),
+ findutils (= 4.4.2-9+b1),
+ g++ (= 4:5.2.1-4),
+ g++-5 (= 5.2.1-21),
+ gcc (= 4:5.2.1-4),
+ gcc-5 (= 5.2.1-21),
+ gcc-5-base (= 5.2.1-21),
+ gettext (= 0.19.6-1),
+ gettext-base (= 0.19.6-1),
+ grep (= 2.21-2),
+ groff-base (= 1.22.3-1),
+ gzip (= 1.6-4),
+ hostname (= 3.16),
+ init (= 1.23),
+ initscripts (= 2.88dsf-59.2),
+ insserv (= 1.14.0-5),
+ intltool-debian (= 0.35.0+20060710.4),
+ libacl1 (= 2.2.52-2),
+ libarchive-zip-perl (= 1.53-1),
+ libasan2 (= 5.2.1-21),
+ libatomic1 (= 5.2.1-21),
+ libattr1 (= 1:2.4.47-2),
+ libaudit-common (= 1:2.4.4-4),
+ libaudit1 (= 1:2.4.4-4),
+ libblkid1 (= 2.27-3),
+ libbz2-1.0 (= 1.0.6-8),
+ libc-bin (= 2.19-22),
+ libc-dev-bin (= 2.19-22),
+ libc6 (= 2.19-22),
+ libc6-dev (= 2.19-22),
+ libcap2 (= 1:2.24-12),
+ libcc1-0 (= 5.2.1-21),
+ libcilkrts5 (= 5.2.1-21),
+ libcomerr2 (= 1.42.13-1),
+ libcroco3 (= 0.6.8-3+b1),
+ libdb5.3 (= 5.3.28-11),
+ libdebconfclient0 (= 0.195),
+ libdpkg-perl (= 1.18.5~reproducible1),
+ libffi6 (= 3.2.1-3),
+ libfile-stripnondeterminism-perl (= 0.013-1),
+ libgcc-5-dev (= 5.2.1-21),
+ libgcc1 (= 1:5.2.1-21),
+ libgcrypt20 (= 1.6.3-2),
+ libgdbm3 (= 1.8.3-13.1),
+ libglib2.0-0 (= 2.46.0-2),
+ libgmp10 (= 2:6.0.0+dfsg-7),
+ libgomp1 (= 5.2.1-21),
+ libgpg-error0 (= 1.20-1),
+ libicu55 (= 55.1-5),
+ libisl13 (= 0.14-2),
+ libitm1 (= 5.2.1-21),
+ liblsan0 (= 5.2.1-21),
+ liblzma5 (= 5.1.1alpha+20120614-2.1),
+ libmagic1 (= 1:5.25-2),
+ libmount1 (= 2.27-3),
+ libmpc3 (= 1.0.3-1),
+ libmpfr4 (= 3.1.3-1),
+ libmpx0 (= 5.2.1-21),
+ libncurses5 (= 6.0+20150810-1),
+ libpam-modules (= 1.1.8-3.1),
+ libpam-modules-bin (= 1.1.8-3.1),
+ libpam-runtime (= 1.1.8-3.1),
+ libpam0g (= 1.1.8-3.1),
+ libpcre3 (= 2:8.35-7.2),
+ libpipeline1 (= 1.4.1-1),
+ libquadmath0 (= 5.2.1-21),
+ libselinux1 (= 2.3-2+b1),
+ libsemanage-common (= 2.3-1),
+ libsemanage1 (= 2.3-1+b2),
+ libsepol1 (= 2.3-2),
+ libsmartcols1 (= 2.27-3),
+ libss2 (= 1.42.13-1),
+ libstdc++-5-dev (= 5.2.1-21),
+ libstdc++6 (= 5.2.1-21),
+ libsystemd0 (= 226-4),
+ libtimedate-perl (= 2.3000-2),
+ libtinfo5 (= 6.0+20150810-1),
+ libtsan0 (= 5.2.1-21),
+ libubsan0 (= 5.2.1-21),
+ libudev1 (= 228-2),
+ libunistring0 (= 0.9.3-5.2+b1),
+ libustr-1.0-1 (= 1.0.4-5),
+ libuuid1 (= 2.27-3),
+ libxml2 (= 2.9.2+zdfsg1-4),
+ linux-libc-dev (= 4.2.3-1),
+ login (= 1:4.2-3),
+ lsb-base (= 9.20150917),
+ make (= 4.0-8.2),
+ man-db (= 2.7.4-1),
+ mount (= 2.27-3),
+ ncurses-base (= 6.0+20150810-1),
+ ncurses-bin (= 6.0+20150810-1),
+ passwd (= 1:4.2-3),
+ patch (= 2.7.5-1),
+ perl (= 5.20.2-6),
+ perl-base (= 5.20.2-6),
+ perl-modules (= 5.20.2-6),
+ po-debconf (= 1.0.18),
+ sed (= 4.2.2-6.1),
+ sensible-utils (= 0.0.9),
+ startpar (= 0.59-3),
+ sysv-rc (= 2.88dsf-59.2),
+ sysvinit-core (= 2.88dsf-59.2),
+ sysvinit-utils (= 2.88dsf-59.2),
+ tar (= 1.28-2),
+ tzdata (= 2015g-1),
+ util-linux (= 2.27.1-1),
+ xz-utils (= 5.1.1alpha+20120614-2.1),
+ zlib1g (= 1:1.2.8.dfsg-2+b1)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/diffoscope.git


More information about the diffoscope mailing list