diffoscope 329__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.
Files changed (674) hide show
  1. {diffoscope-329/diffoscope.egg-info → diffoscope-331}/PKG-INFO +1 -1
  2. {diffoscope-329 → diffoscope-331}/diffoscope/__init__.py +1 -1
  3. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/__init__.py +1 -0
  4. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/decompile.py +6 -2
  5. diffoscope-331/diffoscope/comparators/nar.py +245 -0
  6. {diffoscope-329 → diffoscope-331}/diffoscope/external_tools.py +1 -0
  7. diffoscope-331/diffoscope/scripts/restore-nar.scm +11 -0
  8. {diffoscope-329 → diffoscope-331/diffoscope.egg-info}/PKG-INFO +1 -1
  9. {diffoscope-329 → diffoscope-331}/diffoscope.egg-info/SOURCES.txt +8 -0
  10. diffoscope-331/tests/comparators/test_nar.py +87 -0
  11. diffoscope-331/tests/data/elf_obj_radare2_expected_diff +10 -0
  12. diffoscope-331/tests/data/nar_listing_expected_diff +6 -0
  13. diffoscope-331/tests/data/test1.nar +0 -0
  14. diffoscope-331/tests/data/test2.nar +0 -0
  15. diffoscope-331/tests/data/test3.nar +0 -0
  16. diffoscope-331/tests/data/test4.nar +0 -0
  17. diffoscope-329/tests/data/elf_obj_radare2_expected_diff +0 -13
  18. {diffoscope-329 → diffoscope-331}/CONTRIBUTING.md +0 -0
  19. {diffoscope-329 → diffoscope-331}/COPYING +0 -0
  20. {diffoscope-329 → diffoscope-331}/MANIFEST.in +0 -0
  21. {diffoscope-329 → diffoscope-331}/README.rst +0 -0
  22. {diffoscope-329 → diffoscope-331}/diffoscope/changes.py +0 -0
  23. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/android.py +0 -0
  24. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/apk.py +0 -0
  25. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/ar.py +0 -0
  26. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/arsc.py +0 -0
  27. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/asar.py +0 -0
  28. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/berkeley_db.py +0 -0
  29. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/binary.py +0 -0
  30. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/binwalk.py +0 -0
  31. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/bzip2.py +0 -0
  32. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/cbfs.py +0 -0
  33. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/cpio.py +0 -0
  34. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/deb.py +0 -0
  35. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/debian.py +0 -0
  36. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/debian_fallback.py +0 -0
  37. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/device.py +0 -0
  38. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/dex.py +0 -0
  39. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/directory.py +0 -0
  40. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/docx.py +0 -0
  41. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/dtb.py +0 -0
  42. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/elf.py +0 -0
  43. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/ffprobe.py +0 -0
  44. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/fit.py +0 -0
  45. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/fontconfig.py +0 -0
  46. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/fonts.py +0 -0
  47. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/fsimage.py +0 -0
  48. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/gettext.py +0 -0
  49. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/gif.py +0 -0
  50. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/git.py +0 -0
  51. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/gnumeric.py +0 -0
  52. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/gzip.py +0 -0
  53. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/haskell.py +0 -0
  54. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/hdf.py +0 -0
  55. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/html.py +0 -0
  56. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/icc.py +0 -0
  57. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/image.py +0 -0
  58. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/ipk.py +0 -0
  59. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/iso9660.py +0 -0
  60. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/java.py +0 -0
  61. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/javascript.py +0 -0
  62. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/json.py +0 -0
  63. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/kbx.py +0 -0
  64. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/llvm.py +0 -0
  65. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/lz4.py +0 -0
  66. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/lzip.py +0 -0
  67. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/lzma.py +0 -0
  68. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/macho.py +0 -0
  69. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/missing_file.py +0 -0
  70. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/mono.py +0 -0
  71. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/ocaml.py +0 -0
  72. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/odt.py +0 -0
  73. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/ogg.py +0 -0
  74. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/openssh.py +0 -0
  75. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/openssl.py +0 -0
  76. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/pcap.py +0 -0
  77. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/pdf.py +0 -0
  78. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/pe32.py +0 -0
  79. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/pgp.py +0 -0
  80. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/png.py +0 -0
  81. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/ppu.py +0 -0
  82. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/ps.py +0 -0
  83. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/python.py +0 -0
  84. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/rdata.py +0 -0
  85. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/rpm.py +0 -0
  86. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/rpm_fallback.py +0 -0
  87. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/rust.py +0 -0
  88. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/sevenz.py +0 -0
  89. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/socket_or_fifo.py +0 -0
  90. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/sphinx.py +0 -0
  91. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/sqlite.py +0 -0
  92. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/squashfs.py +0 -0
  93. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/symlink.py +0 -0
  94. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/tar.py +0 -0
  95. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/text.py +0 -0
  96. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/uimage.py +0 -0
  97. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/uki.py +0 -0
  98. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/__init__.py +0 -0
  99. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/archive.py +0 -0
  100. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/command.py +0 -0
  101. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/compare.py +0 -0
  102. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/container.py +0 -0
  103. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/file.py +0 -0
  104. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/fuzzy.py +0 -0
  105. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/libarchive.py +0 -0
  106. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/operation.py +0 -0
  107. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/utils/specialize.py +0 -0
  108. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/vmlinuz.py +0 -0
  109. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/wasm.py +0 -0
  110. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/xar.py +0 -0
  111. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/xml.py +0 -0
  112. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/xmlb.py +0 -0
  113. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/xsb.py +0 -0
  114. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/xz.py +0 -0
  115. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/zip.py +0 -0
  116. {diffoscope-329 → diffoscope-331}/diffoscope/comparators/zst.py +0 -0
  117. {diffoscope-329 → diffoscope-331}/diffoscope/config.py +0 -0
  118. {diffoscope-329 → diffoscope-331}/diffoscope/diff.py +0 -0
  119. {diffoscope-329 → diffoscope-331}/diffoscope/difference.py +0 -0
  120. {diffoscope-329 → diffoscope-331}/diffoscope/environ.py +0 -0
  121. {diffoscope-329 → diffoscope-331}/diffoscope/exc.py +0 -0
  122. {diffoscope-329 → diffoscope-331}/diffoscope/excludes.py +0 -0
  123. {diffoscope-329 → diffoscope-331}/diffoscope/feeders.py +0 -0
  124. {diffoscope-329 → diffoscope-331}/diffoscope/logging.py +0 -0
  125. {diffoscope-329 → diffoscope-331}/diffoscope/main.py +0 -0
  126. {diffoscope-329 → diffoscope-331}/diffoscope/path.py +0 -0
  127. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/__init__.py +0 -0
  128. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/formats.py +0 -0
  129. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/html/__init__.py +0 -0
  130. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/html/html.py +0 -0
  131. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/html/templates.py +0 -0
  132. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/icon.py +0 -0
  133. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/json.py +0 -0
  134. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/markdown.py +0 -0
  135. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/restructuredtext.py +0 -0
  136. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/text.py +0 -0
  137. {diffoscope-329 → diffoscope-331}/diffoscope/presenters/utils.py +0 -0
  138. {diffoscope-329 → diffoscope-331}/diffoscope/profiling.py +0 -0
  139. {diffoscope-329 → diffoscope-331}/diffoscope/progress.py +0 -0
  140. {diffoscope-329 → diffoscope-331}/diffoscope/readers/__init__.py +0 -0
  141. {diffoscope-329 → diffoscope-331}/diffoscope/readers/json.py +0 -0
  142. {diffoscope-329 → diffoscope-331}/diffoscope/readers/utils.py +0 -0
  143. {diffoscope-329 → diffoscope-331}/diffoscope/scripts/extract-vmlinux +0 -0
  144. {diffoscope-329 → diffoscope-331}/diffoscope/tempfiles.py +0 -0
  145. {diffoscope-329 → diffoscope-331}/diffoscope/tools.py +0 -0
  146. {diffoscope-329 → diffoscope-331}/diffoscope/utils.py +0 -0
  147. {diffoscope-329 → diffoscope-331}/diffoscope.egg-info/dependency_links.txt +0 -0
  148. {diffoscope-329 → diffoscope-331}/diffoscope.egg-info/entry_points.txt +0 -0
  149. {diffoscope-329 → diffoscope-331}/diffoscope.egg-info/requires.txt +0 -0
  150. {diffoscope-329 → diffoscope-331}/diffoscope.egg-info/top_level.txt +0 -0
  151. {diffoscope-329 → diffoscope-331}/extras_require.json +0 -0
  152. {diffoscope-329 → diffoscope-331}/pyproject.toml +0 -0
  153. {diffoscope-329 → diffoscope-331}/setup.cfg +0 -0
  154. {diffoscope-329 → diffoscope-331}/setup.py +0 -0
  155. {diffoscope-329 → diffoscope-331}/tests/__init__.py +0 -0
  156. {diffoscope-329 → diffoscope-331}/tests/comparators/__init__.py +0 -0
  157. {diffoscope-329 → diffoscope-331}/tests/comparators/test_android.py +0 -0
  158. {diffoscope-329 → diffoscope-331}/tests/comparators/test_apk.py +0 -0
  159. {diffoscope-329 → diffoscope-331}/tests/comparators/test_archive.py +0 -0
  160. {diffoscope-329 → diffoscope-331}/tests/comparators/test_arsc.py +0 -0
  161. {diffoscope-329 → diffoscope-331}/tests/comparators/test_asar.py +0 -0
  162. {diffoscope-329 → diffoscope-331}/tests/comparators/test_berkeley_db.py +0 -0
  163. {diffoscope-329 → diffoscope-331}/tests/comparators/test_binary.py +0 -0
  164. {diffoscope-329 → diffoscope-331}/tests/comparators/test_binwalk.py +0 -0
  165. {diffoscope-329 → diffoscope-331}/tests/comparators/test_bzip2.py +0 -0
  166. {diffoscope-329 → diffoscope-331}/tests/comparators/test_cbfs.py +0 -0
  167. {diffoscope-329 → diffoscope-331}/tests/comparators/test_containers.py +0 -0
  168. {diffoscope-329 → diffoscope-331}/tests/comparators/test_cpio.py +0 -0
  169. {diffoscope-329 → diffoscope-331}/tests/comparators/test_deb.py +0 -0
  170. {diffoscope-329 → diffoscope-331}/tests/comparators/test_debian.py +0 -0
  171. {diffoscope-329 → diffoscope-331}/tests/comparators/test_device.py +0 -0
  172. {diffoscope-329 → diffoscope-331}/tests/comparators/test_dex.py +0 -0
  173. {diffoscope-329 → diffoscope-331}/tests/comparators/test_directory.py +0 -0
  174. {diffoscope-329 → diffoscope-331}/tests/comparators/test_docx.py +0 -0
  175. {diffoscope-329 → diffoscope-331}/tests/comparators/test_dtb.py +0 -0
  176. {diffoscope-329 → diffoscope-331}/tests/comparators/test_elf.py +0 -0
  177. {diffoscope-329 → diffoscope-331}/tests/comparators/test_elf_decompiler.py +0 -0
  178. {diffoscope-329 → diffoscope-331}/tests/comparators/test_epub.py +0 -0
  179. {diffoscope-329 → diffoscope-331}/tests/comparators/test_ffprobe.py +0 -0
  180. {diffoscope-329 → diffoscope-331}/tests/comparators/test_fit.py +0 -0
  181. {diffoscope-329 → diffoscope-331}/tests/comparators/test_fontconfig.py +0 -0
  182. {diffoscope-329 → diffoscope-331}/tests/comparators/test_fonts.py +0 -0
  183. {diffoscope-329 → diffoscope-331}/tests/comparators/test_fsimage.py +0 -0
  184. {diffoscope-329 → diffoscope-331}/tests/comparators/test_gettext.py +0 -0
  185. {diffoscope-329 → diffoscope-331}/tests/comparators/test_gif.py +0 -0
  186. {diffoscope-329 → diffoscope-331}/tests/comparators/test_git.py +0 -0
  187. {diffoscope-329 → diffoscope-331}/tests/comparators/test_gnumeric.py +0 -0
  188. {diffoscope-329 → diffoscope-331}/tests/comparators/test_gzip.py +0 -0
  189. {diffoscope-329 → diffoscope-331}/tests/comparators/test_haskell.py +0 -0
  190. {diffoscope-329 → diffoscope-331}/tests/comparators/test_hdf.py +0 -0
  191. {diffoscope-329 → diffoscope-331}/tests/comparators/test_html.py +0 -0
  192. {diffoscope-329 → diffoscope-331}/tests/comparators/test_icc.py +0 -0
  193. {diffoscope-329 → diffoscope-331}/tests/comparators/test_ico_image.py +0 -0
  194. {diffoscope-329 → diffoscope-331}/tests/comparators/test_ipk.py +0 -0
  195. {diffoscope-329 → diffoscope-331}/tests/comparators/test_iso9660.py +0 -0
  196. {diffoscope-329 → diffoscope-331}/tests/comparators/test_java.py +0 -0
  197. {diffoscope-329 → diffoscope-331}/tests/comparators/test_javascript.py +0 -0
  198. {diffoscope-329 → diffoscope-331}/tests/comparators/test_jpeg_image.py +0 -0
  199. {diffoscope-329 → diffoscope-331}/tests/comparators/test_json.py +0 -0
  200. {diffoscope-329 → diffoscope-331}/tests/comparators/test_kbx.py +0 -0
  201. {diffoscope-329 → diffoscope-331}/tests/comparators/test_lz4.py +0 -0
  202. {diffoscope-329 → diffoscope-331}/tests/comparators/test_lzip.py +0 -0
  203. {diffoscope-329 → diffoscope-331}/tests/comparators/test_lzma.py +0 -0
  204. {diffoscope-329 → diffoscope-331}/tests/comparators/test_macho.py +0 -0
  205. {diffoscope-329 → diffoscope-331}/tests/comparators/test_macho_decompiler.py +0 -0
  206. {diffoscope-329 → diffoscope-331}/tests/comparators/test_mono.py +0 -0
  207. {diffoscope-329 → diffoscope-331}/tests/comparators/test_ocaml.py +0 -0
  208. {diffoscope-329 → diffoscope-331}/tests/comparators/test_odt.py +0 -0
  209. {diffoscope-329 → diffoscope-331}/tests/comparators/test_ogg.py +0 -0
  210. {diffoscope-329 → diffoscope-331}/tests/comparators/test_openssh_pub_key.py +0 -0
  211. {diffoscope-329 → diffoscope-331}/tests/comparators/test_openssl.py +0 -0
  212. {diffoscope-329 → diffoscope-331}/tests/comparators/test_pcap.py +0 -0
  213. {diffoscope-329 → diffoscope-331}/tests/comparators/test_pdf.py +0 -0
  214. {diffoscope-329 → diffoscope-331}/tests/comparators/test_pgp.py +0 -0
  215. {diffoscope-329 → diffoscope-331}/tests/comparators/test_png.py +0 -0
  216. {diffoscope-329 → diffoscope-331}/tests/comparators/test_ppu.py +0 -0
  217. {diffoscope-329 → diffoscope-331}/tests/comparators/test_ps.py +0 -0
  218. {diffoscope-329 → diffoscope-331}/tests/comparators/test_python.py +0 -0
  219. {diffoscope-329 → diffoscope-331}/tests/comparators/test_rdata.py +0 -0
  220. {diffoscope-329 → diffoscope-331}/tests/comparators/test_rlib.py +0 -0
  221. {diffoscope-329 → diffoscope-331}/tests/comparators/test_rpm.py +0 -0
  222. {diffoscope-329 → diffoscope-331}/tests/comparators/test_sevenz.py +0 -0
  223. {diffoscope-329 → diffoscope-331}/tests/comparators/test_sockets.py +0 -0
  224. {diffoscope-329 → diffoscope-331}/tests/comparators/test_sphinx.py +0 -0
  225. {diffoscope-329 → diffoscope-331}/tests/comparators/test_sqlite.py +0 -0
  226. {diffoscope-329 → diffoscope-331}/tests/comparators/test_squashfs.py +0 -0
  227. {diffoscope-329 → diffoscope-331}/tests/comparators/test_symlink.py +0 -0
  228. {diffoscope-329 → diffoscope-331}/tests/comparators/test_tar.py +0 -0
  229. {diffoscope-329 → diffoscope-331}/tests/comparators/test_text.py +0 -0
  230. {diffoscope-329 → diffoscope-331}/tests/comparators/test_uimage.py +0 -0
  231. {diffoscope-329 → diffoscope-331}/tests/comparators/test_uki.py +0 -0
  232. {diffoscope-329 → diffoscope-331}/tests/comparators/test_utils.py +0 -0
  233. {diffoscope-329 → diffoscope-331}/tests/comparators/test_wasm.py +0 -0
  234. {diffoscope-329 → diffoscope-331}/tests/comparators/test_xml.py +0 -0
  235. {diffoscope-329 → diffoscope-331}/tests/comparators/test_xsb.py +0 -0
  236. {diffoscope-329 → diffoscope-331}/tests/comparators/test_xz.py +0 -0
  237. {diffoscope-329 → diffoscope-331}/tests/comparators/test_zip.py +0 -0
  238. {diffoscope-329 → diffoscope-331}/tests/comparators/test_zst.py +0 -0
  239. {diffoscope-329 → diffoscope-331}/tests/conftest.py +0 -0
  240. {diffoscope-329 → diffoscope-331}/tests/data/Samyak-Malayalam1.ttf +0 -0
  241. {diffoscope-329 → diffoscope-331}/tests/data/Samyak-Malayalam2.ttf +0 -0
  242. {diffoscope-329 → diffoscope-331}/tests/data/Test1.class +0 -0
  243. {diffoscope-329 → diffoscope-331}/tests/data/Test2.class +0 -0
  244. {diffoscope-329 → diffoscope-331}/tests/data/android1.img +0 -0
  245. {diffoscope-329 → diffoscope-331}/tests/data/android2.img +0 -0
  246. {diffoscope-329 → diffoscope-331}/tests/data/android_expected_diff +0 -0
  247. {diffoscope-329 → diffoscope-331}/tests/data/apk_manifest_expected_diff +0 -0
  248. {diffoscope-329 → diffoscope-331}/tests/data/apk_zipinfo_expected_diff +0 -0
  249. {diffoscope-329 → diffoscope-331}/tests/data/archive1.tar +0 -0
  250. {diffoscope-329 → diffoscope-331}/tests/data/archive12.diff.txt +0 -0
  251. {diffoscope-329 → diffoscope-331}/tests/data/archive2.tar +0 -0
  252. {diffoscope-329 → diffoscope-331}/tests/data/arsc_expected_diff +0 -0
  253. {diffoscope-329 → diffoscope-331}/tests/data/base-files_157-r45695_ar71xx.ipk +0 -0
  254. {diffoscope-329 → diffoscope-331}/tests/data/base-files_157-r45918_ar71xx.ipk +0 -0
  255. {diffoscope-329 → diffoscope-331}/tests/data/berkeley6_db_expected_diff +0 -0
  256. {diffoscope-329 → diffoscope-331}/tests/data/berkeley_db_expected_diff +0 -0
  257. {diffoscope-329 → diffoscope-331}/tests/data/binary1 +0 -0
  258. {diffoscope-329 → diffoscope-331}/tests/data/binary2 +0 -0
  259. {diffoscope-329 → diffoscope-331}/tests/data/binary_expected_diff +0 -0
  260. {diffoscope-329 → diffoscope-331}/tests/data/binary_hexdump_expected_diff +0 -0
  261. {diffoscope-329 → diffoscope-331}/tests/data/binwalk_expected_diff +0 -0
  262. {diffoscope-329 → diffoscope-331}/tests/data/bug881937_1.deb +0 -0
  263. {diffoscope-329 → diffoscope-331}/tests/data/bug881937_2.deb +0 -0
  264. {diffoscope-329 → diffoscope-331}/tests/data/bug881937_control_expected_diff +0 -0
  265. {diffoscope-329 → diffoscope-331}/tests/data/bug903391_1.deb +0 -0
  266. {diffoscope-329 → diffoscope-331}/tests/data/bug903391_2.deb +0 -0
  267. {diffoscope-329 → diffoscope-331}/tests/data/bug903401_1.deb +0 -0
  268. {diffoscope-329 → diffoscope-331}/tests/data/bug903401_2.deb +0 -0
  269. {diffoscope-329 → diffoscope-331}/tests/data/bug903565_1.deb +0 -0
  270. {diffoscope-329 → diffoscope-331}/tests/data/bug903565_2.deb +0 -0
  271. {diffoscope-329 → diffoscope-331}/tests/data/comment_zipdetails_expected_diff +0 -0
  272. {diffoscope-329 → diffoscope-331}/tests/data/comment_zipinfo_expected_diff +0 -0
  273. {diffoscope-329 → diffoscope-331}/tests/data/containers/a.tar.bz2 +0 -0
  274. {diffoscope-329 → diffoscope-331}/tests/data/containers/a.tar.gz +0 -0
  275. {diffoscope-329 → diffoscope-331}/tests/data/containers/a.tar.xz +0 -0
  276. {diffoscope-329 → diffoscope-331}/tests/data/containers/b.tar.bz2 +0 -0
  277. {diffoscope-329 → diffoscope-331}/tests/data/containers/b.tar.gz +0 -0
  278. {diffoscope-329 → diffoscope-331}/tests/data/containers/b.tar.xz +0 -0
  279. {diffoscope-329 → diffoscope-331}/tests/data/containers/different_files_expected_diff +0 -0
  280. {diffoscope-329 → diffoscope-331}/tests/data/cpio_listing_expected_diff +0 -0
  281. {diffoscope-329 → diffoscope-331}/tests/data/dbgsym/add/test-dbgsym-dbgsym_1_amd64.deb +0 -0
  282. {diffoscope-329 → diffoscope-331}/tests/data/dbgsym/add/test-dbgsym_1_amd64.deb +0 -0
  283. {diffoscope-329 → diffoscope-331}/tests/data/dbgsym/mult/test-dbgsym-dbgsym_1_amd64.deb +0 -0
  284. {diffoscope-329 → diffoscope-331}/tests/data/dbgsym/mult/test-dbgsym_1_amd64.deb +0 -0
  285. {diffoscope-329 → diffoscope-331}/tests/data/dbgsym/test-dbgsym_1.dsc +0 -0
  286. {diffoscope-329 → diffoscope-331}/tests/data/dbgsym/test-dbgsym_1.tar.gz +0 -0
  287. {diffoscope-329 → diffoscope-331}/tests/data/deb_metadata_expected_diff +0 -0
  288. {diffoscope-329 → diffoscope-331}/tests/data/debian-bug-875281.collapsed-diff.json +0 -0
  289. {diffoscope-329 → diffoscope-331}/tests/data/debian-bug-876316-control.tar.gz +0 -0
  290. {diffoscope-329 → diffoscope-331}/tests/data/device_expected_diff +0 -0
  291. {diffoscope-329 → diffoscope-331}/tests/data/device_expected_diff_freebsd +0 -0
  292. {diffoscope-329 → diffoscope-331}/tests/data/device_expected_diff_reverse +0 -0
  293. {diffoscope-329 → diffoscope-331}/tests/data/device_expected_diff_reverse_freebsd +0 -0
  294. {diffoscope-329 → diffoscope-331}/tests/data/devicetree1.dtb +0 -0
  295. {diffoscope-329 → diffoscope-331}/tests/data/devicetree2.dtb +0 -0
  296. {diffoscope-329 → diffoscope-331}/tests/data/devicetree_expected_diff +0 -0
  297. {diffoscope-329 → diffoscope-331}/tests/data/dex_expected_diffs +0 -0
  298. {diffoscope-329 → diffoscope-331}/tests/data/dex_javap_14_expected_diffs +0 -0
  299. {diffoscope-329 → diffoscope-331}/tests/data/docx_expected_diff +0 -0
  300. {diffoscope-329 → diffoscope-331}/tests/data/dot_buildinfo_fallback_expected_diff +0 -0
  301. {diffoscope-329 → diffoscope-331}/tests/data/dot_changes_description_expected_diff +0 -0
  302. {diffoscope-329 → diffoscope-331}/tests/data/dot_changes_different_contents_and_identical_files_expected_diff +0 -0
  303. {diffoscope-329 → diffoscope-331}/tests/data/dot_changes_fallback_expected_diff +0 -0
  304. {diffoscope-329 → diffoscope-331}/tests/data/dot_changes_identical_contents_and_different_files_expected_diff +0 -0
  305. {diffoscope-329 → diffoscope-331}/tests/data/dot_dsc_fallback_expected_diff +0 -0
  306. {diffoscope-329 → diffoscope-331}/tests/data/dummyx64.efi.stub +0 -0
  307. {diffoscope-329 → diffoscope-331}/tests/data/elf_lib_metadata_expected_diff +0 -0
  308. {diffoscope-329 → diffoscope-331}/tests/data/elf_lib_objdump_expected_diff +0 -0
  309. {diffoscope-329 → diffoscope-331}/tests/data/elf_obj_expected_diff +0 -0
  310. {diffoscope-329 → diffoscope-331}/tests/data/elf_obj_ghidra_expected_diff +0 -0
  311. {diffoscope-329 → diffoscope-331}/tests/data/elfmix1.not_a +0 -0
  312. {diffoscope-329 → diffoscope-331}/tests/data/elfmix2.a +0 -0
  313. {diffoscope-329 → diffoscope-331}/tests/data/elfmix_disassembly_expected_diff +0 -0
  314. {diffoscope-329 → diffoscope-331}/tests/data/elfmix_mach_o_expected_diff__text +0 -0
  315. {diffoscope-329 → diffoscope-331}/tests/data/elfmix_mach_o_expected_diff__text_16 +0 -0
  316. {diffoscope-329 → diffoscope-331}/tests/data/elfmix_src_c_expected_diff +0 -0
  317. {diffoscope-329 → diffoscope-331}/tests/data/elfmix_x_obj_expected_diff +0 -0
  318. {diffoscope-329 → diffoscope-331}/tests/data/elfmix_x_obj_objdump_expected_diff +0 -0
  319. {diffoscope-329 → diffoscope-331}/tests/data/encrypted1.zip +0 -0
  320. {diffoscope-329 → diffoscope-331}/tests/data/encrypted2.zip +0 -0
  321. {diffoscope-329 → diffoscope-331}/tests/data/epub_expected_diffs +0 -0
  322. {diffoscope-329 → diffoscope-331}/tests/data/ext4_expected_diffs +0 -0
  323. {diffoscope-329 → diffoscope-331}/tests/data/fat12_expected_diffs +0 -0
  324. {diffoscope-329 → diffoscope-331}/tests/data/fit_expected_diff +0 -0
  325. {diffoscope-329 → diffoscope-331}/tests/data/fontconfig_expected_diff +0 -0
  326. {diffoscope-329 → diffoscope-331}/tests/data/fuzzy-tar-in-tar1.tar +0 -0
  327. {diffoscope-329 → diffoscope-331}/tests/data/fuzzy-tar-in-tar2.tar +0 -0
  328. {diffoscope-329 → diffoscope-331}/tests/data/fuzzy1.tar +0 -0
  329. {diffoscope-329 → diffoscope-331}/tests/data/fuzzy2.tar +0 -0
  330. {diffoscope-329 → diffoscope-331}/tests/data/fuzzy3.tar +0 -0
  331. {diffoscope-329 → diffoscope-331}/tests/data/gif_expected_diff +0 -0
  332. {diffoscope-329 → diffoscope-331}/tests/data/git_expected_diff +0 -0
  333. {diffoscope-329 → diffoscope-331}/tests/data/git_expected_diff_freebsd +0 -0
  334. {diffoscope-329 → diffoscope-331}/tests/data/gnu_debuglink_expected_diff +0 -0
  335. {diffoscope-329 → diffoscope-331}/tests/data/gnumeric_expected_diff +0 -0
  336. {diffoscope-329 → diffoscope-331}/tests/data/gzip_metadata_expected_diff +0 -0
  337. {diffoscope-329 → diffoscope-331}/tests/data/haskell_expected_diff +0 -0
  338. {diffoscope-329 → diffoscope-331}/tests/data/hdf5_expected_diff +0 -0
  339. {diffoscope-329 → diffoscope-331}/tests/data/hello1.wasm +0 -0
  340. {diffoscope-329 → diffoscope-331}/tests/data/hello2.wasm +0 -0
  341. {diffoscope-329 → diffoscope-331}/tests/data/html_expected_diff +0 -0
  342. {diffoscope-329 → diffoscope-331}/tests/data/html_text_expected_diff +0 -0
  343. {diffoscope-329 → diffoscope-331}/tests/data/icc_expected_diff +0 -0
  344. {diffoscope-329 → diffoscope-331}/tests/data/ico_image_expected_diff +0 -0
  345. {diffoscope-329 → diffoscope-331}/tests/data/ico_image_meta_expected_diff +0 -0
  346. {diffoscope-329 → diffoscope-331}/tests/data/ico_image_meta_expected_diff_v2 +0 -0
  347. {diffoscope-329 → diffoscope-331}/tests/data/ignore_readelf_errors_expected_diff +0 -0
  348. {diffoscope-329 → diffoscope-331}/tests/data/inv_expected_diff +0 -0
  349. {diffoscope-329 → diffoscope-331}/tests/data/ipk_metadata_expected_diff +0 -0
  350. {diffoscope-329 → diffoscope-331}/tests/data/iso9660_content_expected_diff +0 -0
  351. {diffoscope-329 → diffoscope-331}/tests/data/iso9660_content_expected_diff_cdrtools +0 -0
  352. {diffoscope-329 → diffoscope-331}/tests/data/iso9660_rockridge_expected_diff +0 -0
  353. {diffoscope-329 → diffoscope-331}/tests/data/iso9660_rockridge_expected_diff_cdrtools +0 -0
  354. {diffoscope-329 → diffoscope-331}/tests/data/javap_14_class_expected_diff +0 -0
  355. {diffoscope-329 → diffoscope-331}/tests/data/javap_class_expected_diff +0 -0
  356. {diffoscope-329 → diffoscope-331}/tests/data/javascript_expected_diff +0 -0
  357. {diffoscope-329 → diffoscope-331}/tests/data/jmod_zipdetails_expected_diff +0 -0
  358. {diffoscope-329 → diffoscope-331}/tests/data/jmod_zipinfo_expected_diff +0 -0
  359. {diffoscope-329 → diffoscope-331}/tests/data/jpeg_image_expected_diff +0 -0
  360. {diffoscope-329 → diffoscope-331}/tests/data/jpeg_image_meta_expected_diff +0 -0
  361. {diffoscope-329 → diffoscope-331}/tests/data/json_expected_diff +0 -0
  362. {diffoscope-329 → diffoscope-331}/tests/data/json_expected_ordering_diff +0 -0
  363. {diffoscope-329 → diffoscope-331}/tests/data/kbx_expected_diff +0 -0
  364. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__cstring +0 -0
  365. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__eh_frame +0 -0
  366. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__la_symbol_ptr +0 -0
  367. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__stub_helper +0 -0
  368. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__stub_helper_16 +0 -0
  369. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__stubs +0 -0
  370. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__stubs_16 +0 -0
  371. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__text +0 -0
  372. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__text_16 +0 -0
  373. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff__unwind_info +0 -0
  374. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff_dyn_relocations +0 -0
  375. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff_dyn_symbols +0 -0
  376. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff_file_headers +0 -0
  377. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff_needed_libs +0 -0
  378. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff_relocations +0 -0
  379. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff_strings +0 -0
  380. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff_symbols +0 -0
  381. {diffoscope-329 → diffoscope-331}/tests/data/macho_llvm_expected_diff_symbols_llvm_11 +0 -0
  382. {diffoscope-329 → diffoscope-331}/tests/data/macho_obj_ghidra_expected_diff_main +0 -0
  383. {diffoscope-329 → diffoscope-331}/tests/data/macho_obj_radare2_expected_diff_main +0 -0
  384. {diffoscope-329 → diffoscope-331}/tests/data/macho_obj_radare2_expected_diff_printf +0 -0
  385. {diffoscope-329 → diffoscope-331}/tests/data/macho_otool_expected_diff__cstring +0 -0
  386. {diffoscope-329 → diffoscope-331}/tests/data/macho_otool_expected_diff__data +0 -0
  387. {diffoscope-329 → diffoscope-331}/tests/data/macho_otool_expected_diff__text +0 -0
  388. {diffoscope-329 → diffoscope-331}/tests/data/macho_otool_expected_diff_headers +0 -0
  389. {diffoscope-329 → diffoscope-331}/tests/data/macho_otool_expected_diff_indirect_symbols +0 -0
  390. {diffoscope-329 → diffoscope-331}/tests/data/macho_otool_expected_diff_libraries +0 -0
  391. {diffoscope-329 → diffoscope-331}/tests/data/macho_otool_expected_diff_strings +0 -0
  392. {diffoscope-329 → diffoscope-331}/tests/data/mo_charsets_expected_diff +0 -0
  393. {diffoscope-329 → diffoscope-331}/tests/data/mo_expected_diff +0 -0
  394. {diffoscope-329 → diffoscope-331}/tests/data/mozzip_zipinfo_expected_diff +0 -0
  395. {diffoscope-329 → diffoscope-331}/tests/data/mp3_expected_diff +0 -0
  396. {diffoscope-329 → diffoscope-331}/tests/data/no-perms.tar +0 -0
  397. {diffoscope-329 → diffoscope-331}/tests/data/nupkg_expected_diff +0 -0
  398. {diffoscope-329 → diffoscope-331}/tests/data/ocaml_expected_diff +0 -0
  399. {diffoscope-329 → diffoscope-331}/tests/data/odt_expected_diff +0 -0
  400. {diffoscope-329 → diffoscope-331}/tests/data/ogg_expected_diff +0 -0
  401. {diffoscope-329 → diffoscope-331}/tests/data/openssh_pub_key_expected_diff_12 +0 -0
  402. {diffoscope-329 → diffoscope-331}/tests/data/openssh_pub_key_expected_diff_23 +0 -0
  403. {diffoscope-329 → diffoscope-331}/tests/data/order1a.json +0 -0
  404. {diffoscope-329 → diffoscope-331}/tests/data/order1b.json +0 -0
  405. {diffoscope-329 → diffoscope-331}/tests/data/output.colored.txt +0 -0
  406. {diffoscope-329 → diffoscope-331}/tests/data/output.json +0 -0
  407. {diffoscope-329 → diffoscope-331}/tests/data/output.md +0 -0
  408. {diffoscope-329 → diffoscope-331}/tests/data/output.rst +0 -0
  409. {diffoscope-329 → diffoscope-331}/tests/data/output.txt +0 -0
  410. {diffoscope-329 → diffoscope-331}/tests/data/output_expected_363.html +0 -0
  411. {diffoscope-329 → diffoscope-331}/tests/data/output_expected_372.html +0 -0
  412. {diffoscope-329 → diffoscope-331}/tests/data/output_regression_875281.html +0 -0
  413. {diffoscope-329 → diffoscope-331}/tests/data/pcap_expected_diff +0 -0
  414. {diffoscope-329 → diffoscope-331}/tests/data/pdf_annotations_expected_diff +0 -0
  415. {diffoscope-329 → diffoscope-331}/tests/data/pdf_metadata_expected_diff +0 -0
  416. {diffoscope-329 → diffoscope-331}/tests/data/pdf_text_expected_diff +0 -0
  417. {diffoscope-329 → diffoscope-331}/tests/data/pe_expected_diff +0 -0
  418. {diffoscope-329 → diffoscope-331}/tests/data/pgp_expected_diff +0 -0
  419. {diffoscope-329 → diffoscope-331}/tests/data/pgp_signature_expected_diff +0 -0
  420. {diffoscope-329 → diffoscope-331}/tests/data/pgp_signed_expected_diff +0 -0
  421. {diffoscope-329 → diffoscope-331}/tests/data/png_expected_diff +0 -0
  422. {diffoscope-329 → diffoscope-331}/tests/data/ppu_expected_diff +0 -0
  423. {diffoscope-329 → diffoscope-331}/tests/data/procyon_class_expected_diff +0 -0
  424. {diffoscope-329 → diffoscope-331}/tests/data/ps_internal_expected_diff +0 -0
  425. {diffoscope-329 → diffoscope-331}/tests/data/ps_text_expected_diff +0 -0
  426. {diffoscope-329 → diffoscope-331}/tests/data/pyc_expected_diff +0 -0
  427. {diffoscope-329 → diffoscope-331}/tests/data/quine.gz +0 -0
  428. {diffoscope-329 → diffoscope-331}/tests/data/quine.zip +0 -0
  429. {diffoscope-329 → diffoscope-331}/tests/data/quine_a.deb +0 -0
  430. {diffoscope-329 → diffoscope-331}/tests/data/quine_b.deb +0 -0
  431. {diffoscope-329 → diffoscope-331}/tests/data/quine_deb_expected_diff +0 -0
  432. {diffoscope-329 → diffoscope-331}/tests/data/quine_expected_diff +0 -0
  433. {diffoscope-329 → diffoscope-331}/tests/data/rdb_expected_diff +0 -0
  434. {diffoscope-329 → diffoscope-331}/tests/data/rds_expected_diff +0 -0
  435. {diffoscope-329 → diffoscope-331}/tests/data/resources1.arsc +0 -0
  436. {diffoscope-329 → diffoscope-331}/tests/data/resources2.arsc +0 -0
  437. {diffoscope-329 → diffoscope-331}/tests/data/rlib_armap_expected_diff +0 -0
  438. {diffoscope-329 → diffoscope-331}/tests/data/rlib_elf_expected_diff +0 -0
  439. {diffoscope-329 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff +0 -0
  440. {diffoscope-329 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_10 +0 -0
  441. {diffoscope-329 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_15 +0 -0
  442. {diffoscope-329 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_16 +0 -0
  443. {diffoscope-329 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_21 +0 -0
  444. {diffoscope-329 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_22 +0 -0
  445. {diffoscope-329 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_5 +0 -0
  446. {diffoscope-329 → diffoscope-331}/tests/data/rlib_llvm_dis_expected_diff_7 +0 -0
  447. {diffoscope-329 → diffoscope-331}/tests/data/rpm_fallback_expected_diff +0 -0
  448. {diffoscope-329 → diffoscope-331}/tests/data/rpm_header_expected_diff +0 -0
  449. {diffoscope-329 → diffoscope-331}/tests/data/rpm_listing_expected_diff +0 -0
  450. {diffoscope-329 → diffoscope-331}/tests/data/salsa-issue-363.diff.json +0 -0
  451. {diffoscope-329 → diffoscope-331}/tests/data/salsa-issue-372.diff.json +0 -0
  452. {diffoscope-329 → diffoscope-331}/tests/data/sqlite3_expected_diff +0 -0
  453. {diffoscope-329 → diffoscope-331}/tests/data/squashfs_root_expected_diff +0 -0
  454. {diffoscope-329 → diffoscope-331}/tests/data/squashfs_superblock_expected_diff +0 -0
  455. {diffoscope-329 → diffoscope-331}/tests/data/symlink_expected_destination_diff +0 -0
  456. {diffoscope-329 → diffoscope-331}/tests/data/symlink_expected_diff +0 -0
  457. {diffoscope-329 → diffoscope-331}/tests/data/tar_listing_expected_diff +0 -0
  458. {diffoscope-329 → diffoscope-331}/tests/data/test1-le64.cache-4 +0 -0
  459. {diffoscope-329 → diffoscope-331}/tests/data/test1.a +0 -0
  460. {diffoscope-329 → diffoscope-331}/tests/data/test1.apk +0 -0
  461. {diffoscope-329 → diffoscope-331}/tests/data/test1.asar +0 -0
  462. {diffoscope-329 → diffoscope-331}/tests/data/test1.asc +0 -0
  463. {diffoscope-329 → diffoscope-331}/tests/data/test1.binwalk +0 -0
  464. {diffoscope-329 → diffoscope-331}/tests/data/test1.buildinfo +0 -0
  465. {diffoscope-329 → diffoscope-331}/tests/data/test1.bz2 +0 -0
  466. {diffoscope-329 → diffoscope-331}/tests/data/test1.changes +0 -0
  467. {diffoscope-329 → diffoscope-331}/tests/data/test1.cpio +0 -0
  468. {diffoscope-329 → diffoscope-331}/tests/data/test1.db +0 -0
  469. {diffoscope-329 → diffoscope-331}/tests/data/test1.deb +0 -0
  470. {diffoscope-329 → diffoscope-331}/tests/data/test1.debsrc.tar.gz +0 -0
  471. {diffoscope-329 → diffoscope-331}/tests/data/test1.debug +0 -0
  472. {diffoscope-329 → diffoscope-331}/tests/data/test1.dex +0 -0
  473. {diffoscope-329 → diffoscope-331}/tests/data/test1.disk.gz +0 -0
  474. {diffoscope-329 → diffoscope-331}/tests/data/test1.docx +0 -0
  475. {diffoscope-329 → diffoscope-331}/tests/data/test1.dsc +0 -0
  476. {diffoscope-329 → diffoscope-331}/tests/data/test1.epub +0 -0
  477. {diffoscope-329 → diffoscope-331}/tests/data/test1.exe +0 -0
  478. {diffoscope-329 → diffoscope-331}/tests/data/test1.ext4 +0 -0
  479. {diffoscope-329 → diffoscope-331}/tests/data/test1.fat12 +0 -0
  480. {diffoscope-329 → diffoscope-331}/tests/data/test1.fat16 +0 -0
  481. {diffoscope-329 → diffoscope-331}/tests/data/test1.fat32 +0 -0
  482. {diffoscope-329 → diffoscope-331}/tests/data/test1.gif +0 -0
  483. {diffoscope-329 → diffoscope-331}/tests/data/test1.git-index +0 -0
  484. {diffoscope-329 → diffoscope-331}/tests/data/test1.gnumeric +0 -0
  485. {diffoscope-329 → diffoscope-331}/tests/data/test1.gz +0 -0
  486. {diffoscope-329 → diffoscope-331}/tests/data/test1.hi +0 -0
  487. {diffoscope-329 → diffoscope-331}/tests/data/test1.html +0 -0
  488. {diffoscope-329 → diffoscope-331}/tests/data/test1.icc +0 -0
  489. {diffoscope-329 → diffoscope-331}/tests/data/test1.ico +0 -0
  490. {diffoscope-329 → diffoscope-331}/tests/data/test1.inv +0 -0
  491. {diffoscope-329 → diffoscope-331}/tests/data/test1.iso +0 -0
  492. {diffoscope-329 → diffoscope-331}/tests/data/test1.jmod +0 -0
  493. {diffoscope-329 → diffoscope-331}/tests/data/test1.jpg +0 -0
  494. {diffoscope-329 → diffoscope-331}/tests/data/test1.js +0 -0
  495. {diffoscope-329 → diffoscope-331}/tests/data/test1.json +0 -0
  496. {diffoscope-329 → diffoscope-331}/tests/data/test1.kbx +0 -0
  497. {diffoscope-329 → diffoscope-331}/tests/data/test1.lz4 +0 -0
  498. {diffoscope-329 → diffoscope-331}/tests/data/test1.lzip +0 -0
  499. {diffoscope-329 → diffoscope-331}/tests/data/test1.lzma +0 -0
  500. {diffoscope-329 → diffoscope-331}/tests/data/test1.macho +0 -0
  501. {diffoscope-329 → diffoscope-331}/tests/data/test1.mo +0 -0
  502. {diffoscope-329 → diffoscope-331}/tests/data/test1.mozzip +0 -0
  503. {diffoscope-329 → diffoscope-331}/tests/data/test1.mp3 +0 -0
  504. {diffoscope-329 → diffoscope-331}/tests/data/test1.nupkg +0 -0
  505. {diffoscope-329 → diffoscope-331}/tests/data/test1.o +0 -0
  506. {diffoscope-329 → diffoscope-331}/tests/data/test1.odt +0 -0
  507. {diffoscope-329 → diffoscope-331}/tests/data/test1.ogg +0 -0
  508. {diffoscope-329 → diffoscope-331}/tests/data/test1.pcap +0 -0
  509. {diffoscope-329 → diffoscope-331}/tests/data/test1.pdf +0 -0
  510. {diffoscope-329 → diffoscope-331}/tests/data/test1.pgp +0 -0
  511. {diffoscope-329 → diffoscope-331}/tests/data/test1.png +0 -0
  512. {diffoscope-329 → diffoscope-331}/tests/data/test1.ppu +0 -0
  513. {diffoscope-329 → diffoscope-331}/tests/data/test1.ps +0 -0
  514. {diffoscope-329 → diffoscope-331}/tests/data/test1.pyc-renamed +0 -0
  515. {diffoscope-329 → diffoscope-331}/tests/data/test1.rdb +0 -0
  516. {diffoscope-329 → diffoscope-331}/tests/data/test1.rdx +0 -0
  517. {diffoscope-329 → diffoscope-331}/tests/data/test1.rlib +0 -0
  518. {diffoscope-329 → diffoscope-331}/tests/data/test1.rpm +0 -0
  519. {diffoscope-329 → diffoscope-331}/tests/data/test1.sqlite3 +0 -0
  520. {diffoscope-329 → diffoscope-331}/tests/data/test1.squashfs +0 -0
  521. {diffoscope-329 → diffoscope-331}/tests/data/test1.tar +0 -0
  522. {diffoscope-329 → diffoscope-331}/tests/data/test1.xml +0 -0
  523. {diffoscope-329 → diffoscope-331}/tests/data/test1.xsb +0 -0
  524. {diffoscope-329 → diffoscope-331}/tests/data/test1.xz +0 -0
  525. {diffoscope-329 → diffoscope-331}/tests/data/test1.zip +0 -0
  526. {diffoscope-329 → diffoscope-331}/tests/data/test1_meta.ico +0 -0
  527. {diffoscope-329 → diffoscope-331}/tests/data/test1_meta.jpg +0 -0
  528. {diffoscope-329 → diffoscope-331}/tests/data/test1_root.squashfs +0 -0
  529. {diffoscope-329 → diffoscope-331}/tests/data/test1_signed.pgp +0 -0
  530. {diffoscope-329 → diffoscope-331}/tests/data/test2-le64.cache-4 +0 -0
  531. {diffoscope-329 → diffoscope-331}/tests/data/test2.a +0 -0
  532. {diffoscope-329 → diffoscope-331}/tests/data/test2.apk +0 -0
  533. {diffoscope-329 → diffoscope-331}/tests/data/test2.asar +0 -0
  534. {diffoscope-329 → diffoscope-331}/tests/data/test2.asc +0 -0
  535. {diffoscope-329 → diffoscope-331}/tests/data/test2.binwalk +0 -0
  536. {diffoscope-329 → diffoscope-331}/tests/data/test2.buildinfo +0 -0
  537. {diffoscope-329 → diffoscope-331}/tests/data/test2.bz2 +0 -0
  538. {diffoscope-329 → diffoscope-331}/tests/data/test2.changes +0 -0
  539. {diffoscope-329 → diffoscope-331}/tests/data/test2.cpio +0 -0
  540. {diffoscope-329 → diffoscope-331}/tests/data/test2.db +0 -0
  541. {diffoscope-329 → diffoscope-331}/tests/data/test2.deb +0 -0
  542. {diffoscope-329 → diffoscope-331}/tests/data/test2.debsrc.tar.gz +0 -0
  543. {diffoscope-329 → diffoscope-331}/tests/data/test2.debug +0 -0
  544. {diffoscope-329 → diffoscope-331}/tests/data/test2.dex +0 -0
  545. {diffoscope-329 → diffoscope-331}/tests/data/test2.disk.gz +0 -0
  546. {diffoscope-329 → diffoscope-331}/tests/data/test2.docx +0 -0
  547. {diffoscope-329 → diffoscope-331}/tests/data/test2.dsc +0 -0
  548. {diffoscope-329 → diffoscope-331}/tests/data/test2.epub +0 -0
  549. {diffoscope-329 → diffoscope-331}/tests/data/test2.exe +0 -0
  550. {diffoscope-329 → diffoscope-331}/tests/data/test2.ext4 +0 -0
  551. {diffoscope-329 → diffoscope-331}/tests/data/test2.fat12 +0 -0
  552. {diffoscope-329 → diffoscope-331}/tests/data/test2.gif +0 -0
  553. {diffoscope-329 → diffoscope-331}/tests/data/test2.git-index +0 -0
  554. {diffoscope-329 → diffoscope-331}/tests/data/test2.gnumeric +0 -0
  555. {diffoscope-329 → diffoscope-331}/tests/data/test2.gz +0 -0
  556. {diffoscope-329 → diffoscope-331}/tests/data/test2.hi +0 -0
  557. {diffoscope-329 → diffoscope-331}/tests/data/test2.html +0 -0
  558. {diffoscope-329 → diffoscope-331}/tests/data/test2.icc +0 -0
  559. {diffoscope-329 → diffoscope-331}/tests/data/test2.ico +0 -0
  560. {diffoscope-329 → diffoscope-331}/tests/data/test2.inv +0 -0
  561. {diffoscope-329 → diffoscope-331}/tests/data/test2.iso +0 -0
  562. {diffoscope-329 → diffoscope-331}/tests/data/test2.jmod +0 -0
  563. {diffoscope-329 → diffoscope-331}/tests/data/test2.jpg +0 -0
  564. {diffoscope-329 → diffoscope-331}/tests/data/test2.js +0 -0
  565. {diffoscope-329 → diffoscope-331}/tests/data/test2.json +0 -0
  566. {diffoscope-329 → diffoscope-331}/tests/data/test2.kbx +0 -0
  567. {diffoscope-329 → diffoscope-331}/tests/data/test2.lz4 +0 -0
  568. {diffoscope-329 → diffoscope-331}/tests/data/test2.lzip +0 -0
  569. {diffoscope-329 → diffoscope-331}/tests/data/test2.lzma +0 -0
  570. {diffoscope-329 → diffoscope-331}/tests/data/test2.macho +0 -0
  571. {diffoscope-329 → diffoscope-331}/tests/data/test2.mo +0 -0
  572. {diffoscope-329 → diffoscope-331}/tests/data/test2.mozzip +0 -0
  573. {diffoscope-329 → diffoscope-331}/tests/data/test2.mp3 +0 -0
  574. {diffoscope-329 → diffoscope-331}/tests/data/test2.nupkg +0 -0
  575. {diffoscope-329 → diffoscope-331}/tests/data/test2.o +0 -0
  576. {diffoscope-329 → diffoscope-331}/tests/data/test2.odt +0 -0
  577. {diffoscope-329 → diffoscope-331}/tests/data/test2.ogg +0 -0
  578. {diffoscope-329 → diffoscope-331}/tests/data/test2.pcap +0 -0
  579. {diffoscope-329 → diffoscope-331}/tests/data/test2.pdf +0 -0
  580. {diffoscope-329 → diffoscope-331}/tests/data/test2.pgp +0 -0
  581. {diffoscope-329 → diffoscope-331}/tests/data/test2.png +0 -0
  582. {diffoscope-329 → diffoscope-331}/tests/data/test2.ppu +0 -0
  583. {diffoscope-329 → diffoscope-331}/tests/data/test2.ps +0 -0
  584. {diffoscope-329 → diffoscope-331}/tests/data/test2.pyc-renamed +0 -0
  585. {diffoscope-329 → diffoscope-331}/tests/data/test2.rdb +0 -0
  586. {diffoscope-329 → diffoscope-331}/tests/data/test2.rdx +0 -0
  587. {diffoscope-329 → diffoscope-331}/tests/data/test2.rlib +0 -0
  588. {diffoscope-329 → diffoscope-331}/tests/data/test2.rpm +0 -0
  589. {diffoscope-329 → diffoscope-331}/tests/data/test2.sqlite3 +0 -0
  590. {diffoscope-329 → diffoscope-331}/tests/data/test2.squashfs +0 -0
  591. {diffoscope-329 → diffoscope-331}/tests/data/test2.tar +0 -0
  592. {diffoscope-329 → diffoscope-331}/tests/data/test2.xml +0 -0
  593. {diffoscope-329 → diffoscope-331}/tests/data/test2.xsb +0 -0
  594. {diffoscope-329 → diffoscope-331}/tests/data/test2.xz +0 -0
  595. {diffoscope-329 → diffoscope-331}/tests/data/test2.zip +0 -0
  596. {diffoscope-329 → diffoscope-331}/tests/data/test2_meta.ico +0 -0
  597. {diffoscope-329 → diffoscope-331}/tests/data/test2_meta.jpg +0 -0
  598. {diffoscope-329 → diffoscope-331}/tests/data/test2_root.squashfs +0 -0
  599. {diffoscope-329 → diffoscope-331}/tests/data/test2_signed.pgp +0 -0
  600. {diffoscope-329 → diffoscope-331}/tests/data/test3.apk +0 -0
  601. {diffoscope-329 → diffoscope-331}/tests/data/test3.changes +0 -0
  602. {diffoscope-329 → diffoscope-331}/tests/data/test3.gif +0 -0
  603. {diffoscope-329 → diffoscope-331}/tests/data/test3.pdf +0 -0
  604. {diffoscope-329 → diffoscope-331}/tests/data/test3.xml +0 -0
  605. {diffoscope-329 → diffoscope-331}/tests/data/test3.xz +0 -0
  606. {diffoscope-329 → diffoscope-331}/tests/data/test3.zip +0 -0
  607. {diffoscope-329 → diffoscope-331}/tests/data/test4.changes +0 -0
  608. {diffoscope-329 → diffoscope-331}/tests/data/test4.gif +0 -0
  609. {diffoscope-329 → diffoscope-331}/tests/data/test4.pdf +0 -0
  610. {diffoscope-329 → diffoscope-331}/tests/data/test4.xml +0 -0
  611. {diffoscope-329 → diffoscope-331}/tests/data/test4.xz +0 -0
  612. {diffoscope-329 → diffoscope-331}/tests/data/test5.changes +0 -0
  613. {diffoscope-329 → diffoscope-331}/tests/data/test_comment1.zip +0 -0
  614. {diffoscope-329 → diffoscope-331}/tests/data/test_comment2.zip +0 -0
  615. {diffoscope-329 → diffoscope-331}/tests/data/test_directory_a_b_diff +0 -0
  616. {diffoscope-329 → diffoscope-331}/tests/data/test_directory_b_a_diff +0 -0
  617. {diffoscope-329 → diffoscope-331}/tests/data/test_directory_device_diff +0 -0
  618. {diffoscope-329 → diffoscope-331}/tests/data/test_directory_file_diff +0 -0
  619. {diffoscope-329 → diffoscope-331}/tests/data/test_directory_symlink_diff +0 -0
  620. {diffoscope-329 → diffoscope-331}/tests/data/test_invalid.json +0 -0
  621. {diffoscope-329 → diffoscope-331}/tests/data/test_invalid.xml +0 -0
  622. {diffoscope-329 → diffoscope-331}/tests/data/test_iso8859-1.mo +0 -0
  623. {diffoscope-329 → diffoscope-331}/tests/data/test_no_charset.mo +0 -0
  624. {diffoscope-329 → diffoscope-331}/tests/data/test_openssh_pub_key1.pub +0 -0
  625. {diffoscope-329 → diffoscope-331}/tests/data/test_openssh_pub_key2.pub +0 -0
  626. {diffoscope-329 → diffoscope-331}/tests/data/test_openssh_pub_key3.pub +0 -0
  627. {diffoscope-329 → diffoscope-331}/tests/data/test_weird_non_unicode_chars1.pdf +0 -0
  628. {diffoscope-329 → diffoscope-331}/tests/data/test_weird_non_unicode_chars2.pdf +0 -0
  629. {diffoscope-329 → diffoscope-331}/tests/data/test_xml_expected_diff +0 -0
  630. {diffoscope-329 → diffoscope-331}/tests/data/test_xml_ordering_differences_diff +0 -0
  631. {diffoscope-329 → diffoscope-331}/tests/data/text_ascii1 +0 -0
  632. {diffoscope-329 → diffoscope-331}/tests/data/text_ascii2 +0 -0
  633. {diffoscope-329 → diffoscope-331}/tests/data/text_ascii_expected_diff +0 -0
  634. {diffoscope-329 → diffoscope-331}/tests/data/text_endings1 +0 -0
  635. {diffoscope-329 → diffoscope-331}/tests/data/text_endings2 +0 -0
  636. {diffoscope-329 → diffoscope-331}/tests/data/text_endings_expected_diff +0 -0
  637. {diffoscope-329 → diffoscope-331}/tests/data/text_iso8859 +0 -0
  638. {diffoscope-329 → diffoscope-331}/tests/data/text_iso8859_expected_diff +0 -0
  639. {diffoscope-329 → diffoscope-331}/tests/data/text_order1 +0 -0
  640. {diffoscope-329 → diffoscope-331}/tests/data/text_order2 +0 -0
  641. {diffoscope-329 → diffoscope-331}/tests/data/text_order_expected_diff +0 -0
  642. {diffoscope-329 → diffoscope-331}/tests/data/text_sevenzmetadata_expected_diff +0 -0
  643. {diffoscope-329 → diffoscope-331}/tests/data/text_unicode1 +0 -0
  644. {diffoscope-329 → diffoscope-331}/tests/data/text_unicode2 +0 -0
  645. {diffoscope-329 → diffoscope-331}/tests/data/text_unicode_binary_fallback +0 -0
  646. {diffoscope-329 → diffoscope-331}/tests/data/text_unicode_expected_diff +0 -0
  647. {diffoscope-329 → diffoscope-331}/tests/data/text_xz_list +0 -0
  648. {diffoscope-329 → diffoscope-331}/tests/data/ttf_expected_diff +0 -0
  649. {diffoscope-329 → diffoscope-331}/tests/data/ttf_ttx_expected_diff +0 -0
  650. {diffoscope-329 → diffoscope-331}/tests/data/uimage_expected_diff +0 -0
  651. {diffoscope-329 → diffoscope-331}/tests/data/uimage_expected_diff_pre_5_41 +0 -0
  652. {diffoscope-329 → diffoscope-331}/tests/data/uki_expected_diff +0 -0
  653. {diffoscope-329 → diffoscope-331}/tests/data/wasm_expected_diff +0 -0
  654. {diffoscope-329 → diffoscope-331}/tests/data/xsb_expected_diff +0 -0
  655. {diffoscope-329 → diffoscope-331}/tests/data/zip2_zipdetails_expected_diff +0 -0
  656. {diffoscope-329 → diffoscope-331}/tests/data/zip_bsdtar_expected_diff +0 -0
  657. {diffoscope-329 → diffoscope-331}/tests/data/zip_zipdetails_expected_diff +0 -0
  658. {diffoscope-329 → diffoscope-331}/tests/data/zip_zipinfo_expected_diff +0 -0
  659. {diffoscope-329 → diffoscope-331}/tests/test_diff_mask.py +0 -0
  660. {diffoscope-329 → diffoscope-331}/tests/test_difference.py +0 -0
  661. {diffoscope-329 → diffoscope-331}/tests/test_excludes.py +0 -0
  662. {diffoscope-329 → diffoscope-331}/tests/test_main.py +0 -0
  663. {diffoscope-329 → diffoscope-331}/tests/test_presenters.py +0 -0
  664. {diffoscope-329 → diffoscope-331}/tests/test_progress.py +0 -0
  665. {diffoscope-329 → diffoscope-331}/tests/test_quines.py +0 -0
  666. {diffoscope-329 → diffoscope-331}/tests/test_readers.py +0 -0
  667. {diffoscope-329 → diffoscope-331}/tests/test_source.py +0 -0
  668. {diffoscope-329 → diffoscope-331}/tests/test_tools.py +0 -0
  669. {diffoscope-329 → diffoscope-331}/tests/test_versions.py +0 -0
  670. {diffoscope-329 → diffoscope-331}/tests/utils/__init__.py +0 -0
  671. {diffoscope-329 → diffoscope-331}/tests/utils/data.py +0 -0
  672. {diffoscope-329 → diffoscope-331}/tests/utils/nonexisting.py +0 -0
  673. {diffoscope-329 → diffoscope-331}/tests/utils/tools.py +0 -0
  674. {diffoscope-329 → diffoscope-331}/tests/utils/versions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffoscope
3
- Version: 329
3
+ Version: 331
4
4
  Summary: in-depth comparison of files, archives, and directories
5
5
  Home-page: https://diffoscope.org/
6
6
  Author: Diffoscope developers
@@ -17,4 +17,4 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with diffoscope. If not, see <https://www.gnu.org/licenses/>.
19
19
 
20
- VERSION = "329"
20
+ VERSION = "331"
@@ -58,6 +58,7 @@ class ComparatorManager:
58
58
  ("bzip2.Bzip2File",),
59
59
  ("cpio.CpioFile",),
60
60
  ("deb.DebFile",),
61
+ ("nar.NarFile",),
61
62
  ("hdf.Hdf5File",),
62
63
  ("dex.DexFile",),
63
64
  ("elf.ElfFile",),
@@ -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
- return self.data_dict["offset"]
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)))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffoscope
3
- Version: 329
3
+ Version: 331
4
4
  Summary: in-depth comparison of files, archives, and directories
5
5
  Home-page: https://diffoscope.org/
6
6
  Author: Diffoscope developers
@@ -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
+ }
@@ -0,0 +1,6 @@
1
+ @@ -1,4 +1,4 @@
2
+ directory .
3
+ directory dir
4
+ -symlink dir/link -> broken
5
+ +symlink dir/link -> really-broken
6
+ regular dir/text
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