[Git][reproducible-builds/diffoscope][master] 2 commits: Also check, for example, /usr/lib/x86_64-linux-gnu to our PATH.

Chris Lamb (@lamby) gitlab at salsa.debian.org
Wed Dec 29 11:26:35 UTC 2021



Chris Lamb pushed to branch master at Reproducible Builds / diffoscope


Commits:
eb34fe74 by Chris Lamb at 2021-12-29T11:25:26+00:00
Also check, for example, /usr/lib/x86_64-linux-gnu to our PATH.

This is so we can find xb-tool.

- - - - -
a9ecfb78 by Chris Lamb at 2021-12-29T11:26:06+00:00
Add support for XMLb files. (Closes: reproducible-builds/diffoscope#295)

- - - - -


4 changed files:

- diffoscope/comparators/__init__.py
- + diffoscope/comparators/xmlb.py
- diffoscope/external_tools.py
- diffoscope/path.py


Changes:

=====================================
diffoscope/comparators/__init__.py
=====================================
@@ -50,6 +50,7 @@ class ComparatorManager:
         ("javascript.JavaScriptFile",),
         ("json.JSONFile",),
         ("xml.XMLFile",),
+        ("xmlb.XMLBFile",),
         ("openssl.Pkcs7File",),
         ("openssl.MobileProvisionFile",),
         ("text.TextFile",),


=====================================
diffoscope/comparators/xmlb.py
=====================================
@@ -0,0 +1,46 @@
+#
+# diffoscope: in-depth comparison of files, archives, and directories
+#
+# Copyright © 2021 Chris Lamb <lamby at debian.org>
+#
+# diffoscope is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# diffoscope is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with diffoscope.  If not, see <https://www.gnu.org/licenses/>.
+
+from diffoscope.tools import tool_required
+from diffoscope.difference import Difference
+
+from .utils.file import File
+from .utils.command import Command
+
+XMLB_MAGIC = b"XMLb"
+
+
+class XbTool(Command):
+    @tool_required("xb-tool")
+    def cmdline(self):
+        return ["xb-tool", "dump", self.path]
+
+
+class XMLBFile(File):
+    DESCRIPTION = "XMLB files"
+    FILE_EXTENSION_SUFFIX = {".xb"}
+
+    @classmethod
+    def recognizes(cls, file):
+        if not super().recognizes(file):
+            return False
+
+        return file.file_header.startswith(XMLB_MAGIC)
+
+    def compare_details(self, other, source=None):
+        return [Difference.from_operation(XbTool, self.path, other.path)]


=====================================
diffoscope/external_tools.py
=====================================
@@ -238,6 +238,7 @@ EXTERNAL_TOOLS = {
     "zipnote": {"debian": "zip", "guix": "zip"},
     "procyon": {"debian": "procyon-decompiler"},
     "dumpxsb": {"debian": "xmlbeans"},
+    "xb-tool": {"debian": "libxmlb-dev"},
     "zstd": {"debian": "zstd", "guix": "zstd"},
 }
 


=====================================
diffoscope/path.py
=====================================
@@ -1,7 +1,7 @@
 #
 # diffoscope: in-depth comparison of files, archives, and directories
 #
-# Copyright © 2017, 2020 Chris Lamb <lamby at debian.org>
+# Copyright © 2017, 2020, 2021 Chris Lamb <lamby at debian.org>
 #
 # diffoscope is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -17,12 +17,23 @@
 # along with diffoscope.  If not, see <https://www.gnu.org/licenses/>.
 
 import os
+import sys
 
 
 def set_path():
+    to_add = ["/sbin", "/usr/sbin", "/usr/local/sbin"]
     pathlist = os.environ["PATH"].split(os.pathsep)
 
-    for x in ("/sbin", "/usr/sbin", "/usr/local/sbin"):
+    # Check the /usr/lib/<multiarch-triplet directory as well.
+    try:
+        arch_dir = os.path.join("/usr/lib", sys.implementation._multiarch)
+    except AttributeError:
+        pass
+    else:
+        if os.path.exists(arch_dir):
+            to_add.append(arch_dir)
+
+    for x in to_add:
         if x not in pathlist:
             pathlist.append(x)
 



View it on GitLab: https://salsa.debian.org/reproducible-builds/diffoscope/-/compare/0cba1b1f10cf0ec68aa726cbe1d196401f49df36...a9ecfb781ae696f23d098d2b3c5502b7a438bee4

-- 
View it on GitLab: https://salsa.debian.org/reproducible-builds/diffoscope/-/compare/0cba1b1f10cf0ec68aa726cbe1d196401f49df36...a9ecfb781ae696f23d098d2b3c5502b7a438bee4
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.reproducible-builds.org/pipermail/rb-commits/attachments/20211229/fd640ee9/attachment.htm>


More information about the rb-commits mailing list