diffoscope 330__tar.gz → 331__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {diffoscope-330/diffoscope.egg-info → diffoscope-331}/PKG-INFO +1 -1
- {diffoscope-330 → diffoscope-331}/diffoscope/__init__.py +1 -1
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/__init__.py +1 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/decompile.py +6 -2
- diffoscope-331/diffoscope/comparators/nar.py +245 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/external_tools.py +1 -0
- diffoscope-331/diffoscope/scripts/restore-nar.scm +11 -0
- {diffoscope-330 → diffoscope-331/diffoscope.egg-info}/PKG-INFO +1 -1
- {diffoscope-330 → diffoscope-331}/diffoscope.egg-info/SOURCES.txt +8 -0
- diffoscope-331/tests/comparators/test_nar.py +87 -0
- diffoscope-331/tests/data/elf_obj_radare2_expected_diff +10 -0
- diffoscope-331/tests/data/nar_listing_expected_diff +6 -0
- diffoscope-331/tests/data/test1.nar +0 -0
- diffoscope-331/tests/data/test2.nar +0 -0
- diffoscope-331/tests/data/test3.nar +0 -0
- diffoscope-331/tests/data/test4.nar +0 -0
- diffoscope-330/tests/data/elf_obj_radare2_expected_diff +0 -13
- {diffoscope-330 → diffoscope-331}/CONTRIBUTING.md +0 -0
- {diffoscope-330 → diffoscope-331}/COPYING +0 -0
- {diffoscope-330 → diffoscope-331}/MANIFEST.in +0 -0
- {diffoscope-330 → diffoscope-331}/README.rst +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/changes.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/android.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/apk.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/ar.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/arsc.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/asar.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/berkeley_db.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/binary.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/binwalk.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/bzip2.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/cbfs.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/cpio.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/deb.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/debian.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/debian_fallback.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/device.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/dex.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/directory.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/docx.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/dtb.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/elf.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/ffprobe.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/fit.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/fontconfig.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/fonts.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/fsimage.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/gettext.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/gif.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/git.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/gnumeric.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/gzip.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/haskell.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/hdf.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/html.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/icc.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/image.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/ipk.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/iso9660.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/java.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/javascript.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/json.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/kbx.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/llvm.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/lz4.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/lzip.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/lzma.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/macho.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/missing_file.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/mono.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/ocaml.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/odt.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/ogg.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/openssh.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/openssl.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/pcap.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/pdf.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/pe32.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/pgp.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/png.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/ppu.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/ps.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/python.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/rdata.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/rpm.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/rpm_fallback.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/rust.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/sevenz.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/socket_or_fifo.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/sphinx.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/sqlite.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/squashfs.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/symlink.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/tar.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/text.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/uimage.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/uki.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/__init__.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/archive.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/command.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/compare.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/container.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/file.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/fuzzy.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/libarchive.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/operation.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/utils/specialize.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/vmlinuz.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/wasm.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/xar.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/xml.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/xmlb.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/xsb.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/xz.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/zip.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/comparators/zst.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/config.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/diff.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/difference.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/environ.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/exc.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/excludes.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/feeders.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/logging.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/main.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/path.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/__init__.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/formats.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/html/__init__.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/html/html.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/html/templates.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/icon.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/json.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/markdown.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/restructuredtext.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/text.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/presenters/utils.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/profiling.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/progress.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/readers/__init__.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/readers/json.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/readers/utils.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/scripts/extract-vmlinux +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/tempfiles.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/tools.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope/utils.py +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope.egg-info/dependency_links.txt +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope.egg-info/entry_points.txt +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope.egg-info/requires.txt +0 -0
- {diffoscope-330 → diffoscope-331}/diffoscope.egg-info/top_level.txt +0 -0
- {diffoscope-330 → diffoscope-331}/extras_require.json +0 -0
- {diffoscope-330 → diffoscope-331}/pyproject.toml +0 -0
- {diffoscope-330 → diffoscope-331}/setup.cfg +0 -0
- {diffoscope-330 → diffoscope-331}/setup.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/__init__.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/__init__.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_android.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_apk.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_archive.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_arsc.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_asar.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_berkeley_db.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_binary.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_binwalk.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_bzip2.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_cbfs.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_containers.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_cpio.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_deb.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_debian.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_device.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_dex.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_directory.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_docx.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_dtb.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_elf.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_elf_decompiler.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_epub.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_ffprobe.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_fit.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_fontconfig.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_fonts.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_fsimage.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_gettext.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_gif.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_git.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_gnumeric.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_gzip.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_haskell.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_hdf.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_html.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_icc.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_ico_image.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_ipk.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_iso9660.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_java.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_javascript.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_jpeg_image.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_json.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_kbx.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_lz4.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_lzip.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_lzma.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_macho.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_macho_decompiler.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_mono.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_ocaml.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_odt.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_ogg.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_openssh_pub_key.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_openssl.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_pcap.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_pdf.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_pgp.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_png.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_ppu.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_ps.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_python.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_rdata.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_rlib.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_rpm.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_sevenz.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_sockets.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_sphinx.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_sqlite.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_squashfs.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_symlink.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_tar.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_text.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_uimage.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_uki.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_utils.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_wasm.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_xml.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_xsb.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_xz.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_zip.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/comparators/test_zst.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/conftest.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/Samyak-Malayalam1.ttf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/Samyak-Malayalam2.ttf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/Test1.class +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/Test2.class +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/android1.img +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/android2.img +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/android_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/apk_manifest_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/apk_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/archive1.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/archive12.diff.txt +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/archive2.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/arsc_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/base-files_157-r45695_ar71xx.ipk +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/base-files_157-r45918_ar71xx.ipk +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/berkeley6_db_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/berkeley_db_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/binary1 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/binary2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/binary_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/binary_hexdump_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/binwalk_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug881937_1.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug881937_2.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug881937_control_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug903391_1.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug903391_2.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug903401_1.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug903401_2.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug903565_1.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/bug903565_2.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/comment_zipdetails_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/comment_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/containers/a.tar.bz2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/containers/a.tar.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/containers/a.tar.xz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/containers/b.tar.bz2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/containers/b.tar.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/containers/b.tar.xz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/containers/different_files_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/cpio_listing_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dbgsym/add/test-dbgsym-dbgsym_1_amd64.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dbgsym/add/test-dbgsym_1_amd64.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dbgsym/mult/test-dbgsym-dbgsym_1_amd64.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dbgsym/mult/test-dbgsym_1_amd64.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dbgsym/test-dbgsym_1.dsc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dbgsym/test-dbgsym_1.tar.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/deb_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/debian-bug-875281.collapsed-diff.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/debian-bug-876316-control.tar.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/device_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/device_expected_diff_freebsd +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/device_expected_diff_reverse +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/device_expected_diff_reverse_freebsd +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/devicetree1.dtb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/devicetree2.dtb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/devicetree_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dex_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dex_javap_14_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/docx_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dot_buildinfo_fallback_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dot_changes_description_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dot_changes_different_contents_and_identical_files_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dot_changes_fallback_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dot_changes_identical_contents_and_different_files_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dot_dsc_fallback_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/dummyx64.efi.stub +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elf_lib_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elf_lib_objdump_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elf_obj_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elf_obj_ghidra_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elfmix1.not_a +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elfmix2.a +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elfmix_disassembly_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elfmix_mach_o_expected_diff__text +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elfmix_mach_o_expected_diff__text_16 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elfmix_src_c_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elfmix_x_obj_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/elfmix_x_obj_objdump_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/encrypted1.zip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/encrypted2.zip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/epub_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ext4_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/fat12_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/fit_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/fontconfig_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/fuzzy-tar-in-tar1.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/fuzzy-tar-in-tar2.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/fuzzy1.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/fuzzy2.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/fuzzy3.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/gif_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/git_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/git_expected_diff_freebsd +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/gnu_debuglink_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/gnumeric_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/gzip_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/haskell_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/hdf5_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/hello1.wasm +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/hello2.wasm +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/html_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/html_text_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/icc_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ico_image_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ico_image_meta_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ico_image_meta_expected_diff_v2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ignore_readelf_errors_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/inv_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ipk_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/iso9660_content_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/iso9660_content_expected_diff_cdrtools +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/iso9660_rockridge_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/iso9660_rockridge_expected_diff_cdrtools +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/javap_14_class_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/javap_class_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/javascript_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/jmod_zipdetails_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/jmod_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/jpeg_image_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/jpeg_image_meta_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/json_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/json_expected_ordering_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/kbx_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__cstring +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__eh_frame +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__la_symbol_ptr +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__stub_helper +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__stub_helper_16 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__stubs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__stubs_16 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__text +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__text_16 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff__unwind_info +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff_dyn_relocations +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff_dyn_symbols +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff_file_headers +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff_needed_libs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff_relocations +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff_strings +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff_symbols +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_llvm_expected_diff_symbols_llvm_11 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_obj_ghidra_expected_diff_main +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_obj_radare2_expected_diff_main +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_obj_radare2_expected_diff_printf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_otool_expected_diff__cstring +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_otool_expected_diff__data +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_otool_expected_diff__text +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_otool_expected_diff_headers +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_otool_expected_diff_indirect_symbols +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_otool_expected_diff_libraries +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/macho_otool_expected_diff_strings +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/mo_charsets_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/mo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/mozzip_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/mp3_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/no-perms.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/nupkg_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ocaml_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/odt_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ogg_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/openssh_pub_key_expected_diff_12 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/openssh_pub_key_expected_diff_23 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/order1a.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/order1b.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/output.colored.txt +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/output.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/output.md +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/output.rst +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/output.txt +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/output_expected_363.html +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/output_expected_372.html +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/output_regression_875281.html +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pcap_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pdf_annotations_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pdf_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pdf_text_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pe_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pgp_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pgp_signature_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pgp_signed_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/png_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ppu_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/procyon_class_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ps_internal_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ps_text_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/pyc_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/quine.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/quine.zip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/quine_a.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/quine_b.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/quine_deb_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/quine_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rdb_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rds_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/resources1.arsc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/resources2.arsc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_armap_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_elf_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_10 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_15 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_16 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_21 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_22 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_5 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_7 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rpm_fallback_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rpm_header_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/rpm_listing_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/salsa-issue-363.diff.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/salsa-issue-372.diff.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/sqlite3_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/squashfs_root_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/squashfs_superblock_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/symlink_expected_destination_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/symlink_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/tar_listing_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1-le64.cache-4 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.a +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.apk +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.asar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.asc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.binwalk +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.buildinfo +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.bz2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.changes +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.cpio +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.db +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.debsrc.tar.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.debug +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.dex +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.disk.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.docx +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.dsc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.epub +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.exe +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.ext4 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.fat12 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.fat16 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.fat32 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.gif +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.git-index +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.gnumeric +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.hi +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.html +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.icc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.ico +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.inv +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.iso +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.jmod +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.jpg +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.js +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.kbx +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.lz4 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.lzip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.lzma +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.macho +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.mo +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.mozzip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.mp3 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.nupkg +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.o +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.odt +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.ogg +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.pcap +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.pdf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.pgp +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.png +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.ppu +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.ps +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.pyc-renamed +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.rdb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.rdx +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.rlib +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.rpm +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.sqlite3 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.squashfs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.xml +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.xsb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.xz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1.zip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1_meta.ico +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1_meta.jpg +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1_root.squashfs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test1_signed.pgp +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2-le64.cache-4 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.a +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.apk +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.asar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.asc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.binwalk +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.buildinfo +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.bz2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.changes +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.cpio +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.db +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.deb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.debsrc.tar.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.debug +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.dex +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.disk.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.docx +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.dsc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.epub +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.exe +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.ext4 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.fat12 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.gif +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.git-index +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.gnumeric +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.gz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.hi +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.html +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.icc +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.ico +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.inv +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.iso +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.jmod +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.jpg +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.js +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.kbx +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.lz4 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.lzip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.lzma +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.macho +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.mo +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.mozzip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.mp3 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.nupkg +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.o +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.odt +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.ogg +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.pcap +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.pdf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.pgp +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.png +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.ppu +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.ps +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.pyc-renamed +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.rdb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.rdx +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.rlib +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.rpm +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.sqlite3 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.squashfs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.tar +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.xml +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.xsb +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.xz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2.zip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2_meta.ico +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2_meta.jpg +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2_root.squashfs +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test2_signed.pgp +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test3.apk +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test3.changes +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test3.gif +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test3.pdf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test3.xml +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test3.xz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test3.zip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test4.changes +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test4.gif +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test4.pdf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test4.xml +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test4.xz +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test5.changes +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_comment1.zip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_comment2.zip +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_directory_a_b_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_directory_b_a_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_directory_device_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_directory_file_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_directory_symlink_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_invalid.json +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_invalid.xml +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_iso8859-1.mo +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_no_charset.mo +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_openssh_pub_key1.pub +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_openssh_pub_key2.pub +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_openssh_pub_key3.pub +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_weird_non_unicode_chars1.pdf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_weird_non_unicode_chars2.pdf +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_xml_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/test_xml_ordering_differences_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_ascii1 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_ascii2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_ascii_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_endings1 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_endings2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_endings_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_iso8859 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_iso8859_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_order1 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_order2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_order_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_sevenzmetadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_unicode1 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_unicode2 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_unicode_binary_fallback +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_unicode_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/text_xz_list +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ttf_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/ttf_ttx_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/uimage_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/uimage_expected_diff_pre_5_41 +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/uki_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/wasm_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/xsb_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/zip2_zipdetails_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/zip_bsdtar_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/zip_zipdetails_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/data/zip_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_diff_mask.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_difference.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_excludes.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_main.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_presenters.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_progress.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_quines.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_readers.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_source.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_tools.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/test_versions.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/utils/__init__.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/utils/data.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/utils/nonexisting.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/utils/tools.py +0 -0
- {diffoscope-330 → diffoscope-331}/tests/utils/versions.py +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# diffoscope: in-depth comparison of files, archives, and directories
|
|
3
3
|
#
|
|
4
4
|
# Copyright © 2020 Jean-Romain Garnier <salsa@jean-romain.com>
|
|
5
|
-
# Copyright © 2020-2022 Chris Lamb <lamby@debian.org>
|
|
5
|
+
# Copyright © 2020-2022, 2026 Chris Lamb <lamby@debian.org>
|
|
6
6
|
#
|
|
7
7
|
# diffoscope is free software: you can redistribute it and/or modify
|
|
8
8
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -242,7 +242,11 @@ class AsmFunction(File):
|
|
|
242
242
|
|
|
243
243
|
@property
|
|
244
244
|
def offset(self):
|
|
245
|
-
|
|
245
|
+
try:
|
|
246
|
+
return self.data_dict["addr"]
|
|
247
|
+
except KeyError:
|
|
248
|
+
# Be backwards compatible with version < 5.9.0
|
|
249
|
+
return self.data_dict["offset"]
|
|
246
250
|
|
|
247
251
|
@property
|
|
248
252
|
def size(self):
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
#
|
|
2
|
+
# diffoscope: in-depth comparison of files, archives, and directories
|
|
3
|
+
#
|
|
4
|
+
# Copyright © 2024 Chris Lamb <lamby@debian.org>
|
|
5
|
+
# Copyright © 2022 Christopher Baines <mail@cbaines.net>
|
|
6
|
+
#
|
|
7
|
+
# diffoscope is free software: you can redistribute it and/or modify
|
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
10
|
+
# (at your option) any later version.
|
|
11
|
+
#
|
|
12
|
+
# diffoscope is distributed in the hope that it will be useful,
|
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
# GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You should have received a copy of the GNU General Public License
|
|
18
|
+
# along with diffoscope. If not, see <https://www.gnu.org/licenses/>.
|
|
19
|
+
|
|
20
|
+
import os
|
|
21
|
+
import stat
|
|
22
|
+
import pathlib
|
|
23
|
+
import logging
|
|
24
|
+
import subprocess
|
|
25
|
+
|
|
26
|
+
from diffoscope.difference import Difference
|
|
27
|
+
from diffoscope.tools import tool_required
|
|
28
|
+
from diffoscope.tempfiles import get_temporary_directory
|
|
29
|
+
|
|
30
|
+
from .directory import Directory
|
|
31
|
+
from .symlink import Symlink
|
|
32
|
+
|
|
33
|
+
from .utils.file import File
|
|
34
|
+
from .utils.archive import Archive, ArchiveMember
|
|
35
|
+
|
|
36
|
+
logger = logging.getLogger(__name__)
|
|
37
|
+
|
|
38
|
+
# The top-level node of a NAR is unnamed, so use this when referring to it in
|
|
39
|
+
# file listings.
|
|
40
|
+
NAR_ROOT = "."
|
|
41
|
+
|
|
42
|
+
# "guix archive --extract" would be the obvious way to unpack a NAR, but it
|
|
43
|
+
# insists on connecting to guix-daemon, so use "guix repl" to call the
|
|
44
|
+
# underlying (guix serialization) code directly instead.
|
|
45
|
+
RESTORE_NAR_SCRIPT = str(
|
|
46
|
+
pathlib.Path(__file__).parent.parent.joinpath("scripts", "restore-nar.scm")
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class NarMember(ArchiveMember):
|
|
51
|
+
@property
|
|
52
|
+
def path(self):
|
|
53
|
+
# We unpack the archive in one go, so point at the already-extracted
|
|
54
|
+
# file rather than letting ArchiveMember create a temporary directory
|
|
55
|
+
# per-member.
|
|
56
|
+
return self.container.get_member_path(self._name)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class NarDirectory(Directory, NarMember):
|
|
60
|
+
def __init__(self, container, member_name):
|
|
61
|
+
NarMember.__init__(self, container, member_name)
|
|
62
|
+
|
|
63
|
+
def compare(self, other, source=None):
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
def has_same_content_as(self, other):
|
|
67
|
+
return False
|
|
68
|
+
|
|
69
|
+
def is_directory(self):
|
|
70
|
+
return True
|
|
71
|
+
|
|
72
|
+
def get_member_names(self):
|
|
73
|
+
raise ValueError("archives are compared as a whole.") # noqa
|
|
74
|
+
|
|
75
|
+
def get_member(self, member_name):
|
|
76
|
+
raise ValueError("archives are compared as a whole.") # noqa
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class NarSymlink(Symlink, NarMember):
|
|
80
|
+
def __init__(self, container, member_name, destination):
|
|
81
|
+
NarMember.__init__(self, container, member_name)
|
|
82
|
+
self._destination = destination
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def symlink_destination(self):
|
|
86
|
+
return self._destination
|
|
87
|
+
|
|
88
|
+
def is_symlink(self):
|
|
89
|
+
return True
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class NarContainer(Archive):
|
|
93
|
+
def open_archive(self):
|
|
94
|
+
return True
|
|
95
|
+
|
|
96
|
+
def close_archive(self):
|
|
97
|
+
pass
|
|
98
|
+
|
|
99
|
+
def get_member_names(self):
|
|
100
|
+
self.ensure_unpacked()
|
|
101
|
+
|
|
102
|
+
if not self._root_is_directory:
|
|
103
|
+
return [self._root_member_name]
|
|
104
|
+
|
|
105
|
+
return list(self.walk())
|
|
106
|
+
|
|
107
|
+
def get_member(self, member_name):
|
|
108
|
+
path = self.get_member_path(member_name)
|
|
109
|
+
|
|
110
|
+
if os.path.islink(path):
|
|
111
|
+
return NarSymlink(self, member_name, os.readlink(path))
|
|
112
|
+
|
|
113
|
+
if os.path.isdir(path):
|
|
114
|
+
return NarDirectory(self, member_name)
|
|
115
|
+
|
|
116
|
+
return NarMember(self, member_name)
|
|
117
|
+
|
|
118
|
+
def get_member_path(self, member_name):
|
|
119
|
+
self.ensure_unpacked()
|
|
120
|
+
|
|
121
|
+
if not self._root_is_directory:
|
|
122
|
+
if member_name != self._root_member_name:
|
|
123
|
+
raise KeyError(member_name)
|
|
124
|
+
return self._root
|
|
125
|
+
|
|
126
|
+
path = os.path.join(self._root, member_name)
|
|
127
|
+
if not os.path.lexists(path):
|
|
128
|
+
raise KeyError(member_name)
|
|
129
|
+
|
|
130
|
+
return path
|
|
131
|
+
|
|
132
|
+
def extract(self, member_name, dest_dir):
|
|
133
|
+
# Ignore dest_dir; the archive is already unpacked in one go.
|
|
134
|
+
return self.get_member_path(member_name)
|
|
135
|
+
|
|
136
|
+
def walk(self, relative_to=""):
|
|
137
|
+
"""
|
|
138
|
+
Yield the name of every node underneath the top-level directory,
|
|
139
|
+
relative to it and in the order NAR stores them (ie. sorted), with
|
|
140
|
+
directories appearing before their contents.
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
directory = os.path.join(self._root, relative_to)
|
|
144
|
+
|
|
145
|
+
for name in sorted(os.listdir(directory)):
|
|
146
|
+
member_name = os.path.join(relative_to, name)
|
|
147
|
+
yield member_name
|
|
148
|
+
|
|
149
|
+
path = os.path.join(self._root, member_name)
|
|
150
|
+
if not os.path.islink(path) and os.path.isdir(path):
|
|
151
|
+
yield from self.walk(member_name)
|
|
152
|
+
|
|
153
|
+
def listing(self):
|
|
154
|
+
"""
|
|
155
|
+
Describe the archive in terms of what NAR actually records: the type of
|
|
156
|
+
each node, whether regular files are executable and where symlinks
|
|
157
|
+
point.
|
|
158
|
+
"""
|
|
159
|
+
|
|
160
|
+
self.ensure_unpacked()
|
|
161
|
+
|
|
162
|
+
def describe(name, path):
|
|
163
|
+
mode = os.lstat(path).st_mode
|
|
164
|
+
|
|
165
|
+
if stat.S_ISLNK(mode):
|
|
166
|
+
return f"symlink {name} -> {os.readlink(path)}\n"
|
|
167
|
+
if stat.S_ISDIR(mode):
|
|
168
|
+
return f"directory {name}\n"
|
|
169
|
+
if mode & stat.S_IXUSR:
|
|
170
|
+
return f"executable {name}\n"
|
|
171
|
+
|
|
172
|
+
return f"regular {name}\n"
|
|
173
|
+
|
|
174
|
+
yield describe(NAR_ROOT, self._root)
|
|
175
|
+
|
|
176
|
+
if self._root_is_directory:
|
|
177
|
+
for member_name in self.walk():
|
|
178
|
+
yield describe(
|
|
179
|
+
member_name, os.path.join(self._root, member_name)
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
def compare(self, other, **kwargs):
|
|
183
|
+
differences = []
|
|
184
|
+
|
|
185
|
+
# Always include the file list; without it, added, removed or
|
|
186
|
+
# newly-executable files would only show up as a binary diff.
|
|
187
|
+
if other.source:
|
|
188
|
+
differences.append(
|
|
189
|
+
Difference.from_text_readers(
|
|
190
|
+
self.listing(),
|
|
191
|
+
other.listing(),
|
|
192
|
+
self.source.path,
|
|
193
|
+
other.source.path,
|
|
194
|
+
source="file list",
|
|
195
|
+
)
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
differences.extend(super().compare(other, **kwargs))
|
|
199
|
+
|
|
200
|
+
return differences
|
|
201
|
+
|
|
202
|
+
@tool_required("guix")
|
|
203
|
+
def ensure_unpacked(self):
|
|
204
|
+
if hasattr(self, "_root"):
|
|
205
|
+
return
|
|
206
|
+
|
|
207
|
+
self._temp_dir_object = get_temporary_directory(suffix="nar")
|
|
208
|
+
root = os.path.join(self._temp_dir_object.name, "contents")
|
|
209
|
+
|
|
210
|
+
logger.debug("Extracting %s to %s", self.source.path, root)
|
|
211
|
+
|
|
212
|
+
with open(self.source.path, "rb") as f:
|
|
213
|
+
subprocess.run(
|
|
214
|
+
("guix", "repl", "--", RESTORE_NAR_SCRIPT, root),
|
|
215
|
+
stdin=f,
|
|
216
|
+
# The script is tiny, so byte-compiling it would cost more than
|
|
217
|
+
# it saves (and would need a writable cache directory).
|
|
218
|
+
env=dict(os.environ, GUILE_AUTO_COMPILE="0"),
|
|
219
|
+
capture_output=True,
|
|
220
|
+
check=True,
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
self._root = root
|
|
224
|
+
self._root_is_directory = not os.path.islink(root) and os.path.isdir(
|
|
225
|
+
root
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
if self._root_is_directory:
|
|
229
|
+
# NAR restores directories read-only, which would prevent us from
|
|
230
|
+
# removing the unpacked files again later.
|
|
231
|
+
for dirpath, _, _ in os.walk(root):
|
|
232
|
+
os.chmod(dirpath, os.lstat(dirpath).st_mode | stat.S_IWUSR)
|
|
233
|
+
else:
|
|
234
|
+
# A NAR containing a single file or symlink does not record a name
|
|
235
|
+
# for it, so fall back to naming it after the archive itself.
|
|
236
|
+
self._root_member_name = self.get_compressed_content_name(".nar")
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
class NarFile(File):
|
|
240
|
+
DESCRIPTION = "nar files"
|
|
241
|
+
CONTAINER_CLASSES = [NarContainer]
|
|
242
|
+
|
|
243
|
+
FALLBACK_FILE_TYPE_HEADER_PREFIX = (
|
|
244
|
+
len("nix-archive-1").to_bytes(8, byteorder="little") + b"nix-arch"
|
|
245
|
+
)
|
|
@@ -86,6 +86,7 @@ EXTERNAL_TOOLS = {
|
|
|
86
86
|
"guix": "gnupg",
|
|
87
87
|
},
|
|
88
88
|
"guestfs": {"debian": "python3-guestfs"},
|
|
89
|
+
"guix": {"debian": "guix"},
|
|
89
90
|
"gzip": {"debian": "gzip", "arch": "gzip", "guix": "gzip"},
|
|
90
91
|
"h5dump": {"debian": "hdf5-tools", "arch": "hdf5", "guix": "hdf5"},
|
|
91
92
|
"html2text": {"debian": "html2text", "guix": "html2text"},
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
;;; Restore the NAR read from standard input into the directory named
|
|
2
|
+
;;; by the first command-line argument.
|
|
3
|
+
;;;
|
|
4
|
+
;;; We cannot use "guix archive --extract" for this as it handles
|
|
5
|
+
;;; --extract from within a (with-store ...) form, and therefore
|
|
6
|
+
;;; insists on connecting to guix-daemon even though restoring a NAR
|
|
7
|
+
;;; needs nothing from the store. This should be fixed in the future.
|
|
8
|
+
|
|
9
|
+
(use-modules (guix serialization))
|
|
10
|
+
|
|
11
|
+
(restore-file (current-input-port) (cadr (command-line)))
|
|
@@ -79,6 +79,7 @@ diffoscope/comparators/lzma.py
|
|
|
79
79
|
diffoscope/comparators/macho.py
|
|
80
80
|
diffoscope/comparators/missing_file.py
|
|
81
81
|
diffoscope/comparators/mono.py
|
|
82
|
+
diffoscope/comparators/nar.py
|
|
82
83
|
diffoscope/comparators/ocaml.py
|
|
83
84
|
diffoscope/comparators/odt.py
|
|
84
85
|
diffoscope/comparators/ogg.py
|
|
@@ -140,6 +141,7 @@ diffoscope/readers/__init__.py
|
|
|
140
141
|
diffoscope/readers/json.py
|
|
141
142
|
diffoscope/readers/utils.py
|
|
142
143
|
diffoscope/scripts/extract-vmlinux
|
|
144
|
+
diffoscope/scripts/restore-nar.scm
|
|
143
145
|
tests/__init__.py
|
|
144
146
|
tests/conftest.py
|
|
145
147
|
tests/test_diff_mask.py
|
|
@@ -204,6 +206,7 @@ tests/comparators/test_lzma.py
|
|
|
204
206
|
tests/comparators/test_macho.py
|
|
205
207
|
tests/comparators/test_macho_decompiler.py
|
|
206
208
|
tests/comparators/test_mono.py
|
|
209
|
+
tests/comparators/test_nar.py
|
|
207
210
|
tests/comparators/test_ocaml.py
|
|
208
211
|
tests/comparators/test_odt.py
|
|
209
212
|
tests/comparators/test_ogg.py
|
|
@@ -380,6 +383,7 @@ tests/data/mo_charsets_expected_diff
|
|
|
380
383
|
tests/data/mo_expected_diff
|
|
381
384
|
tests/data/mozzip_zipinfo_expected_diff
|
|
382
385
|
tests/data/mp3_expected_diff
|
|
386
|
+
tests/data/nar_listing_expected_diff
|
|
383
387
|
tests/data/no-perms.tar
|
|
384
388
|
tests/data/nupkg_expected_diff
|
|
385
389
|
tests/data/ocaml_expected_diff
|
|
@@ -488,6 +492,7 @@ tests/data/test1.macho
|
|
|
488
492
|
tests/data/test1.mo
|
|
489
493
|
tests/data/test1.mozzip
|
|
490
494
|
tests/data/test1.mp3
|
|
495
|
+
tests/data/test1.nar
|
|
491
496
|
tests/data/test1.nupkg
|
|
492
497
|
tests/data/test1.o
|
|
493
498
|
tests/data/test1.odt
|
|
@@ -558,6 +563,7 @@ tests/data/test2.macho
|
|
|
558
563
|
tests/data/test2.mo
|
|
559
564
|
tests/data/test2.mozzip
|
|
560
565
|
tests/data/test2.mp3
|
|
566
|
+
tests/data/test2.nar
|
|
561
567
|
tests/data/test2.nupkg
|
|
562
568
|
tests/data/test2.o
|
|
563
569
|
tests/data/test2.odt
|
|
@@ -587,12 +593,14 @@ tests/data/test2_signed.pgp
|
|
|
587
593
|
tests/data/test3.apk
|
|
588
594
|
tests/data/test3.changes
|
|
589
595
|
tests/data/test3.gif
|
|
596
|
+
tests/data/test3.nar
|
|
590
597
|
tests/data/test3.pdf
|
|
591
598
|
tests/data/test3.xml
|
|
592
599
|
tests/data/test3.xz
|
|
593
600
|
tests/data/test3.zip
|
|
594
601
|
tests/data/test4.changes
|
|
595
602
|
tests/data/test4.gif
|
|
603
|
+
tests/data/test4.nar
|
|
596
604
|
tests/data/test4.pdf
|
|
597
605
|
tests/data/test4.xml
|
|
598
606
|
tests/data/test4.xz
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#
|
|
2
|
+
# diffoscope: in-depth comparison of files, archives, and directories
|
|
3
|
+
#
|
|
4
|
+
# Copyright © 2024 Chris Lamb <lamby@debian.org>
|
|
5
|
+
# Copyright © 2022 Christopher Baines <mail@cbaines.net>
|
|
6
|
+
#
|
|
7
|
+
# diffoscope is free software: you can redistribute it and/or modify
|
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
10
|
+
# (at your option) any later version.
|
|
11
|
+
#
|
|
12
|
+
# diffoscope is distributed in the hope that it will be useful,
|
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
# GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You should have received a copy of the GNU General Public License
|
|
18
|
+
# along with diffoscope. If not, see <https://www.gnu.org/licenses/>.
|
|
19
|
+
|
|
20
|
+
import pytest
|
|
21
|
+
|
|
22
|
+
from diffoscope.comparators.nar import NarFile
|
|
23
|
+
|
|
24
|
+
from ..utils.data import load_fixture, assert_diff
|
|
25
|
+
from ..utils.nonexisting import assert_non_existing
|
|
26
|
+
from ..utils.tools import skip_unless_tools_exist
|
|
27
|
+
|
|
28
|
+
# test1.nar and test2.nar contain a single regular file; test3.nar and
|
|
29
|
+
# test4.nar contain a "dir" directory holding a "text" file and a "link"
|
|
30
|
+
# symlink.
|
|
31
|
+
nar1 = load_fixture("test1.nar")
|
|
32
|
+
nar2 = load_fixture("test2.nar")
|
|
33
|
+
nar3 = load_fixture("test3.nar")
|
|
34
|
+
nar4 = load_fixture("test4.nar")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_identification(nar1):
|
|
38
|
+
assert isinstance(nar1, NarFile)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def test_no_differences(nar1):
|
|
42
|
+
difference = nar1.compare(nar1)
|
|
43
|
+
assert difference is None
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@pytest.fixture
|
|
47
|
+
def single_file_differences(nar1, nar2):
|
|
48
|
+
return nar1.compare(nar2).details
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@pytest.fixture
|
|
52
|
+
def differences(nar3, nar4):
|
|
53
|
+
return nar3.compare(nar4).details
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@skip_unless_tools_exist("guix")
|
|
57
|
+
def test_single_file(single_file_differences):
|
|
58
|
+
# A NAR holding a single file does not record a name for it, so it is
|
|
59
|
+
# named after the archive itself.
|
|
60
|
+
assert single_file_differences[0].source1 == "test1"
|
|
61
|
+
assert single_file_differences[0].source2 == "test2"
|
|
62
|
+
assert_diff(single_file_differences[0], "text_ascii_expected_diff")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@skip_unless_tools_exist("guix")
|
|
66
|
+
def test_listing(differences):
|
|
67
|
+
assert_diff(differences[0], "nar_listing_expected_diff")
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@skip_unless_tools_exist("guix")
|
|
71
|
+
def test_symlinks(differences):
|
|
72
|
+
assert differences[1].source1 == "dir/link"
|
|
73
|
+
assert differences[1].source2 == "dir/link"
|
|
74
|
+
assert differences[1].comment == "symlink"
|
|
75
|
+
assert_diff(differences[1], "symlink_expected_diff")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@skip_unless_tools_exist("guix")
|
|
79
|
+
def test_text_file(differences):
|
|
80
|
+
assert differences[2].source1 == "dir/text"
|
|
81
|
+
assert differences[2].source2 == "dir/text"
|
|
82
|
+
assert_diff(differences[2], "text_ascii_expected_diff")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@skip_unless_tools_exist("guix")
|
|
86
|
+
def test_compare_non_existing(monkeypatch, nar3):
|
|
87
|
+
assert_non_existing(monkeypatch, nar3)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
@@ -1,9 +1,9 @@
|
|
2
|
+
// callconv: rax amd64 (rdi, rsi, rdx, rcx, r8, r9, xmm0, xmm1, xmm2, xmm3, xmm4);
|
|
3
|
+
void sym.f (void) {
|
|
4
|
+
push (rbp) // [01] -r-x section size 11 named .text
|
|
5
|
+
rbp = rsp
|
|
6
|
+
- eax = 0x2a // '*' // 42
|
|
7
|
+
+ eax = 0xffffffff // -1
|
|
8
|
+
rbp = pop () // rsp // rsp
|
|
9
|
+
return
|
|
10
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
@@ -1,11 +1,11 @@
|
|
2
|
-
|
|
3
|
-
// This function contains 1 basic blocks and its 11 long.
|
|
4
|
-
function sym.f () {
|
|
5
|
-
loc_0x8000040:
|
|
6
|
-
push rbp //[01] -r-x section size 11 named .text
|
|
7
|
-
rbp = rsp
|
|
8
|
-
- eax = 0x2a //'*' ; 42
|
|
9
|
-
+ eax = 0xffffffff //-1
|
|
10
|
-
//rsp ; rsp
|
|
11
|
-
return
|
|
12
|
-
(break)
|
|
13
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|