Commits (2)
......@@ -50,6 +50,7 @@ class ComparatorManager:
("javascript.JavaScriptFile",),
("json.JSONFile",),
("xml.XMLFile",),
("xmlb.XMLBFile",),
("openssl.Pkcs7File",),
("openssl.MobileProvisionFile",),
("text.TextFile",),
......
#
# diffoscope: in-depth comparison of files, archives, and directories
#
# Copyright © 2021 Chris Lamb <lamby@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)]
......@@ -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: in-depth comparison of files, archives, and directories
#
# Copyright © 2017, 2020 Chris Lamb <lamby@debian.org>
# Copyright © 2017, 2020, 2021 Chris Lamb <lamby@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)
......