diffoscope 330__tar.gz → 332__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-332}/PKG-INFO +1 -1
- {diffoscope-330 → diffoscope-332}/diffoscope/__init__.py +1 -1
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/__init__.py +1 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/decompile.py +6 -2
- diffoscope-332/diffoscope/comparators/nar.py +245 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/external_tools.py +1 -0
- diffoscope-332/diffoscope/scripts/restore-nar.scm +11 -0
- {diffoscope-330 → diffoscope-332/diffoscope.egg-info}/PKG-INFO +1 -1
- {diffoscope-330 → diffoscope-332}/diffoscope.egg-info/SOURCES.txt +8 -0
- diffoscope-332/tests/comparators/test_nar.py +87 -0
- diffoscope-332/tests/data/elf_obj_radare2_expected_diff +11 -0
- diffoscope-332/tests/data/macho_obj_radare2_expected_diff_main +9 -0
- diffoscope-332/tests/data/macho_obj_radare2_expected_diff_printf +22 -0
- diffoscope-332/tests/data/nar_listing_expected_diff +6 -0
- diffoscope-332/tests/data/test1.nar +0 -0
- diffoscope-332/tests/data/test2.nar +0 -0
- diffoscope-332/tests/data/test3.nar +0 -0
- diffoscope-332/tests/data/test4.nar +0 -0
- diffoscope-330/tests/data/elf_obj_radare2_expected_diff +0 -13
- diffoscope-330/tests/data/macho_obj_radare2_expected_diff_main +0 -33
- diffoscope-330/tests/data/macho_obj_radare2_expected_diff_printf +0 -12
- {diffoscope-330 → diffoscope-332}/CONTRIBUTING.md +0 -0
- {diffoscope-330 → diffoscope-332}/COPYING +0 -0
- {diffoscope-330 → diffoscope-332}/MANIFEST.in +0 -0
- {diffoscope-330 → diffoscope-332}/README.rst +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/changes.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/android.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/apk.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/ar.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/arsc.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/asar.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/berkeley_db.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/binary.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/binwalk.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/bzip2.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/cbfs.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/cpio.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/deb.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/debian.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/debian_fallback.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/device.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/dex.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/directory.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/docx.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/dtb.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/elf.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/ffprobe.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/fit.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/fontconfig.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/fonts.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/fsimage.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/gettext.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/gif.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/git.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/gnumeric.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/gzip.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/haskell.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/hdf.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/html.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/icc.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/image.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/ipk.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/iso9660.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/java.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/javascript.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/json.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/kbx.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/llvm.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/lz4.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/lzip.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/lzma.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/macho.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/missing_file.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/mono.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/ocaml.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/odt.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/ogg.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/openssh.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/openssl.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/pcap.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/pdf.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/pe32.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/pgp.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/png.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/ppu.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/ps.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/python.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/rdata.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/rpm.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/rpm_fallback.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/rust.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/sevenz.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/socket_or_fifo.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/sphinx.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/sqlite.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/squashfs.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/symlink.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/tar.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/text.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/uimage.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/uki.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/__init__.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/archive.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/command.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/compare.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/container.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/file.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/fuzzy.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/libarchive.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/operation.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/utils/specialize.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/vmlinuz.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/wasm.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/xar.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/xml.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/xmlb.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/xsb.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/xz.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/zip.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/comparators/zst.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/config.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/diff.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/difference.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/environ.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/exc.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/excludes.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/feeders.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/logging.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/main.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/path.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/__init__.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/formats.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/html/__init__.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/html/html.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/html/templates.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/icon.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/json.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/markdown.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/restructuredtext.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/text.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/presenters/utils.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/profiling.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/progress.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/readers/__init__.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/readers/json.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/readers/utils.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/scripts/extract-vmlinux +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/tempfiles.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/tools.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope/utils.py +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope.egg-info/dependency_links.txt +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope.egg-info/entry_points.txt +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope.egg-info/requires.txt +0 -0
- {diffoscope-330 → diffoscope-332}/diffoscope.egg-info/top_level.txt +0 -0
- {diffoscope-330 → diffoscope-332}/extras_require.json +0 -0
- {diffoscope-330 → diffoscope-332}/pyproject.toml +0 -0
- {diffoscope-330 → diffoscope-332}/setup.cfg +0 -0
- {diffoscope-330 → diffoscope-332}/setup.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/__init__.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/__init__.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_android.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_apk.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_archive.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_arsc.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_asar.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_berkeley_db.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_binary.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_binwalk.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_bzip2.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_cbfs.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_containers.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_cpio.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_deb.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_debian.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_device.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_dex.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_directory.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_docx.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_dtb.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_elf.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_elf_decompiler.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_epub.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_ffprobe.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_fit.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_fontconfig.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_fonts.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_fsimage.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_gettext.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_gif.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_git.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_gnumeric.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_gzip.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_haskell.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_hdf.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_html.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_icc.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_ico_image.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_ipk.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_iso9660.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_java.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_javascript.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_jpeg_image.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_json.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_kbx.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_lz4.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_lzip.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_lzma.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_macho.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_macho_decompiler.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_mono.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_ocaml.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_odt.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_ogg.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_openssh_pub_key.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_openssl.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_pcap.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_pdf.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_pgp.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_png.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_ppu.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_ps.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_python.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_rdata.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_rlib.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_rpm.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_sevenz.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_sockets.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_sphinx.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_sqlite.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_squashfs.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_symlink.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_tar.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_text.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_uimage.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_uki.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_utils.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_wasm.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_xml.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_xsb.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_xz.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_zip.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/comparators/test_zst.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/conftest.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/Samyak-Malayalam1.ttf +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/Samyak-Malayalam2.ttf +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/Test1.class +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/Test2.class +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/android1.img +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/android2.img +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/android_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/apk_manifest_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/apk_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/archive1.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/archive12.diff.txt +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/archive2.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/arsc_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/base-files_157-r45695_ar71xx.ipk +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/base-files_157-r45918_ar71xx.ipk +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/berkeley6_db_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/berkeley_db_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/binary1 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/binary2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/binary_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/binary_hexdump_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/binwalk_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug881937_1.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug881937_2.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug881937_control_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug903391_1.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug903391_2.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug903401_1.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug903401_2.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug903565_1.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/bug903565_2.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/comment_zipdetails_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/comment_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/containers/a.tar.bz2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/containers/a.tar.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/containers/a.tar.xz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/containers/b.tar.bz2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/containers/b.tar.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/containers/b.tar.xz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/containers/different_files_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/cpio_listing_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dbgsym/add/test-dbgsym-dbgsym_1_amd64.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dbgsym/add/test-dbgsym_1_amd64.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dbgsym/mult/test-dbgsym-dbgsym_1_amd64.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dbgsym/mult/test-dbgsym_1_amd64.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dbgsym/test-dbgsym_1.dsc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dbgsym/test-dbgsym_1.tar.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/deb_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/debian-bug-875281.collapsed-diff.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/debian-bug-876316-control.tar.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/device_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/device_expected_diff_freebsd +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/device_expected_diff_reverse +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/device_expected_diff_reverse_freebsd +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/devicetree1.dtb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/devicetree2.dtb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/devicetree_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dex_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dex_javap_14_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/docx_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dot_buildinfo_fallback_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dot_changes_description_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dot_changes_different_contents_and_identical_files_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dot_changes_fallback_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dot_changes_identical_contents_and_different_files_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dot_dsc_fallback_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/dummyx64.efi.stub +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elf_lib_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elf_lib_objdump_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elf_obj_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elf_obj_ghidra_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elfmix1.not_a +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elfmix2.a +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elfmix_disassembly_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elfmix_mach_o_expected_diff__text +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elfmix_mach_o_expected_diff__text_16 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elfmix_src_c_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elfmix_x_obj_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/elfmix_x_obj_objdump_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/encrypted1.zip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/encrypted2.zip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/epub_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ext4_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/fat12_expected_diffs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/fit_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/fontconfig_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/fuzzy-tar-in-tar1.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/fuzzy-tar-in-tar2.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/fuzzy1.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/fuzzy2.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/fuzzy3.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/gif_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/git_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/git_expected_diff_freebsd +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/gnu_debuglink_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/gnumeric_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/gzip_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/haskell_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/hdf5_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/hello1.wasm +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/hello2.wasm +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/html_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/html_text_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/icc_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ico_image_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ico_image_meta_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ico_image_meta_expected_diff_v2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ignore_readelf_errors_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/inv_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ipk_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/iso9660_content_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/iso9660_content_expected_diff_cdrtools +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/iso9660_rockridge_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/iso9660_rockridge_expected_diff_cdrtools +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/javap_14_class_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/javap_class_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/javascript_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/jmod_zipdetails_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/jmod_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/jpeg_image_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/jpeg_image_meta_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/json_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/json_expected_ordering_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/kbx_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__cstring +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__eh_frame +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__la_symbol_ptr +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__stub_helper +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__stub_helper_16 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__stubs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__stubs_16 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__text +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__text_16 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff__unwind_info +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff_dyn_relocations +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff_dyn_symbols +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff_file_headers +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff_needed_libs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff_relocations +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff_strings +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff_symbols +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_llvm_expected_diff_symbols_llvm_11 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_obj_ghidra_expected_diff_main +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_otool_expected_diff__cstring +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_otool_expected_diff__data +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_otool_expected_diff__text +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_otool_expected_diff_headers +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_otool_expected_diff_indirect_symbols +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_otool_expected_diff_libraries +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/macho_otool_expected_diff_strings +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/mo_charsets_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/mo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/mozzip_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/mp3_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/no-perms.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/nupkg_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ocaml_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/odt_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ogg_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/openssh_pub_key_expected_diff_12 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/openssh_pub_key_expected_diff_23 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/order1a.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/order1b.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/output.colored.txt +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/output.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/output.md +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/output.rst +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/output.txt +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/output_expected_363.html +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/output_expected_372.html +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/output_regression_875281.html +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pcap_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pdf_annotations_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pdf_metadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pdf_text_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pe_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pgp_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pgp_signature_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pgp_signed_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/png_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ppu_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/procyon_class_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ps_internal_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ps_text_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/pyc_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/quine.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/quine.zip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/quine_a.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/quine_b.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/quine_deb_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/quine_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rdb_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rds_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/resources1.arsc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/resources2.arsc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_armap_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_elf_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_llvm_dis_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_llvm_dis_expected_diff_10 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_llvm_dis_expected_diff_15 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_llvm_dis_expected_diff_16 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_llvm_dis_expected_diff_21 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_llvm_dis_expected_diff_22 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_llvm_dis_expected_diff_5 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rlib_llvm_dis_expected_diff_7 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rpm_fallback_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rpm_header_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/rpm_listing_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/salsa-issue-363.diff.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/salsa-issue-372.diff.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/sqlite3_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/squashfs_root_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/squashfs_superblock_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/symlink_expected_destination_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/symlink_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/tar_listing_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1-le64.cache-4 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.a +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.apk +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.asar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.asc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.binwalk +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.buildinfo +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.bz2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.changes +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.cpio +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.db +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.debsrc.tar.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.debug +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.dex +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.disk.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.docx +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.dsc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.epub +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.exe +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.ext4 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.fat12 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.fat16 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.fat32 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.gif +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.git-index +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.gnumeric +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.hi +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.html +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.icc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.ico +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.inv +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.iso +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.jmod +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.jpg +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.js +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.kbx +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.lz4 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.lzip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.lzma +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.macho +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.mo +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.mozzip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.mp3 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.nupkg +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.o +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.odt +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.ogg +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.pcap +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.pdf +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.pgp +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.png +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.ppu +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.ps +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.pyc-renamed +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.rdb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.rdx +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.rlib +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.rpm +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.sqlite3 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.squashfs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.xml +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.xsb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.xz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1.zip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1_meta.ico +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1_meta.jpg +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1_root.squashfs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test1_signed.pgp +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2-le64.cache-4 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.a +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.apk +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.asar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.asc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.binwalk +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.buildinfo +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.bz2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.changes +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.cpio +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.db +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.deb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.debsrc.tar.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.debug +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.dex +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.disk.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.docx +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.dsc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.epub +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.exe +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.ext4 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.fat12 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.gif +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.git-index +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.gnumeric +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.gz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.hi +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.html +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.icc +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.ico +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.inv +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.iso +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.jmod +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.jpg +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.js +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.kbx +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.lz4 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.lzip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.lzma +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.macho +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.mo +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.mozzip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.mp3 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.nupkg +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.o +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.odt +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.ogg +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.pcap +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.pdf +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.pgp +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.png +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.ppu +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.ps +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.pyc-renamed +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.rdb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.rdx +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.rlib +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.rpm +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.sqlite3 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.squashfs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.tar +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.xml +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.xsb +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.xz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2.zip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2_meta.ico +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2_meta.jpg +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2_root.squashfs +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test2_signed.pgp +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test3.apk +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test3.changes +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test3.gif +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test3.pdf +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test3.xml +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test3.xz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test3.zip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test4.changes +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test4.gif +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test4.pdf +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test4.xml +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test4.xz +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test5.changes +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_comment1.zip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_comment2.zip +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_directory_a_b_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_directory_b_a_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_directory_device_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_directory_file_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_directory_symlink_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_invalid.json +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_invalid.xml +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_iso8859-1.mo +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_no_charset.mo +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_openssh_pub_key1.pub +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_openssh_pub_key2.pub +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_openssh_pub_key3.pub +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_weird_non_unicode_chars1.pdf +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_weird_non_unicode_chars2.pdf +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_xml_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/test_xml_ordering_differences_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_ascii1 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_ascii2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_ascii_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_endings1 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_endings2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_endings_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_iso8859 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_iso8859_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_order1 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_order2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_order_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_sevenzmetadata_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_unicode1 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_unicode2 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_unicode_binary_fallback +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_unicode_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/text_xz_list +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ttf_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/ttf_ttx_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/uimage_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/uimage_expected_diff_pre_5_41 +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/uki_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/wasm_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/xsb_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/zip2_zipdetails_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/zip_bsdtar_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/zip_zipdetails_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/data/zip_zipinfo_expected_diff +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_diff_mask.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_difference.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_excludes.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_main.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_presenters.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_progress.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_quines.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_readers.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_source.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_tools.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/test_versions.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/utils/__init__.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/utils/data.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/utils/nonexisting.py +0 -0
- {diffoscope-330 → diffoscope-332}/tests/utils/tools.py +0 -0
- {diffoscope-330 → diffoscope-332}/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, 2026 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, 2026 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,11 @@
|
|
|
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
|
+
}
|
|
11
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
@@ -1,6 +1,6 @@
|
|
2
|
+
// callconv: rax amd64 (rdi, rsi, rdx, rcx, r8, r9, xmm0, xmm1, xmm2, xmm3, xmm4);
|
|
3
|
+
int printf (const char *format, ...) {
|
|
4
|
+
- // CALL XREF from main @ 0x100000f3f(x)
|
|
5
|
+
- goto loc_qword [reloc.printf] // [0x100001010:8]=0x100000f68 // "h\x0f" // [01] -r-x section size 6 named 1.__TEXT.__stubs
|
|
6
|
+
+ // CALL XREF from main @ 0x100000f58(x)
|
|
7
|
+
+ goto loc_qword [reloc.printf] // [0x100001010:8]=0x100000f80 "h" // [01] -r-x section size 6 named 1.__TEXT.__stubs
|
|
8
|
+
}
|
|
9
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
@@ -1,17 +1,16 @@
|
|
2
|
+
// callconv: rax amd64 (rdi, rsi, rdx, rcx, r8, r9, xmm0, xmm1, xmm2, xmm3, xmm4);
|
|
3
|
+
int main (int argc, char **argv, char **envp) {
|
|
4
|
+
- push (rbp) // [00] -r-x section size 49 named 0.__TEXT.__text
|
|
5
|
+
+ push (rbp) // [00] -r-x section size 42 named 0.__TEXT.__text
|
|
6
|
+
rbp = rsp
|
|
7
|
+
rsp -= 0x10
|
|
8
|
+
- rdi = rip + 0x43 // section.3.__TEXT.__cstring // 0x100000f72 // "%s %s\n"
|
|
9
|
+
- rsi = rip + 0x43 // str.17:31:50 // 0x100000f79 // "17:31:50"
|
|
10
|
+
- rdx = rip + 0x45 // str.Wed_Dec__2_17:31:49_2015 // 0x100000f82 // "Wed Dec 2 17:31:49 2015"
|
|
11
|
+
+ rdi = rip + 0x3b // section.3.__TEXT.__cstring // 0x100000f8a // "%s\n"
|
|
12
|
+
+ rsi = rip + 0x38 // str.15:52:34 // 0x100000f8e // "15:52:34"
|
|
13
|
+
al = 0
|
|
14
|
+
- sym.imp.printf () // int printf("%s %s\n", "17:31:50", "Wed Dec 2 17:31:49 2015")
|
|
15
|
+
+ sym.imp.printf () // int printf("%s\n", "15:52:34")
|
|
16
|
+
ecx = 0
|
|
17
|
+
dword [var_4h] = eax
|
|
18
|
+
eax = ecx
|
|
19
|
+
rsp += 0x10
|
|
20
|
+
rbp = pop ()
|
|
21
|
+
return // rsp // rsp
|
|
22
|
+
}
|
|
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
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
@@ -1,23 +1,21 @@
|
|
2
|
-
|
|
3
|
-
-// This function contains 1 basic blocks and its 49 long.
|
|
4
|
-
+// This function contains 1 basic blocks and its 42 long.
|
|
5
|
-
function main () {
|
|
6
|
-
- loc_0x100000f20:
|
|
7
|
-
- push rbp //[00] -r-x section size 49 named 0.__TEXT.__text
|
|
8
|
-
+ loc_0x100000f40:
|
|
9
|
-
+ push rbp //[00] -r-x section size 42 named 0.__TEXT.__text
|
|
10
|
-
rbp = rsp
|
|
11
|
-
rsp -= 0x10
|
|
12
|
-
- rdi = rip + 0x43 //section.3.__TEXT.__cstring
|
|
13
|
-
- //0x100000f72 ; "%s %s\n"
|
|
14
|
-
- rsi = rip + 0x43 //str.17:31:50
|
|
15
|
-
- //0x100000f79 ; "17:31:50"
|
|
16
|
-
- rdx = rip + 0x45 //str.Wed_Dec__2_17:31:49_2015
|
|
17
|
-
- //0x100000f82 ; "Wed Dec 2 17:31:49 2015"
|
|
18
|
-
+ rdi = rip + 0x3b //section.3.__TEXT.__cstring
|
|
19
|
-
+ //0x100000f8a ; "%s\n"
|
|
20
|
-
+ rsi = rip + 0x38 //str.15:52:34
|
|
21
|
-
+ //0x100000f8e ; "15:52:34"
|
|
22
|
-
al = 0
|
|
23
|
-
- 0x100000f3f
|
|
24
|
-
- int printf("%s %s\n")
|
|
25
|
-
+ 0x100000f58
|
|
26
|
-
+ int printf("%s\n")
|
|
27
|
-
ecx = 0
|
|
28
|
-
dword [var_4h] = eax
|
|
29
|
-
eax = ecx
|
|
30
|
-
rsp += 0x10
|
|
31
|
-
//rsp ; rsp
|
|
32
|
-
return
|
|
33
|
-
(break)
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
@@ -1,8 +1,8 @@
|
|
2
|
-
|
|
3
|
-
// This function contains 1 basic blocks and its 6 long.
|
|
4
|
-
function sym.imp.printf () {
|
|
5
|
-
- loc_0x100000f52:
|
|
6
|
-
- //CALL XREF from main @ 0x100000f3f
|
|
7
|
-
- goto qword [reloc.printf] //[0x100001010:8]=0x100000f68 "h" ; "h\x0f" ; [01] -r-x section size 6 named 1.__TEXT.__stubs
|
|
8
|
-
+ loc_0x100000f6a:
|
|
9
|
-
+ //CALL XREF from main @ 0x100000f58
|
|
10
|
-
+ goto qword [reloc.printf] //[0x100001010:8]=0x100000f80 "h" ; [01] -r-x section size 6 named 1.__TEXT.__stubs
|
|
11
|
-
(break)
|
|
12
|
-
}
|
|
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
|