commit diffoscope for openSUSE:Factory
Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package diffoscope for openSUSE:Factory checked in at 2021-11-03 17:25:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/diffoscope (Old) and /work/SRC/openSUSE:Factory/.diffoscope.new.1890 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "diffoscope" Wed Nov 3 17:25:38 2021 rev:21 rq:928848 version:189 Changes: -------- --- /work/SRC/openSUSE:Factory/diffoscope/diffoscope.changes 2021-10-15 23:05:12.098150422 +0200 +++ /work/SRC/openSUSE:Factory/.diffoscope.new.1890/diffoscope.changes 2021-11-03 17:26:30.585345225 +0100 @@ -1,0 +2,24 @@ +Tue Nov 2 19:29:18 UTC 2021 - Sebastian Wagner <sebix+novell.com@sebix.at> + +- update to version 189: + - Try some alternative suffixes (eg. ".py") to support distributions that + strip or retain them. (Closes: reproducible-builds/diffoscope#283) + - Skip Python bytecode testing where we do not have an expected diff. + (Closes: reproducible-builds/diffoscope#284) + - Refactor the find_executable utility into an explicit method. + - Split out a custom call to assert_diff to support a .startswith equivalent. + - Use skipif instead of manual conditionals in some tests. + - Add an external tool reference for Guix to support ppudump and dumppdf. + - Update uImage test output for file(1) version 5.41. + - Add Arch Linux as CI test target. + - Add external tools on Arch Linux for ffmpeg, openssl and ocalobjinfo. + +------------------------------------------------------------------- +Fri Oct 22 08:44:31 UTC 2021 - Sebastian Wagner <sebix+novell.com@sebix.at> + +- update to version 188: + - Add support for Python Sphinx inventory files, usually named objects.inv. + - Fix Python bytecode decompilation tests with Python 3.10+. + (Closes: reproducible-builds/diffoscope#278) + +------------------------------------------------------------------- Old: ---- diffoscope-187.tar.bz2 diffoscope-187.tar.bz2.asc New: ---- diffoscope-189.tar.bz2 diffoscope-189.tar.bz2.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ diffoscope.spec ++++++ --- /var/tmp/diff_new_pack.bTBHHd/_old 2021-11-03 17:26:31.113345514 +0100 +++ /var/tmp/diff_new_pack.bTBHHd/_new 2021-11-03 17:26:31.117345516 +0100 @@ -17,7 +17,7 @@ Name: diffoscope -Version: 187 +Version: 189 Release: 0 Summary: In-depth comparison of files, archives, and directories License: GPL-3.0-or-later ++++++ diffoscope-187.tar.bz2 -> diffoscope-189.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/debian/changelog new/diffoscope-189/debian/changelog --- old/diffoscope-187/debian/changelog 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/debian/changelog 2021-10-29 10:47:06.000000000 +0200 @@ -1,3 +1,34 @@ +diffoscope (189) unstable; urgency=medium + + [ Chris Lamb ] + * Try some alternative suffixes (eg. ".py") to support distributions that + strip or retain them. (Closes: reproducible-builds/diffoscope#283) + * Skip Python bytecode testing where we do not have an expected diff. + (Closes: reproducible-builds/diffoscope#284) + * Refactor the find_executable utility into an explicit method. + * Split out a custom call to assert_diff to support a .startswith equivalent. + * Use skipif instead of manual conditionals in some tests. + + [ Vagrant Cascadian ] + * Add an external tool reference for Guix to support ppudump and dumppdf. + + [ Sergei Trofimovich ] + * Update uImage test output for file(1) version 5.41. + + [ Jelle van der Waa ] + * Add Arch Linux as CI test target. + * Add external tools on Arch Linux for ffmpeg, openssl and ocalobjinfo. + + -- Chris Lamb <lamby@debian.org> Fri, 29 Oct 2021 09:47:04 +0100 + +diffoscope (188) unstable; urgency=medium + + * Add support for Python Sphinx inventory files, usually named objects.inv. + * Fix Python bytecode decompilation tests with Python 3.10+. + (Closes: reproducible-builds/diffoscope#278) + + -- Chris Lamb <lamby@debian.org> Fri, 22 Oct 2021 09:08:55 +0100 + diffoscope (187) unstable; urgency=medium * Add support for comparing .pyc files. Thanks to Sergei Trofimovich. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/diffoscope/__init__.py new/diffoscope-189/diffoscope/__init__.py --- old/diffoscope-187/diffoscope/__init__.py 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/diffoscope/__init__.py 2021-10-29 10:47:06.000000000 +0200 @@ -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 = "187" +VERSION = "189" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/diffoscope/comparators/__init__.py new/diffoscope-189/diffoscope/comparators/__init__.py --- old/diffoscope-187/diffoscope/comparators/__init__.py 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/diffoscope/comparators/__init__.py 2021-10-29 10:47:06.000000000 +0200 @@ -107,6 +107,7 @@ ("pgp.PgpFile",), ("pgp.PgpSignature",), ("python.PycFile",), + ("sphinx.SphinxInventoryFile",), ("kbx.KbxFile",), ("fit.FlattenedImageTreeFile",), ("dtb.DeviceTreeFile",), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/diffoscope/comparators/sphinx.py new/diffoscope-189/diffoscope/comparators/sphinx.py --- old/diffoscope-187/diffoscope/comparators/sphinx.py 1970-01-01 01:00:00.000000000 +0100 +++ new/diffoscope-189/diffoscope/comparators/sphinx.py 2021-10-29 10:47:06.000000000 +0200 @@ -0,0 +1,60 @@ +# +# 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/>. + +import zlib + +from diffoscope.difference import Difference + +from .utils.file import File + +MAGIC = b"# Sphinx inventory version" + + +class SphinxInventoryFile(File): + DESCRIPTION = "Sphinx inventory files" + FILE_EXTENSION_SUFFIX = {".inv"} + + def compare_details(self, other, source=None): + return [ + Difference.from_text( + describe_inventory(self.path), + describe_inventory(other.path), + self.path, + other.path, + source="Sphinx inventory", + ) + ] + + +def describe_inventory(filename): + head = b"" + tail = b"" + + with open(filename, "rb") as f: + for line in f: + if line.startswith(b"#"): + # Save commented lines at top of file + head += line + else: + # ... save the rest for decompression + tail += line + + result = head + b"\n" if head else b"" + result += zlib.decompress(tail) + + return result.decode("utf-8") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/diffoscope/external_tools.py new/diffoscope-189/diffoscope/external_tools.py --- old/diffoscope-187/diffoscope/external_tools.py 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/diffoscope/external_tools.py 2021-10-29 10:47:06.000000000 +0200 @@ -35,7 +35,7 @@ "FreeBSD": "libarchive", "guix": "libarchive", }, - "dumppdf": {"debian": "python3-pdfminer"}, + "dumppdf": {"debian": "python3-pdfminer", "guix": "python-pdfminer-six"}, "bzip2": {"debian": "bzip2", "arch": "bzip2", "guix": "bzip2"}, "cbfstool": {}, "cd-iccdump": { @@ -64,7 +64,7 @@ "arch": "dtc", "guix": "dtc", }, - "ffprobe": {"debian": "ffmpeg", "guix": "ffmpeg"}, + "ffprobe": {"debian": "ffmpeg", "arch": "ffmpeg", "guix": "ffmpeg"}, "file": {"debian": "file", "arch": "file", "guix": "file"}, "find": {"debian": "findutils", "arch": "findutils", "guix": "findutils"}, "getfacl": {"debian": "acl", "arch": "acl", "guix": "acl"}, @@ -150,10 +150,10 @@ "arch": "binutils", "guix": "binutils", }, - "ocamlobjinfo": {"debian": "ocaml-nox", "guix": "ocaml"}, + "ocamlobjinfo": {"debian": "ocaml-nox", "arch": "ocaml", "guix": "ocaml"}, "odt2txt": {"debian": "odt2txt", "arch": "odt2txt", "guix": "odt2txt"}, "oggDump": {"debian": "oggvideotools"}, - "openssl": {"debian": "openssl", "guix": "openssl"}, + "openssl": {"debian": "openssl", "arch": "openssl", "guix": "openssl"}, "otool": {}, "pgpdump": {"debian": "pgpdump", "arch": "pgpdump", "guix": "pgpdump"}, "pdftotext": { @@ -168,7 +168,12 @@ "FreeBSD": "mono", "guix": "mono", }, - "ppudump": {"debian": "fp-utils", "arch": "fpc", "FreeBSD": "fpc"}, + "ppudump": { + "debian": "fp-utils", + "arch": "fpc", + "FreeBSD": "fpc", + "guix": "fpc", + }, "ps2ascii": { "debian": "ghostscript", "arch": "ghostscript", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/diffoscope/tools.py new/diffoscope-189/diffoscope/tools.py --- old/diffoscope-187/diffoscope/tools.py 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/diffoscope/tools.py 2021-10-29 10:47:06.000000000 +0200 @@ -29,9 +29,6 @@ from .profiling import profile from .external_tools import EXTERNAL_TOOLS, REMAPPED_TOOL_NAMES, GNU_TOOL_NAMES -# Memoize calls to ``which`` to avoid excessive stat calls -find_executable = functools.lru_cache()(shutil.which) - # The output of --help and --list-tools will use the order of this dict. # Please keep it alphabetized. OS_NAMES = collections.OrderedDict( @@ -44,6 +41,22 @@ ) +@functools.lru_cache() +def find_executable(cmd): + """ + Given a command name (eg. `dumppdf`), return the absolute path to that + command. Will also try the command with some common suffixes (eg. + `dumppdf.py`) to support distributions that strip or retain them. + + Returns `None` if no command is found. + """ + + for suffix in ("", ".py"): + val = shutil.which(f"{cmd}{suffix}") + if val: + return val + + def get_tools(only_missing=False): """Return the tool configuration in a dict""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/comparators/test_python.py new/diffoscope-189/tests/comparators/test_python.py --- old/diffoscope-187/tests/comparators/test_python.py 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/tests/comparators/test_python.py 2021-10-29 10:47:06.000000000 +0200 @@ -17,10 +17,12 @@ # along with diffoscope. If not, see <https://www.gnu.org/licenses/>. import pytest +import sys from diffoscope.comparators.python import PycFile -from ..utils.data import assert_diff, load_fixture +from ..utils.data import assert_diff_startswith, load_fixture +from ..utils.tools import skipif pyc1 = load_fixture("test1.pyc-renamed") @@ -32,7 +34,11 @@ assert isinstance(pyc2, PycFile) +@skipif(sys.version_info >= (3, 10), reason="Unstable on 3.10+") def test_no_differences(pyc1): + # Disassembling bytecode prior to Python 3.10 is stable when applied to + # itself, otherwise various memory offsets (or memory addresses?) are + # non-deterministic. assert pyc1.compare(pyc1) is None @@ -41,5 +47,12 @@ return pyc1.compare(pyc2).details +@skipif( + sys.version_info < (3, 9), + reason="pyc_expected_diff generated on Python 3.9", +) def test_diff(differences): - assert_diff(differences[0], "pyc_expected_diff") + assert_diff_startswith( + differences[0], + "pyc_expected_diff", + ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/comparators/test_sphinx.py new/diffoscope-189/tests/comparators/test_sphinx.py --- old/diffoscope-187/tests/comparators/test_sphinx.py 1970-01-01 01:00:00.000000000 +0100 +++ new/diffoscope-189/tests/comparators/test_sphinx.py 2021-10-29 10:47:06.000000000 +0200 @@ -0,0 +1,45 @@ +# +# 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/>. + +import pytest + +from diffoscope.comparators.sphinx import SphinxInventoryFile + +from ..utils.data import assert_diff, load_fixture + + +inv1 = load_fixture("test1.inv") +inv2 = load_fixture("test2.inv") + + +def test_identification(inv1, inv2): + assert isinstance(inv1, SphinxInventoryFile) + assert isinstance(inv2, SphinxInventoryFile) + + +def test_no_differences(inv1): + assert inv1.compare(inv1) is None + + +@pytest.fixture +def differences(inv1, inv2): + return inv1.compare(inv2).details + + +def test_diff(differences): + assert_diff(differences[0], "inv_expected_diff") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/comparators/test_uimage.py new/diffoscope-189/tests/comparators/test_uimage.py --- old/diffoscope-187/tests/comparators/test_uimage.py 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/tests/comparators/test_uimage.py 2021-10-29 10:47:06.000000000 +0200 @@ -23,8 +23,8 @@ from diffoscope.comparators.uimage import UimageFile from diffoscope.comparators.utils.specialize import specialize -from ..utils.data import load_fixture, get_data -from ..utils.tools import skip_unless_tools_exist +from ..utils.data import load_fixture, get_data, assert_diff +from ..utils.tools import skip_unless_tools_exist, file_version_is_lt from ..utils.nonexisting import assert_non_existing cpio1 = load_fixture("test1.cpio") @@ -98,8 +98,12 @@ def test_file_differences(differences): - expected_diff = get_data("uimage_expected_diff") - assert differences[0].unified_diff == expected_diff + filename = "uimage_expected_diff" + # file-5.41 slightly changed the output format by dropping leading 0x. + if file_version_is_lt("5.41"): + filename = "uimage_expected_diff_pre_5_41" + + assert_diff(differences[0], filename) @skip_unless_tools_exist("cpio") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/data/inv_expected_diff new/diffoscope-189/tests/data/inv_expected_diff --- old/diffoscope-187/tests/data/inv_expected_diff 1970-01-01 01:00:00.000000000 +0100 +++ new/diffoscope-189/tests/data/inv_expected_diff 2021-10-29 10:47:06.000000000 +0200 @@ -0,0 +1,187 @@ +@@ -1,19 +1,171 @@ +-api std:doc -1 api.html API +-api std:label -1 api.html#$ API +-configuration std:doc -1 configuration.html Configuration file +-configuration std:label -1 configuration.html#$ Configuration file ++# Sphinx inventory version 2 ++# Project: pytools ++# Version: 2021.2.8 ++# The remainder of this file is compressed using zlib. ++ ++pytools py:module 0 reference.html#module-$ - ++pytools.DebugProcessLogger py:class 1 reference.html#$ - ++pytools.F py:class 1 reference.html#$ - ++pytools.ProcessLogger py:class 1 reference.html#$ - ++pytools.ProcessLogger.__enter__ py:method 1 reference.html#$ - ++pytools.ProcessLogger.__exit__ py:method 1 reference.html#$ - ++pytools.ProcessLogger.__init__ py:method 1 reference.html#$ - ++pytools.ProcessLogger.done py:method 1 reference.html#$ - ++pytools.ProcessTimer py:class 1 reference.html#$ - ++pytools.ProcessTimer.__enter__ py:method 1 reference.html#$ - ++pytools.ProcessTimer.__exit__ py:method 1 reference.html#$ - ++pytools.ProcessTimer.done py:method 1 reference.html#$ - ++pytools.ProcessTimer.process_elapsed py:attribute 1 reference.html#$ - ++pytools.ProcessTimer.wall_elapsed py:attribute 1 reference.html#$ - ++pytools.ProgressBar py:class 1 reference.html#$ - ++pytools.ProgressBar.__enter__ py:method 1 reference.html#$ - ++pytools.ProgressBar.__exit__ py:method 1 reference.html#$ - ++pytools.ProgressBar.draw py:method 1 reference.html#$ - ++pytools.ProgressBar.finished py:method 1 reference.html#$ - ++pytools.ProgressBar.progress py:method 1 reference.html#$ - ++pytools.ProgressBar.set_progress py:method 1 reference.html#$ - ++pytools.T py:class 1 reference.html#$ - ++pytools.Table py:class 1 reference.html#$ - ++pytools.Table.__str__ py:method 1 reference.html#$ - ++pytools.Table.add_row py:method 1 reference.html#$ - ++pytools.Table.github_markdown py:method 1 reference.html#$ - ++pytools.Table.latex py:method 1 reference.html#$ - ++pytools.UniqueNameGenerator py:class 1 reference.html#$ - ++pytools.UniqueNameGenerator.__call__ py:method 1 reference.html#$ - ++pytools.UniqueNameGenerator.add_name py:method 1 reference.html#$ - ++pytools.UniqueNameGenerator.add_names py:method 1 reference.html#$ - ++pytools.UniqueNameGenerator.is_name_conflicting py:method 1 reference.html#$ - ++pytools.all_roughly_equal py:function 1 reference.html#$ - ++pytools.argmax py:function 1 reference.html#$ - ++pytools.argmax2 py:function 1 reference.html#$ - ++pytools.argmin py:function 1 reference.html#$ - ++pytools.argmin2 py:function 1 reference.html#$ - ++pytools.cartesian_product py:function 1 reference.html#$ - ++pytools.codegen py:module 0 codegen.html#module-$ - ++pytools.codegen.CodeGenerator py:class 1 codegen.html#$ - ++pytools.codegen.CodeGenerator.__call__ py:method 1 codegen.html#$ - ++pytools.codegen.CodeGenerator.add_to_preamble py:method 1 codegen.html#$ - ++pytools.codegen.CodeGenerator.dedent py:method 1 codegen.html#$ - ++pytools.codegen.CodeGenerator.extend py:method 1 codegen.html#$ - ++pytools.codegen.CodeGenerator.get py:method 1 codegen.html#$ - ++pytools.codegen.CodeGenerator.indent py:method 1 codegen.html#$ - ++pytools.codegen.Indentation py:class 1 codegen.html#$ - ++pytools.codegen.Indentation.__enter__ py:method 1 codegen.html#$ - ++pytools.codegen.Indentation.__exit__ py:method 1 codegen.html#$ - ++pytools.codegen.Indentation.generator py:attribute 1 codegen.html#$ - ++pytools.codegen.remove_common_indentation py:function 1 codegen.html#$ - ++pytools.comb py:function 1 reference.html#$ - ++pytools.datatable py:module 0 reference.html#module-$ - ++pytools.datatable.DataTable py:class 1 reference.html#$ - ++pytools.datatable.DataTable.__init__ py:method 1 reference.html#$ - ++pytools.datatable.DataTable.copy py:method 1 reference.html#$ - ++pytools.datatable.DataTable.deep_copy py:method 1 reference.html#$ - ++pytools.datatable.DataTable.join py:method 1 reference.html#$ - ++pytools.deprecate_keyword py:function 1 reference.html#$ - ++pytools.distinct_pairs py:function 1 reference.html#$ - ++pytools.download_from_web_if_not_present py:function 1 reference.html#$ - ++pytools.generate_all_integer_tuples_below py:function 1 reference.html#$ - ++pytools.generate_nonnegative_integer_tuples_below py:function 1 reference.html#$ - ++pytools.generate_nonnegative_integer_tuples_summing_to_at_most py:function 1 reference.html#$ - ++pytools.generate_numbered_unique_names py:function 1 reference.html#$ - ++pytools.generate_permutations py:function 1 reference.html#$ - ++pytools.generate_unique_names py:function 1 reference.html#$ - ++pytools.generate_unique_permutations py:function 1 reference.html#$ - ++pytools.graph py:module 0 graph.html#module-$ - ++pytools.graph.CycleError py:class 1 graph.html#$ - ++pytools.graph.T py:class 1 graph.html#$ - ++pytools.graph.a_star py:function 1 graph.html#$ - ++pytools.graph.compute_induced_subgraph py:function 1 graph.html#$ - ++pytools.graph.compute_sccs py:function 1 graph.html#$ - ++pytools.graph.compute_topological_order py:function 1 graph.html#$ - ++pytools.graph.compute_transitive_closure py:function 1 graph.html#$ - ++pytools.graph.contains_cycle py:function 1 graph.html#$ - ++pytools.invoke_editor py:function 1 reference.html#$ - ++pytools.is_single_valued py:function 1 reference.html#$ - ++pytools.keyed_memoize_in py:function 1 reference.html#$ - ++pytools.keyed_memoize_method py:function 1 reference.html#$ - ++pytools.keyed_memoize_on_first_arg py:function 1 reference.html#$ - ++pytools.levi_civita py:function 1 reference.html#$ - ++pytools.log_process py:class 1 reference.html#$ - ++pytools.memoize py:function 1 reference.html#$ - ++pytools.memoize_in py:function 1 reference.html#$ - ++pytools.memoize_method py:function 1 reference.html#$ - ++pytools.memoize_on_first_arg py:function 1 reference.html#$ - ++pytools.natorder py:function 1 reference.html#$ - ++pytools.natsorted py:function 1 reference.html#$ - ++pytools.obj_array py:module 0 obj_array.html#module-$ - ++pytools.obj_array.flat_obj_array py:function 1 obj_array.html#$ - ++pytools.obj_array.make_obj_array py:function 1 obj_array.html#$ - ++pytools.obj_array.obj_array_imag py:function 1 obj_array.html#$ - ++pytools.obj_array.obj_array_imag_copy py:function 1 obj_array.html#$ - ++pytools.obj_array.obj_array_real py:function 1 obj_array.html#$ - ++pytools.obj_array.obj_array_real_copy py:function 1 obj_array.html#$ - ++pytools.obj_array.obj_array_vectorize py:function 1 obj_array.html#$ - ++pytools.obj_array.obj_array_vectorize_n_args py:function 1 obj_array.html#$ - ++pytools.one py:function 1 reference.html#$ - ++pytools.perm py:function 1 reference.html#$ - ++pytools.persistent_dict py:module 0 persistent_dict.html#module-$ - ++pytools.persistent_dict.CollisionWarning py:exception 1 persistent_dict.html#$ - ++pytools.persistent_dict.KeyBuilder py:class 1 persistent_dict.html#$ - ++pytools.persistent_dict.KeyBuilder.__call__ py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.KeyBuilder.new_hash py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.KeyBuilder.rec py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.NoSuchEntryError py:exception 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict py:class 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.__delitem__ py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.__getitem__ py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.__init__ py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.__setitem__ py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.clear py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.fetch py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.remove py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.store py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.PersistentDict.store_if_not_present py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.ReadOnlyEntryError py:exception 1 persistent_dict.html#$ - ++pytools.persistent_dict.WriteOncePersistentDict py:class 1 persistent_dict.html#$ - ++pytools.persistent_dict.WriteOncePersistentDict.__getitem__ py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.WriteOncePersistentDict.__init__ py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.WriteOncePersistentDict.__setitem__ py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.WriteOncePersistentDict.clear py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.WriteOncePersistentDict.fetch py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.WriteOncePersistentDict.store py:method 1 persistent_dict.html#$ - ++pytools.persistent_dict.WriteOncePersistentDict.store_if_not_present py:method 1 persistent_dict.html#$ - ++pytools.reshaped_view py:function 1 reference.html#$ - ++pytools.resolve_name py:function 1 reference.html#$ - ++pytools.single_valued py:function 1 reference.html#$ - ++pytools.string_histogram py:function 1 reference.html#$ - ++pytools.tag py:module 0 tag.html#module-$ - ++pytools.tag.DottedName py:class 1 tag.html#$ - ++pytools.tag.DottedName.from_class py:method 1 tag.html#$ - ++pytools.tag.DottedName.name_parts py:attribute 1 tag.html#$ - ++pytools.tag.NonUniqueTagError py:class 1 tag.html#$ - ++pytools.tag.T_co py:class 1 tag.html#$ - ++pytools.tag.Tag py:class 1 tag.html#$ - ++pytools.tag.Tag.__repr__ py:method 1 tag.html#$ - ++pytools.tag.Tag.tag_name py:attribute 1 tag.html#$ - ++pytools.tag.Taggable py:class 1 tag.html#$ - ++pytools.tag.Taggable.__init__ py:method 1 tag.html#$ - ++pytools.tag.Taggable.copy py:method 1 tag.html#$ - ++pytools.tag.Taggable.tagged py:method 1 tag.html#$ - ++pytools.tag.Taggable.tags py:attribute 1 tag.html#$ - ++pytools.tag.Taggable.tags_of_type py:method 1 tag.html#$ - ++pytools.tag.Taggable.without_tags py:method 1 tag.html#$ - ++pytools.tag.UniqueTag py:class 1 tag.html#$ - ++pytools.tag.check_tag_uniqueness py:function 1 tag.html#$ - ++pytools.typedump py:function 1 reference.html#$ - ++pytools.unordered_hash py:function 1 reference.html#$ - ++pytools.wandering_element py:function 1 reference.html#$ - ++pytools.word_wrap py:function 1 reference.html#$ - ++codegen std:doc -1 codegen.html Tools for Source Code Generation + genindex std:label -1 genindex.html Index +-index std:doc -1 index.html Welcome to xPore���s documentation! +-installation std:doc -1 installation.html Installation +-installation std:label -1 installation.html#$ Installation ++graph std:doc -1 graph.html Graph Algorithms ++index std:doc -1 index.html Welcome to pytools���s documentation! ++license std:label -1 misc.html#$ License ++misc std:doc -1 misc.html Installation + modindex std:label -1 py-modindex.html Module Index +-outputtable std:doc -1 outputtable.html Output table description +-outputtable std:label -1 outputtable.html#$ Output table description +-preparation std:doc -1 preparation.html Data preparation from raw reads +-preparation std:label -1 preparation.html#$ Data preparation from raw reads ++obj_array std:doc -1 obj_array.html Handling numpy Object Arrays ++persistent_dict std:doc -1 persistent_dict.html Persistent Hashing and Persistent Dictionaries + py-modindex std:label -1 py-modindex.html Python Module Index +-quickstart std:doc -1 quickstart.html Quickstart - Detection of differential RNA modifications +-quickstart std:label -1 quickstart.html#$ Quickstart - Detection of differential RNA modifications +-scripts std:doc -1 scripts.html Scripts +-scripts std:label -1 scripts.html#$ Scripts ++reference std:doc -1 reference.html A Collection of Utilities + search std:label -1 search.html Search Page ++tag std:doc -1 tag.html Tag Interface diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/data/test1.inv new/diffoscope-189/tests/data/test1.inv --- old/diffoscope-187/tests/data/test1.inv 1970-01-01 01:00:00.000000000 +0100 +++ new/diffoscope-189/tests/data/test1.inv 2021-10-29 10:47:06.000000000 +0200 @@ -0,0 +1,3 @@ +x��R�N�0���`-+[E�@���j�S'6�#�����x\;M���R�����l���<����������,�u��L��T>���s�!������]F���0� +�������5�����hJ^>���u����� ��]�-�~�8��������w�����������3a�p$�5?���/����y���R�����& Y�N��@"rr�JC�}��"����X28�Z��c�����_` ����0q +e�z �v�@�����\?[�>��X�/4�I�2��"O,6���lxM�>-�)$�U����6 k^�n���;(uK?#^�#g�=�������3�K���U��� Binary files old/diffoscope-187/tests/data/test2.inv and new/diffoscope-189/tests/data/test2.inv differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/data/uimage_expected_diff new/diffoscope-189/tests/data/uimage_expected_diff --- old/diffoscope-187/tests/data/uimage_expected_diff 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/tests/data/uimage_expected_diff 2021-10-29 10:47:06.000000000 +0200 @@ -1,3 +1,3 @@ @@ -1 +1 @@ --u-boot legacy uImage, , Linux/PowerPC, RAMDisk Image (Not compressed), 1024 bytes, Fri Nov 27 19:49:00 2020, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0xF87AD200, Data CRC: 0x347161A5 -+u-boot legacy uImage, , Linux/PowerPC, RAMDisk Image (Not compressed), 1024 bytes, Fri Nov 27 19:49:24 2020, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0xE86686F7, Data CRC: 0xC63C4A06 +-u-boot legacy uImage, , Linux/PowerPC, RAMDisk Image (Not compressed), 1024 bytes, Fri Nov 27 19:49:00 2020, Load Address: 00000000, Entry Point: 00000000, Header CRC: 0XF87AD200, Data CRC: 0X347161A5 ++u-boot legacy uImage, , Linux/PowerPC, RAMDisk Image (Not compressed), 1024 bytes, Fri Nov 27 19:49:24 2020, Load Address: 00000000, Entry Point: 00000000, Header CRC: 0XE86686F7, Data CRC: 0XC63C4A06 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/data/uimage_expected_diff_pre_5_41 new/diffoscope-189/tests/data/uimage_expected_diff_pre_5_41 --- old/diffoscope-187/tests/data/uimage_expected_diff_pre_5_41 1970-01-01 01:00:00.000000000 +0100 +++ new/diffoscope-189/tests/data/uimage_expected_diff_pre_5_41 2021-10-29 10:47:06.000000000 +0200 @@ -0,0 +1,3 @@ +@@ -1 +1 @@ +-u-boot legacy uImage, , Linux/PowerPC, RAMDisk Image (Not compressed), 1024 bytes, Fri Nov 27 19:49:00 2020, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0xF87AD200, Data CRC: 0x347161A5 ++u-boot legacy uImage, , Linux/PowerPC, RAMDisk Image (Not compressed), 1024 bytes, Fri Nov 27 19:49:24 2020, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0xE86686F7, Data CRC: 0xC63C4A06 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/test_source.py new/diffoscope-189/tests/test_source.py --- old/diffoscope-187/tests/test_source.py 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/tests/test_source.py 2021-10-29 10:47:06.000000000 +0200 @@ -109,6 +109,7 @@ "test1.hi", "test1.icc", "test1.ico", + "test1.inv", "test1.iso", "test1.jmod", "test1.jpg", @@ -172,6 +173,7 @@ "test2.hi", "test2.icc", "test2.ico", + "test2.inv", "test2.iso", "test2.jmod", "test2.jpg", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/diffoscope-187/tests/utils/data.py new/diffoscope-189/tests/utils/data.py --- old/diffoscope-187/tests/utils/data.py 2021-10-08 10:02:03.000000000 +0200 +++ new/diffoscope-189/tests/utils/data.py 2021-10-29 10:47:06.000000000 +0200 @@ -64,6 +64,12 @@ assert seen == expected +def assert_diff_startswith(difference, filename): + haystack = difference.unified_diff + needle = get_data(filename) + assert needle.startswith(haystack) + + # https://code.activestate.com/recipes/576620-changedirectory-context-manager/... @contextlib.contextmanager def cwd_data():
participants (1)
-
Source-Sync