diffoscope 331__tar.gz → 336__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 (680) hide show
  1. {diffoscope-331/diffoscope.egg-info → diffoscope-336}/PKG-INFO +2 -5
  2. {diffoscope-331 → diffoscope-336}/diffoscope/__init__.py +1 -1
  3. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/apk.py +7 -1
  4. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/nar.py +1 -1
  5. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/pdf.py +4 -3
  6. diffoscope-336/diffoscope/comparators/tar.py +232 -0
  7. {diffoscope-331 → diffoscope-336/diffoscope.egg-info}/PKG-INFO +2 -5
  8. {diffoscope-331 → diffoscope-336}/diffoscope.egg-info/SOURCES.txt +3 -0
  9. {diffoscope-331 → diffoscope-336}/setup.py +3 -6
  10. {diffoscope-331 → diffoscope-336}/tests/comparators/test_nar.py +1 -1
  11. diffoscope-336/tests/comparators/test_tar.py +275 -0
  12. {diffoscope-331 → diffoscope-336}/tests/data/elf_obj_radare2_expected_diff +1 -0
  13. diffoscope-336/tests/data/macho_obj_radare2_expected_diff_main +9 -0
  14. diffoscope-336/tests/data/macho_obj_radare2_expected_diff_printf +22 -0
  15. diffoscope-336/tests/data/tar_acl_diff +9 -0
  16. diffoscope-336/tests/data/tar_atime_diff +5 -0
  17. diffoscope-336/tests/data/tar_translator_diff +0 -0
  18. diffoscope-331/diffoscope/comparators/tar.py +0 -46
  19. diffoscope-331/tests/comparators/test_tar.py +0 -81
  20. diffoscope-331/tests/data/macho_obj_radare2_expected_diff_main +0 -33
  21. diffoscope-331/tests/data/macho_obj_radare2_expected_diff_printf +0 -12
  22. {diffoscope-331 → diffoscope-336}/CONTRIBUTING.md +0 -0
  23. {diffoscope-331 → diffoscope-336}/COPYING +0 -0
  24. {diffoscope-331 → diffoscope-336}/MANIFEST.in +0 -0
  25. {diffoscope-331 → diffoscope-336}/README.rst +0 -0
  26. {diffoscope-331 → diffoscope-336}/diffoscope/changes.py +0 -0
  27. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/__init__.py +0 -0
  28. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/android.py +0 -0
  29. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/ar.py +0 -0
  30. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/arsc.py +0 -0
  31. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/asar.py +0 -0
  32. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/berkeley_db.py +0 -0
  33. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/binary.py +0 -0
  34. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/binwalk.py +0 -0
  35. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/bzip2.py +0 -0
  36. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/cbfs.py +0 -0
  37. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/cpio.py +0 -0
  38. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/deb.py +0 -0
  39. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/debian.py +0 -0
  40. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/debian_fallback.py +0 -0
  41. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/decompile.py +0 -0
  42. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/device.py +0 -0
  43. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/dex.py +0 -0
  44. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/directory.py +0 -0
  45. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/docx.py +0 -0
  46. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/dtb.py +0 -0
  47. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/elf.py +0 -0
  48. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/ffprobe.py +0 -0
  49. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/fit.py +0 -0
  50. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/fontconfig.py +0 -0
  51. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/fonts.py +0 -0
  52. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/fsimage.py +0 -0
  53. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/gettext.py +0 -0
  54. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/gif.py +0 -0
  55. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/git.py +0 -0
  56. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/gnumeric.py +0 -0
  57. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/gzip.py +0 -0
  58. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/haskell.py +0 -0
  59. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/hdf.py +0 -0
  60. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/html.py +0 -0
  61. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/icc.py +0 -0
  62. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/image.py +0 -0
  63. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/ipk.py +0 -0
  64. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/iso9660.py +0 -0
  65. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/java.py +0 -0
  66. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/javascript.py +0 -0
  67. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/json.py +0 -0
  68. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/kbx.py +0 -0
  69. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/llvm.py +0 -0
  70. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/lz4.py +0 -0
  71. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/lzip.py +0 -0
  72. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/lzma.py +0 -0
  73. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/macho.py +0 -0
  74. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/missing_file.py +0 -0
  75. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/mono.py +0 -0
  76. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/ocaml.py +0 -0
  77. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/odt.py +0 -0
  78. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/ogg.py +0 -0
  79. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/openssh.py +0 -0
  80. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/openssl.py +0 -0
  81. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/pcap.py +0 -0
  82. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/pe32.py +0 -0
  83. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/pgp.py +0 -0
  84. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/png.py +0 -0
  85. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/ppu.py +0 -0
  86. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/ps.py +0 -0
  87. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/python.py +0 -0
  88. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/rdata.py +0 -0
  89. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/rpm.py +0 -0
  90. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/rpm_fallback.py +0 -0
  91. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/rust.py +0 -0
  92. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/sevenz.py +0 -0
  93. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/socket_or_fifo.py +0 -0
  94. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/sphinx.py +0 -0
  95. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/sqlite.py +0 -0
  96. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/squashfs.py +0 -0
  97. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/symlink.py +0 -0
  98. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/text.py +0 -0
  99. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/uimage.py +0 -0
  100. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/uki.py +0 -0
  101. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/__init__.py +0 -0
  102. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/archive.py +0 -0
  103. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/command.py +0 -0
  104. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/compare.py +0 -0
  105. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/container.py +0 -0
  106. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/file.py +0 -0
  107. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/fuzzy.py +0 -0
  108. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/libarchive.py +0 -0
  109. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/operation.py +0 -0
  110. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/utils/specialize.py +0 -0
  111. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/vmlinuz.py +0 -0
  112. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/wasm.py +0 -0
  113. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/xar.py +0 -0
  114. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/xml.py +0 -0
  115. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/xmlb.py +0 -0
  116. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/xsb.py +0 -0
  117. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/xz.py +0 -0
  118. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/zip.py +0 -0
  119. {diffoscope-331 → diffoscope-336}/diffoscope/comparators/zst.py +0 -0
  120. {diffoscope-331 → diffoscope-336}/diffoscope/config.py +0 -0
  121. {diffoscope-331 → diffoscope-336}/diffoscope/diff.py +0 -0
  122. {diffoscope-331 → diffoscope-336}/diffoscope/difference.py +0 -0
  123. {diffoscope-331 → diffoscope-336}/diffoscope/environ.py +0 -0
  124. {diffoscope-331 → diffoscope-336}/diffoscope/exc.py +0 -0
  125. {diffoscope-331 → diffoscope-336}/diffoscope/excludes.py +0 -0
  126. {diffoscope-331 → diffoscope-336}/diffoscope/external_tools.py +0 -0
  127. {diffoscope-331 → diffoscope-336}/diffoscope/feeders.py +0 -0
  128. {diffoscope-331 → diffoscope-336}/diffoscope/logging.py +0 -0
  129. {diffoscope-331 → diffoscope-336}/diffoscope/main.py +0 -0
  130. {diffoscope-331 → diffoscope-336}/diffoscope/path.py +0 -0
  131. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/__init__.py +0 -0
  132. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/formats.py +0 -0
  133. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/html/__init__.py +0 -0
  134. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/html/html.py +0 -0
  135. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/html/templates.py +0 -0
  136. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/icon.py +0 -0
  137. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/json.py +0 -0
  138. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/markdown.py +0 -0
  139. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/restructuredtext.py +0 -0
  140. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/text.py +0 -0
  141. {diffoscope-331 → diffoscope-336}/diffoscope/presenters/utils.py +0 -0
  142. {diffoscope-331 → diffoscope-336}/diffoscope/profiling.py +0 -0
  143. {diffoscope-331 → diffoscope-336}/diffoscope/progress.py +0 -0
  144. {diffoscope-331 → diffoscope-336}/diffoscope/readers/__init__.py +0 -0
  145. {diffoscope-331 → diffoscope-336}/diffoscope/readers/json.py +0 -0
  146. {diffoscope-331 → diffoscope-336}/diffoscope/readers/utils.py +0 -0
  147. {diffoscope-331 → diffoscope-336}/diffoscope/scripts/extract-vmlinux +0 -0
  148. {diffoscope-331 → diffoscope-336}/diffoscope/scripts/restore-nar.scm +0 -0
  149. {diffoscope-331 → diffoscope-336}/diffoscope/tempfiles.py +0 -0
  150. {diffoscope-331 → diffoscope-336}/diffoscope/tools.py +0 -0
  151. {diffoscope-331 → diffoscope-336}/diffoscope/utils.py +0 -0
  152. {diffoscope-331 → diffoscope-336}/diffoscope.egg-info/dependency_links.txt +0 -0
  153. {diffoscope-331 → diffoscope-336}/diffoscope.egg-info/entry_points.txt +0 -0
  154. {diffoscope-331 → diffoscope-336}/diffoscope.egg-info/requires.txt +0 -0
  155. {diffoscope-331 → diffoscope-336}/diffoscope.egg-info/top_level.txt +0 -0
  156. {diffoscope-331 → diffoscope-336}/extras_require.json +0 -0
  157. {diffoscope-331 → diffoscope-336}/pyproject.toml +0 -0
  158. {diffoscope-331 → diffoscope-336}/setup.cfg +0 -0
  159. {diffoscope-331 → diffoscope-336}/tests/__init__.py +0 -0
  160. {diffoscope-331 → diffoscope-336}/tests/comparators/__init__.py +0 -0
  161. {diffoscope-331 → diffoscope-336}/tests/comparators/test_android.py +0 -0
  162. {diffoscope-331 → diffoscope-336}/tests/comparators/test_apk.py +0 -0
  163. {diffoscope-331 → diffoscope-336}/tests/comparators/test_archive.py +0 -0
  164. {diffoscope-331 → diffoscope-336}/tests/comparators/test_arsc.py +0 -0
  165. {diffoscope-331 → diffoscope-336}/tests/comparators/test_asar.py +0 -0
  166. {diffoscope-331 → diffoscope-336}/tests/comparators/test_berkeley_db.py +0 -0
  167. {diffoscope-331 → diffoscope-336}/tests/comparators/test_binary.py +0 -0
  168. {diffoscope-331 → diffoscope-336}/tests/comparators/test_binwalk.py +0 -0
  169. {diffoscope-331 → diffoscope-336}/tests/comparators/test_bzip2.py +0 -0
  170. {diffoscope-331 → diffoscope-336}/tests/comparators/test_cbfs.py +0 -0
  171. {diffoscope-331 → diffoscope-336}/tests/comparators/test_containers.py +0 -0
  172. {diffoscope-331 → diffoscope-336}/tests/comparators/test_cpio.py +0 -0
  173. {diffoscope-331 → diffoscope-336}/tests/comparators/test_deb.py +0 -0
  174. {diffoscope-331 → diffoscope-336}/tests/comparators/test_debian.py +0 -0
  175. {diffoscope-331 → diffoscope-336}/tests/comparators/test_device.py +0 -0
  176. {diffoscope-331 → diffoscope-336}/tests/comparators/test_dex.py +0 -0
  177. {diffoscope-331 → diffoscope-336}/tests/comparators/test_directory.py +0 -0
  178. {diffoscope-331 → diffoscope-336}/tests/comparators/test_docx.py +0 -0
  179. {diffoscope-331 → diffoscope-336}/tests/comparators/test_dtb.py +0 -0
  180. {diffoscope-331 → diffoscope-336}/tests/comparators/test_elf.py +0 -0
  181. {diffoscope-331 → diffoscope-336}/tests/comparators/test_elf_decompiler.py +0 -0
  182. {diffoscope-331 → diffoscope-336}/tests/comparators/test_epub.py +0 -0
  183. {diffoscope-331 → diffoscope-336}/tests/comparators/test_ffprobe.py +0 -0
  184. {diffoscope-331 → diffoscope-336}/tests/comparators/test_fit.py +0 -0
  185. {diffoscope-331 → diffoscope-336}/tests/comparators/test_fontconfig.py +0 -0
  186. {diffoscope-331 → diffoscope-336}/tests/comparators/test_fonts.py +0 -0
  187. {diffoscope-331 → diffoscope-336}/tests/comparators/test_fsimage.py +0 -0
  188. {diffoscope-331 → diffoscope-336}/tests/comparators/test_gettext.py +0 -0
  189. {diffoscope-331 → diffoscope-336}/tests/comparators/test_gif.py +0 -0
  190. {diffoscope-331 → diffoscope-336}/tests/comparators/test_git.py +0 -0
  191. {diffoscope-331 → diffoscope-336}/tests/comparators/test_gnumeric.py +0 -0
  192. {diffoscope-331 → diffoscope-336}/tests/comparators/test_gzip.py +0 -0
  193. {diffoscope-331 → diffoscope-336}/tests/comparators/test_haskell.py +0 -0
  194. {diffoscope-331 → diffoscope-336}/tests/comparators/test_hdf.py +0 -0
  195. {diffoscope-331 → diffoscope-336}/tests/comparators/test_html.py +0 -0
  196. {diffoscope-331 → diffoscope-336}/tests/comparators/test_icc.py +0 -0
  197. {diffoscope-331 → diffoscope-336}/tests/comparators/test_ico_image.py +0 -0
  198. {diffoscope-331 → diffoscope-336}/tests/comparators/test_ipk.py +0 -0
  199. {diffoscope-331 → diffoscope-336}/tests/comparators/test_iso9660.py +0 -0
  200. {diffoscope-331 → diffoscope-336}/tests/comparators/test_java.py +0 -0
  201. {diffoscope-331 → diffoscope-336}/tests/comparators/test_javascript.py +0 -0
  202. {diffoscope-331 → diffoscope-336}/tests/comparators/test_jpeg_image.py +0 -0
  203. {diffoscope-331 → diffoscope-336}/tests/comparators/test_json.py +0 -0
  204. {diffoscope-331 → diffoscope-336}/tests/comparators/test_kbx.py +0 -0
  205. {diffoscope-331 → diffoscope-336}/tests/comparators/test_lz4.py +0 -0
  206. {diffoscope-331 → diffoscope-336}/tests/comparators/test_lzip.py +0 -0
  207. {diffoscope-331 → diffoscope-336}/tests/comparators/test_lzma.py +0 -0
  208. {diffoscope-331 → diffoscope-336}/tests/comparators/test_macho.py +0 -0
  209. {diffoscope-331 → diffoscope-336}/tests/comparators/test_macho_decompiler.py +0 -0
  210. {diffoscope-331 → diffoscope-336}/tests/comparators/test_mono.py +0 -0
  211. {diffoscope-331 → diffoscope-336}/tests/comparators/test_ocaml.py +0 -0
  212. {diffoscope-331 → diffoscope-336}/tests/comparators/test_odt.py +0 -0
  213. {diffoscope-331 → diffoscope-336}/tests/comparators/test_ogg.py +0 -0
  214. {diffoscope-331 → diffoscope-336}/tests/comparators/test_openssh_pub_key.py +0 -0
  215. {diffoscope-331 → diffoscope-336}/tests/comparators/test_openssl.py +0 -0
  216. {diffoscope-331 → diffoscope-336}/tests/comparators/test_pcap.py +0 -0
  217. {diffoscope-331 → diffoscope-336}/tests/comparators/test_pdf.py +0 -0
  218. {diffoscope-331 → diffoscope-336}/tests/comparators/test_pgp.py +0 -0
  219. {diffoscope-331 → diffoscope-336}/tests/comparators/test_png.py +0 -0
  220. {diffoscope-331 → diffoscope-336}/tests/comparators/test_ppu.py +0 -0
  221. {diffoscope-331 → diffoscope-336}/tests/comparators/test_ps.py +0 -0
  222. {diffoscope-331 → diffoscope-336}/tests/comparators/test_python.py +0 -0
  223. {diffoscope-331 → diffoscope-336}/tests/comparators/test_rdata.py +0 -0
  224. {diffoscope-331 → diffoscope-336}/tests/comparators/test_rlib.py +0 -0
  225. {diffoscope-331 → diffoscope-336}/tests/comparators/test_rpm.py +0 -0
  226. {diffoscope-331 → diffoscope-336}/tests/comparators/test_sevenz.py +0 -0
  227. {diffoscope-331 → diffoscope-336}/tests/comparators/test_sockets.py +0 -0
  228. {diffoscope-331 → diffoscope-336}/tests/comparators/test_sphinx.py +0 -0
  229. {diffoscope-331 → diffoscope-336}/tests/comparators/test_sqlite.py +0 -0
  230. {diffoscope-331 → diffoscope-336}/tests/comparators/test_squashfs.py +0 -0
  231. {diffoscope-331 → diffoscope-336}/tests/comparators/test_symlink.py +0 -0
  232. {diffoscope-331 → diffoscope-336}/tests/comparators/test_text.py +0 -0
  233. {diffoscope-331 → diffoscope-336}/tests/comparators/test_uimage.py +0 -0
  234. {diffoscope-331 → diffoscope-336}/tests/comparators/test_uki.py +0 -0
  235. {diffoscope-331 → diffoscope-336}/tests/comparators/test_utils.py +0 -0
  236. {diffoscope-331 → diffoscope-336}/tests/comparators/test_wasm.py +0 -0
  237. {diffoscope-331 → diffoscope-336}/tests/comparators/test_xml.py +0 -0
  238. {diffoscope-331 → diffoscope-336}/tests/comparators/test_xsb.py +0 -0
  239. {diffoscope-331 → diffoscope-336}/tests/comparators/test_xz.py +0 -0
  240. {diffoscope-331 → diffoscope-336}/tests/comparators/test_zip.py +0 -0
  241. {diffoscope-331 → diffoscope-336}/tests/comparators/test_zst.py +0 -0
  242. {diffoscope-331 → diffoscope-336}/tests/conftest.py +0 -0
  243. {diffoscope-331 → diffoscope-336}/tests/data/Samyak-Malayalam1.ttf +0 -0
  244. {diffoscope-331 → diffoscope-336}/tests/data/Samyak-Malayalam2.ttf +0 -0
  245. {diffoscope-331 → diffoscope-336}/tests/data/Test1.class +0 -0
  246. {diffoscope-331 → diffoscope-336}/tests/data/Test2.class +0 -0
  247. {diffoscope-331 → diffoscope-336}/tests/data/android1.img +0 -0
  248. {diffoscope-331 → diffoscope-336}/tests/data/android2.img +0 -0
  249. {diffoscope-331 → diffoscope-336}/tests/data/android_expected_diff +0 -0
  250. {diffoscope-331 → diffoscope-336}/tests/data/apk_manifest_expected_diff +0 -0
  251. {diffoscope-331 → diffoscope-336}/tests/data/apk_zipinfo_expected_diff +0 -0
  252. {diffoscope-331 → diffoscope-336}/tests/data/archive1.tar +0 -0
  253. {diffoscope-331 → diffoscope-336}/tests/data/archive12.diff.txt +0 -0
  254. {diffoscope-331 → diffoscope-336}/tests/data/archive2.tar +0 -0
  255. {diffoscope-331 → diffoscope-336}/tests/data/arsc_expected_diff +0 -0
  256. {diffoscope-331 → diffoscope-336}/tests/data/base-files_157-r45695_ar71xx.ipk +0 -0
  257. {diffoscope-331 → diffoscope-336}/tests/data/base-files_157-r45918_ar71xx.ipk +0 -0
  258. {diffoscope-331 → diffoscope-336}/tests/data/berkeley6_db_expected_diff +0 -0
  259. {diffoscope-331 → diffoscope-336}/tests/data/berkeley_db_expected_diff +0 -0
  260. {diffoscope-331 → diffoscope-336}/tests/data/binary1 +0 -0
  261. {diffoscope-331 → diffoscope-336}/tests/data/binary2 +0 -0
  262. {diffoscope-331 → diffoscope-336}/tests/data/binary_expected_diff +0 -0
  263. {diffoscope-331 → diffoscope-336}/tests/data/binary_hexdump_expected_diff +0 -0
  264. {diffoscope-331 → diffoscope-336}/tests/data/binwalk_expected_diff +0 -0
  265. {diffoscope-331 → diffoscope-336}/tests/data/bug881937_1.deb +0 -0
  266. {diffoscope-331 → diffoscope-336}/tests/data/bug881937_2.deb +0 -0
  267. {diffoscope-331 → diffoscope-336}/tests/data/bug881937_control_expected_diff +0 -0
  268. {diffoscope-331 → diffoscope-336}/tests/data/bug903391_1.deb +0 -0
  269. {diffoscope-331 → diffoscope-336}/tests/data/bug903391_2.deb +0 -0
  270. {diffoscope-331 → diffoscope-336}/tests/data/bug903401_1.deb +0 -0
  271. {diffoscope-331 → diffoscope-336}/tests/data/bug903401_2.deb +0 -0
  272. {diffoscope-331 → diffoscope-336}/tests/data/bug903565_1.deb +0 -0
  273. {diffoscope-331 → diffoscope-336}/tests/data/bug903565_2.deb +0 -0
  274. {diffoscope-331 → diffoscope-336}/tests/data/comment_zipdetails_expected_diff +0 -0
  275. {diffoscope-331 → diffoscope-336}/tests/data/comment_zipinfo_expected_diff +0 -0
  276. {diffoscope-331 → diffoscope-336}/tests/data/containers/a.tar.bz2 +0 -0
  277. {diffoscope-331 → diffoscope-336}/tests/data/containers/a.tar.gz +0 -0
  278. {diffoscope-331 → diffoscope-336}/tests/data/containers/a.tar.xz +0 -0
  279. {diffoscope-331 → diffoscope-336}/tests/data/containers/b.tar.bz2 +0 -0
  280. {diffoscope-331 → diffoscope-336}/tests/data/containers/b.tar.gz +0 -0
  281. {diffoscope-331 → diffoscope-336}/tests/data/containers/b.tar.xz +0 -0
  282. {diffoscope-331 → diffoscope-336}/tests/data/containers/different_files_expected_diff +0 -0
  283. {diffoscope-331 → diffoscope-336}/tests/data/cpio_listing_expected_diff +0 -0
  284. {diffoscope-331 → diffoscope-336}/tests/data/dbgsym/add/test-dbgsym-dbgsym_1_amd64.deb +0 -0
  285. {diffoscope-331 → diffoscope-336}/tests/data/dbgsym/add/test-dbgsym_1_amd64.deb +0 -0
  286. {diffoscope-331 → diffoscope-336}/tests/data/dbgsym/mult/test-dbgsym-dbgsym_1_amd64.deb +0 -0
  287. {diffoscope-331 → diffoscope-336}/tests/data/dbgsym/mult/test-dbgsym_1_amd64.deb +0 -0
  288. {diffoscope-331 → diffoscope-336}/tests/data/dbgsym/test-dbgsym_1.dsc +0 -0
  289. {diffoscope-331 → diffoscope-336}/tests/data/dbgsym/test-dbgsym_1.tar.gz +0 -0
  290. {diffoscope-331 → diffoscope-336}/tests/data/deb_metadata_expected_diff +0 -0
  291. {diffoscope-331 → diffoscope-336}/tests/data/debian-bug-875281.collapsed-diff.json +0 -0
  292. {diffoscope-331 → diffoscope-336}/tests/data/debian-bug-876316-control.tar.gz +0 -0
  293. {diffoscope-331 → diffoscope-336}/tests/data/device_expected_diff +0 -0
  294. {diffoscope-331 → diffoscope-336}/tests/data/device_expected_diff_freebsd +0 -0
  295. {diffoscope-331 → diffoscope-336}/tests/data/device_expected_diff_reverse +0 -0
  296. {diffoscope-331 → diffoscope-336}/tests/data/device_expected_diff_reverse_freebsd +0 -0
  297. {diffoscope-331 → diffoscope-336}/tests/data/devicetree1.dtb +0 -0
  298. {diffoscope-331 → diffoscope-336}/tests/data/devicetree2.dtb +0 -0
  299. {diffoscope-331 → diffoscope-336}/tests/data/devicetree_expected_diff +0 -0
  300. {diffoscope-331 → diffoscope-336}/tests/data/dex_expected_diffs +0 -0
  301. {diffoscope-331 → diffoscope-336}/tests/data/dex_javap_14_expected_diffs +0 -0
  302. {diffoscope-331 → diffoscope-336}/tests/data/docx_expected_diff +0 -0
  303. {diffoscope-331 → diffoscope-336}/tests/data/dot_buildinfo_fallback_expected_diff +0 -0
  304. {diffoscope-331 → diffoscope-336}/tests/data/dot_changes_description_expected_diff +0 -0
  305. {diffoscope-331 → diffoscope-336}/tests/data/dot_changes_different_contents_and_identical_files_expected_diff +0 -0
  306. {diffoscope-331 → diffoscope-336}/tests/data/dot_changes_fallback_expected_diff +0 -0
  307. {diffoscope-331 → diffoscope-336}/tests/data/dot_changes_identical_contents_and_different_files_expected_diff +0 -0
  308. {diffoscope-331 → diffoscope-336}/tests/data/dot_dsc_fallback_expected_diff +0 -0
  309. {diffoscope-331 → diffoscope-336}/tests/data/dummyx64.efi.stub +0 -0
  310. {diffoscope-331 → diffoscope-336}/tests/data/elf_lib_metadata_expected_diff +0 -0
  311. {diffoscope-331 → diffoscope-336}/tests/data/elf_lib_objdump_expected_diff +0 -0
  312. {diffoscope-331 → diffoscope-336}/tests/data/elf_obj_expected_diff +0 -0
  313. {diffoscope-331 → diffoscope-336}/tests/data/elf_obj_ghidra_expected_diff +0 -0
  314. {diffoscope-331 → diffoscope-336}/tests/data/elfmix1.not_a +0 -0
  315. {diffoscope-331 → diffoscope-336}/tests/data/elfmix2.a +0 -0
  316. {diffoscope-331 → diffoscope-336}/tests/data/elfmix_disassembly_expected_diff +0 -0
  317. {diffoscope-331 → diffoscope-336}/tests/data/elfmix_mach_o_expected_diff__text +0 -0
  318. {diffoscope-331 → diffoscope-336}/tests/data/elfmix_mach_o_expected_diff__text_16 +0 -0
  319. {diffoscope-331 → diffoscope-336}/tests/data/elfmix_src_c_expected_diff +0 -0
  320. {diffoscope-331 → diffoscope-336}/tests/data/elfmix_x_obj_expected_diff +0 -0
  321. {diffoscope-331 → diffoscope-336}/tests/data/elfmix_x_obj_objdump_expected_diff +0 -0
  322. {diffoscope-331 → diffoscope-336}/tests/data/encrypted1.zip +0 -0
  323. {diffoscope-331 → diffoscope-336}/tests/data/encrypted2.zip +0 -0
  324. {diffoscope-331 → diffoscope-336}/tests/data/epub_expected_diffs +0 -0
  325. {diffoscope-331 → diffoscope-336}/tests/data/ext4_expected_diffs +0 -0
  326. {diffoscope-331 → diffoscope-336}/tests/data/fat12_expected_diffs +0 -0
  327. {diffoscope-331 → diffoscope-336}/tests/data/fit_expected_diff +0 -0
  328. {diffoscope-331 → diffoscope-336}/tests/data/fontconfig_expected_diff +0 -0
  329. {diffoscope-331 → diffoscope-336}/tests/data/fuzzy-tar-in-tar1.tar +0 -0
  330. {diffoscope-331 → diffoscope-336}/tests/data/fuzzy-tar-in-tar2.tar +0 -0
  331. {diffoscope-331 → diffoscope-336}/tests/data/fuzzy1.tar +0 -0
  332. {diffoscope-331 → diffoscope-336}/tests/data/fuzzy2.tar +0 -0
  333. {diffoscope-331 → diffoscope-336}/tests/data/fuzzy3.tar +0 -0
  334. {diffoscope-331 → diffoscope-336}/tests/data/gif_expected_diff +0 -0
  335. {diffoscope-331 → diffoscope-336}/tests/data/git_expected_diff +0 -0
  336. {diffoscope-331 → diffoscope-336}/tests/data/git_expected_diff_freebsd +0 -0
  337. {diffoscope-331 → diffoscope-336}/tests/data/gnu_debuglink_expected_diff +0 -0
  338. {diffoscope-331 → diffoscope-336}/tests/data/gnumeric_expected_diff +0 -0
  339. {diffoscope-331 → diffoscope-336}/tests/data/gzip_metadata_expected_diff +0 -0
  340. {diffoscope-331 → diffoscope-336}/tests/data/haskell_expected_diff +0 -0
  341. {diffoscope-331 → diffoscope-336}/tests/data/hdf5_expected_diff +0 -0
  342. {diffoscope-331 → diffoscope-336}/tests/data/hello1.wasm +0 -0
  343. {diffoscope-331 → diffoscope-336}/tests/data/hello2.wasm +0 -0
  344. {diffoscope-331 → diffoscope-336}/tests/data/html_expected_diff +0 -0
  345. {diffoscope-331 → diffoscope-336}/tests/data/html_text_expected_diff +0 -0
  346. {diffoscope-331 → diffoscope-336}/tests/data/icc_expected_diff +0 -0
  347. {diffoscope-331 → diffoscope-336}/tests/data/ico_image_expected_diff +0 -0
  348. {diffoscope-331 → diffoscope-336}/tests/data/ico_image_meta_expected_diff +0 -0
  349. {diffoscope-331 → diffoscope-336}/tests/data/ico_image_meta_expected_diff_v2 +0 -0
  350. {diffoscope-331 → diffoscope-336}/tests/data/ignore_readelf_errors_expected_diff +0 -0
  351. {diffoscope-331 → diffoscope-336}/tests/data/inv_expected_diff +0 -0
  352. {diffoscope-331 → diffoscope-336}/tests/data/ipk_metadata_expected_diff +0 -0
  353. {diffoscope-331 → diffoscope-336}/tests/data/iso9660_content_expected_diff +0 -0
  354. {diffoscope-331 → diffoscope-336}/tests/data/iso9660_content_expected_diff_cdrtools +0 -0
  355. {diffoscope-331 → diffoscope-336}/tests/data/iso9660_rockridge_expected_diff +0 -0
  356. {diffoscope-331 → diffoscope-336}/tests/data/iso9660_rockridge_expected_diff_cdrtools +0 -0
  357. {diffoscope-331 → diffoscope-336}/tests/data/javap_14_class_expected_diff +0 -0
  358. {diffoscope-331 → diffoscope-336}/tests/data/javap_class_expected_diff +0 -0
  359. {diffoscope-331 → diffoscope-336}/tests/data/javascript_expected_diff +0 -0
  360. {diffoscope-331 → diffoscope-336}/tests/data/jmod_zipdetails_expected_diff +0 -0
  361. {diffoscope-331 → diffoscope-336}/tests/data/jmod_zipinfo_expected_diff +0 -0
  362. {diffoscope-331 → diffoscope-336}/tests/data/jpeg_image_expected_diff +0 -0
  363. {diffoscope-331 → diffoscope-336}/tests/data/jpeg_image_meta_expected_diff +0 -0
  364. {diffoscope-331 → diffoscope-336}/tests/data/json_expected_diff +0 -0
  365. {diffoscope-331 → diffoscope-336}/tests/data/json_expected_ordering_diff +0 -0
  366. {diffoscope-331 → diffoscope-336}/tests/data/kbx_expected_diff +0 -0
  367. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__cstring +0 -0
  368. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__eh_frame +0 -0
  369. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__la_symbol_ptr +0 -0
  370. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__stub_helper +0 -0
  371. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__stub_helper_16 +0 -0
  372. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__stubs +0 -0
  373. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__stubs_16 +0 -0
  374. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__text +0 -0
  375. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__text_16 +0 -0
  376. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff__unwind_info +0 -0
  377. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff_dyn_relocations +0 -0
  378. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff_dyn_symbols +0 -0
  379. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff_file_headers +0 -0
  380. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff_needed_libs +0 -0
  381. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff_relocations +0 -0
  382. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff_strings +0 -0
  383. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff_symbols +0 -0
  384. {diffoscope-331 → diffoscope-336}/tests/data/macho_llvm_expected_diff_symbols_llvm_11 +0 -0
  385. {diffoscope-331 → diffoscope-336}/tests/data/macho_obj_ghidra_expected_diff_main +0 -0
  386. {diffoscope-331 → diffoscope-336}/tests/data/macho_otool_expected_diff__cstring +0 -0
  387. {diffoscope-331 → diffoscope-336}/tests/data/macho_otool_expected_diff__data +0 -0
  388. {diffoscope-331 → diffoscope-336}/tests/data/macho_otool_expected_diff__text +0 -0
  389. {diffoscope-331 → diffoscope-336}/tests/data/macho_otool_expected_diff_headers +0 -0
  390. {diffoscope-331 → diffoscope-336}/tests/data/macho_otool_expected_diff_indirect_symbols +0 -0
  391. {diffoscope-331 → diffoscope-336}/tests/data/macho_otool_expected_diff_libraries +0 -0
  392. {diffoscope-331 → diffoscope-336}/tests/data/macho_otool_expected_diff_strings +0 -0
  393. {diffoscope-331 → diffoscope-336}/tests/data/mo_charsets_expected_diff +0 -0
  394. {diffoscope-331 → diffoscope-336}/tests/data/mo_expected_diff +0 -0
  395. {diffoscope-331 → diffoscope-336}/tests/data/mozzip_zipinfo_expected_diff +0 -0
  396. {diffoscope-331 → diffoscope-336}/tests/data/mp3_expected_diff +0 -0
  397. {diffoscope-331 → diffoscope-336}/tests/data/nar_listing_expected_diff +0 -0
  398. {diffoscope-331 → diffoscope-336}/tests/data/no-perms.tar +0 -0
  399. {diffoscope-331 → diffoscope-336}/tests/data/nupkg_expected_diff +0 -0
  400. {diffoscope-331 → diffoscope-336}/tests/data/ocaml_expected_diff +0 -0
  401. {diffoscope-331 → diffoscope-336}/tests/data/odt_expected_diff +0 -0
  402. {diffoscope-331 → diffoscope-336}/tests/data/ogg_expected_diff +0 -0
  403. {diffoscope-331 → diffoscope-336}/tests/data/openssh_pub_key_expected_diff_12 +0 -0
  404. {diffoscope-331 → diffoscope-336}/tests/data/openssh_pub_key_expected_diff_23 +0 -0
  405. {diffoscope-331 → diffoscope-336}/tests/data/order1a.json +0 -0
  406. {diffoscope-331 → diffoscope-336}/tests/data/order1b.json +0 -0
  407. {diffoscope-331 → diffoscope-336}/tests/data/output.colored.txt +0 -0
  408. {diffoscope-331 → diffoscope-336}/tests/data/output.json +0 -0
  409. {diffoscope-331 → diffoscope-336}/tests/data/output.md +0 -0
  410. {diffoscope-331 → diffoscope-336}/tests/data/output.rst +0 -0
  411. {diffoscope-331 → diffoscope-336}/tests/data/output.txt +0 -0
  412. {diffoscope-331 → diffoscope-336}/tests/data/output_expected_363.html +0 -0
  413. {diffoscope-331 → diffoscope-336}/tests/data/output_expected_372.html +0 -0
  414. {diffoscope-331 → diffoscope-336}/tests/data/output_regression_875281.html +0 -0
  415. {diffoscope-331 → diffoscope-336}/tests/data/pcap_expected_diff +0 -0
  416. {diffoscope-331 → diffoscope-336}/tests/data/pdf_annotations_expected_diff +0 -0
  417. {diffoscope-331 → diffoscope-336}/tests/data/pdf_metadata_expected_diff +0 -0
  418. {diffoscope-331 → diffoscope-336}/tests/data/pdf_text_expected_diff +0 -0
  419. {diffoscope-331 → diffoscope-336}/tests/data/pe_expected_diff +0 -0
  420. {diffoscope-331 → diffoscope-336}/tests/data/pgp_expected_diff +0 -0
  421. {diffoscope-331 → diffoscope-336}/tests/data/pgp_signature_expected_diff +0 -0
  422. {diffoscope-331 → diffoscope-336}/tests/data/pgp_signed_expected_diff +0 -0
  423. {diffoscope-331 → diffoscope-336}/tests/data/png_expected_diff +0 -0
  424. {diffoscope-331 → diffoscope-336}/tests/data/ppu_expected_diff +0 -0
  425. {diffoscope-331 → diffoscope-336}/tests/data/procyon_class_expected_diff +0 -0
  426. {diffoscope-331 → diffoscope-336}/tests/data/ps_internal_expected_diff +0 -0
  427. {diffoscope-331 → diffoscope-336}/tests/data/ps_text_expected_diff +0 -0
  428. {diffoscope-331 → diffoscope-336}/tests/data/pyc_expected_diff +0 -0
  429. {diffoscope-331 → diffoscope-336}/tests/data/quine.gz +0 -0
  430. {diffoscope-331 → diffoscope-336}/tests/data/quine.zip +0 -0
  431. {diffoscope-331 → diffoscope-336}/tests/data/quine_a.deb +0 -0
  432. {diffoscope-331 → diffoscope-336}/tests/data/quine_b.deb +0 -0
  433. {diffoscope-331 → diffoscope-336}/tests/data/quine_deb_expected_diff +0 -0
  434. {diffoscope-331 → diffoscope-336}/tests/data/quine_expected_diff +0 -0
  435. {diffoscope-331 → diffoscope-336}/tests/data/rdb_expected_diff +0 -0
  436. {diffoscope-331 → diffoscope-336}/tests/data/rds_expected_diff +0 -0
  437. {diffoscope-331 → diffoscope-336}/tests/data/resources1.arsc +0 -0
  438. {diffoscope-331 → diffoscope-336}/tests/data/resources2.arsc +0 -0
  439. {diffoscope-331 → diffoscope-336}/tests/data/rlib_armap_expected_diff +0 -0
  440. {diffoscope-331 → diffoscope-336}/tests/data/rlib_elf_expected_diff +0 -0
  441. {diffoscope-331 → diffoscope-336}/tests/data/rlib_llvm_dis_expected_diff +0 -0
  442. {diffoscope-331 → diffoscope-336}/tests/data/rlib_llvm_dis_expected_diff_10 +0 -0
  443. {diffoscope-331 → diffoscope-336}/tests/data/rlib_llvm_dis_expected_diff_15 +0 -0
  444. {diffoscope-331 → diffoscope-336}/tests/data/rlib_llvm_dis_expected_diff_16 +0 -0
  445. {diffoscope-331 → diffoscope-336}/tests/data/rlib_llvm_dis_expected_diff_21 +0 -0
  446. {diffoscope-331 → diffoscope-336}/tests/data/rlib_llvm_dis_expected_diff_22 +0 -0
  447. {diffoscope-331 → diffoscope-336}/tests/data/rlib_llvm_dis_expected_diff_5 +0 -0
  448. {diffoscope-331 → diffoscope-336}/tests/data/rlib_llvm_dis_expected_diff_7 +0 -0
  449. {diffoscope-331 → diffoscope-336}/tests/data/rpm_fallback_expected_diff +0 -0
  450. {diffoscope-331 → diffoscope-336}/tests/data/rpm_header_expected_diff +0 -0
  451. {diffoscope-331 → diffoscope-336}/tests/data/rpm_listing_expected_diff +0 -0
  452. {diffoscope-331 → diffoscope-336}/tests/data/salsa-issue-363.diff.json +0 -0
  453. {diffoscope-331 → diffoscope-336}/tests/data/salsa-issue-372.diff.json +0 -0
  454. {diffoscope-331 → diffoscope-336}/tests/data/sqlite3_expected_diff +0 -0
  455. {diffoscope-331 → diffoscope-336}/tests/data/squashfs_root_expected_diff +0 -0
  456. {diffoscope-331 → diffoscope-336}/tests/data/squashfs_superblock_expected_diff +0 -0
  457. {diffoscope-331 → diffoscope-336}/tests/data/symlink_expected_destination_diff +0 -0
  458. {diffoscope-331 → diffoscope-336}/tests/data/symlink_expected_diff +0 -0
  459. {diffoscope-331 → diffoscope-336}/tests/data/tar_listing_expected_diff +0 -0
  460. {diffoscope-331 → diffoscope-336}/tests/data/test1-le64.cache-4 +0 -0
  461. {diffoscope-331 → diffoscope-336}/tests/data/test1.a +0 -0
  462. {diffoscope-331 → diffoscope-336}/tests/data/test1.apk +0 -0
  463. {diffoscope-331 → diffoscope-336}/tests/data/test1.asar +0 -0
  464. {diffoscope-331 → diffoscope-336}/tests/data/test1.asc +0 -0
  465. {diffoscope-331 → diffoscope-336}/tests/data/test1.binwalk +0 -0
  466. {diffoscope-331 → diffoscope-336}/tests/data/test1.buildinfo +0 -0
  467. {diffoscope-331 → diffoscope-336}/tests/data/test1.bz2 +0 -0
  468. {diffoscope-331 → diffoscope-336}/tests/data/test1.changes +0 -0
  469. {diffoscope-331 → diffoscope-336}/tests/data/test1.cpio +0 -0
  470. {diffoscope-331 → diffoscope-336}/tests/data/test1.db +0 -0
  471. {diffoscope-331 → diffoscope-336}/tests/data/test1.deb +0 -0
  472. {diffoscope-331 → diffoscope-336}/tests/data/test1.debsrc.tar.gz +0 -0
  473. {diffoscope-331 → diffoscope-336}/tests/data/test1.debug +0 -0
  474. {diffoscope-331 → diffoscope-336}/tests/data/test1.dex +0 -0
  475. {diffoscope-331 → diffoscope-336}/tests/data/test1.disk.gz +0 -0
  476. {diffoscope-331 → diffoscope-336}/tests/data/test1.docx +0 -0
  477. {diffoscope-331 → diffoscope-336}/tests/data/test1.dsc +0 -0
  478. {diffoscope-331 → diffoscope-336}/tests/data/test1.epub +0 -0
  479. {diffoscope-331 → diffoscope-336}/tests/data/test1.exe +0 -0
  480. {diffoscope-331 → diffoscope-336}/tests/data/test1.ext4 +0 -0
  481. {diffoscope-331 → diffoscope-336}/tests/data/test1.fat12 +0 -0
  482. {diffoscope-331 → diffoscope-336}/tests/data/test1.fat16 +0 -0
  483. {diffoscope-331 → diffoscope-336}/tests/data/test1.fat32 +0 -0
  484. {diffoscope-331 → diffoscope-336}/tests/data/test1.gif +0 -0
  485. {diffoscope-331 → diffoscope-336}/tests/data/test1.git-index +0 -0
  486. {diffoscope-331 → diffoscope-336}/tests/data/test1.gnumeric +0 -0
  487. {diffoscope-331 → diffoscope-336}/tests/data/test1.gz +0 -0
  488. {diffoscope-331 → diffoscope-336}/tests/data/test1.hi +0 -0
  489. {diffoscope-331 → diffoscope-336}/tests/data/test1.html +0 -0
  490. {diffoscope-331 → diffoscope-336}/tests/data/test1.icc +0 -0
  491. {diffoscope-331 → diffoscope-336}/tests/data/test1.ico +0 -0
  492. {diffoscope-331 → diffoscope-336}/tests/data/test1.inv +0 -0
  493. {diffoscope-331 → diffoscope-336}/tests/data/test1.iso +0 -0
  494. {diffoscope-331 → diffoscope-336}/tests/data/test1.jmod +0 -0
  495. {diffoscope-331 → diffoscope-336}/tests/data/test1.jpg +0 -0
  496. {diffoscope-331 → diffoscope-336}/tests/data/test1.js +0 -0
  497. {diffoscope-331 → diffoscope-336}/tests/data/test1.json +0 -0
  498. {diffoscope-331 → diffoscope-336}/tests/data/test1.kbx +0 -0
  499. {diffoscope-331 → diffoscope-336}/tests/data/test1.lz4 +0 -0
  500. {diffoscope-331 → diffoscope-336}/tests/data/test1.lzip +0 -0
  501. {diffoscope-331 → diffoscope-336}/tests/data/test1.lzma +0 -0
  502. {diffoscope-331 → diffoscope-336}/tests/data/test1.macho +0 -0
  503. {diffoscope-331 → diffoscope-336}/tests/data/test1.mo +0 -0
  504. {diffoscope-331 → diffoscope-336}/tests/data/test1.mozzip +0 -0
  505. {diffoscope-331 → diffoscope-336}/tests/data/test1.mp3 +0 -0
  506. {diffoscope-331 → diffoscope-336}/tests/data/test1.nar +0 -0
  507. {diffoscope-331 → diffoscope-336}/tests/data/test1.nupkg +0 -0
  508. {diffoscope-331 → diffoscope-336}/tests/data/test1.o +0 -0
  509. {diffoscope-331 → diffoscope-336}/tests/data/test1.odt +0 -0
  510. {diffoscope-331 → diffoscope-336}/tests/data/test1.ogg +0 -0
  511. {diffoscope-331 → diffoscope-336}/tests/data/test1.pcap +0 -0
  512. {diffoscope-331 → diffoscope-336}/tests/data/test1.pdf +0 -0
  513. {diffoscope-331 → diffoscope-336}/tests/data/test1.pgp +0 -0
  514. {diffoscope-331 → diffoscope-336}/tests/data/test1.png +0 -0
  515. {diffoscope-331 → diffoscope-336}/tests/data/test1.ppu +0 -0
  516. {diffoscope-331 → diffoscope-336}/tests/data/test1.ps +0 -0
  517. {diffoscope-331 → diffoscope-336}/tests/data/test1.pyc-renamed +0 -0
  518. {diffoscope-331 → diffoscope-336}/tests/data/test1.rdb +0 -0
  519. {diffoscope-331 → diffoscope-336}/tests/data/test1.rdx +0 -0
  520. {diffoscope-331 → diffoscope-336}/tests/data/test1.rlib +0 -0
  521. {diffoscope-331 → diffoscope-336}/tests/data/test1.rpm +0 -0
  522. {diffoscope-331 → diffoscope-336}/tests/data/test1.sqlite3 +0 -0
  523. {diffoscope-331 → diffoscope-336}/tests/data/test1.squashfs +0 -0
  524. {diffoscope-331 → diffoscope-336}/tests/data/test1.tar +0 -0
  525. {diffoscope-331 → diffoscope-336}/tests/data/test1.xml +0 -0
  526. {diffoscope-331 → diffoscope-336}/tests/data/test1.xsb +0 -0
  527. {diffoscope-331 → diffoscope-336}/tests/data/test1.xz +0 -0
  528. {diffoscope-331 → diffoscope-336}/tests/data/test1.zip +0 -0
  529. {diffoscope-331 → diffoscope-336}/tests/data/test1_meta.ico +0 -0
  530. {diffoscope-331 → diffoscope-336}/tests/data/test1_meta.jpg +0 -0
  531. {diffoscope-331 → diffoscope-336}/tests/data/test1_root.squashfs +0 -0
  532. {diffoscope-331 → diffoscope-336}/tests/data/test1_signed.pgp +0 -0
  533. {diffoscope-331 → diffoscope-336}/tests/data/test2-le64.cache-4 +0 -0
  534. {diffoscope-331 → diffoscope-336}/tests/data/test2.a +0 -0
  535. {diffoscope-331 → diffoscope-336}/tests/data/test2.apk +0 -0
  536. {diffoscope-331 → diffoscope-336}/tests/data/test2.asar +0 -0
  537. {diffoscope-331 → diffoscope-336}/tests/data/test2.asc +0 -0
  538. {diffoscope-331 → diffoscope-336}/tests/data/test2.binwalk +0 -0
  539. {diffoscope-331 → diffoscope-336}/tests/data/test2.buildinfo +0 -0
  540. {diffoscope-331 → diffoscope-336}/tests/data/test2.bz2 +0 -0
  541. {diffoscope-331 → diffoscope-336}/tests/data/test2.changes +0 -0
  542. {diffoscope-331 → diffoscope-336}/tests/data/test2.cpio +0 -0
  543. {diffoscope-331 → diffoscope-336}/tests/data/test2.db +0 -0
  544. {diffoscope-331 → diffoscope-336}/tests/data/test2.deb +0 -0
  545. {diffoscope-331 → diffoscope-336}/tests/data/test2.debsrc.tar.gz +0 -0
  546. {diffoscope-331 → diffoscope-336}/tests/data/test2.debug +0 -0
  547. {diffoscope-331 → diffoscope-336}/tests/data/test2.dex +0 -0
  548. {diffoscope-331 → diffoscope-336}/tests/data/test2.disk.gz +0 -0
  549. {diffoscope-331 → diffoscope-336}/tests/data/test2.docx +0 -0
  550. {diffoscope-331 → diffoscope-336}/tests/data/test2.dsc +0 -0
  551. {diffoscope-331 → diffoscope-336}/tests/data/test2.epub +0 -0
  552. {diffoscope-331 → diffoscope-336}/tests/data/test2.exe +0 -0
  553. {diffoscope-331 → diffoscope-336}/tests/data/test2.ext4 +0 -0
  554. {diffoscope-331 → diffoscope-336}/tests/data/test2.fat12 +0 -0
  555. {diffoscope-331 → diffoscope-336}/tests/data/test2.gif +0 -0
  556. {diffoscope-331 → diffoscope-336}/tests/data/test2.git-index +0 -0
  557. {diffoscope-331 → diffoscope-336}/tests/data/test2.gnumeric +0 -0
  558. {diffoscope-331 → diffoscope-336}/tests/data/test2.gz +0 -0
  559. {diffoscope-331 → diffoscope-336}/tests/data/test2.hi +0 -0
  560. {diffoscope-331 → diffoscope-336}/tests/data/test2.html +0 -0
  561. {diffoscope-331 → diffoscope-336}/tests/data/test2.icc +0 -0
  562. {diffoscope-331 → diffoscope-336}/tests/data/test2.ico +0 -0
  563. {diffoscope-331 → diffoscope-336}/tests/data/test2.inv +0 -0
  564. {diffoscope-331 → diffoscope-336}/tests/data/test2.iso +0 -0
  565. {diffoscope-331 → diffoscope-336}/tests/data/test2.jmod +0 -0
  566. {diffoscope-331 → diffoscope-336}/tests/data/test2.jpg +0 -0
  567. {diffoscope-331 → diffoscope-336}/tests/data/test2.js +0 -0
  568. {diffoscope-331 → diffoscope-336}/tests/data/test2.json +0 -0
  569. {diffoscope-331 → diffoscope-336}/tests/data/test2.kbx +0 -0
  570. {diffoscope-331 → diffoscope-336}/tests/data/test2.lz4 +0 -0
  571. {diffoscope-331 → diffoscope-336}/tests/data/test2.lzip +0 -0
  572. {diffoscope-331 → diffoscope-336}/tests/data/test2.lzma +0 -0
  573. {diffoscope-331 → diffoscope-336}/tests/data/test2.macho +0 -0
  574. {diffoscope-331 → diffoscope-336}/tests/data/test2.mo +0 -0
  575. {diffoscope-331 → diffoscope-336}/tests/data/test2.mozzip +0 -0
  576. {diffoscope-331 → diffoscope-336}/tests/data/test2.mp3 +0 -0
  577. {diffoscope-331 → diffoscope-336}/tests/data/test2.nar +0 -0
  578. {diffoscope-331 → diffoscope-336}/tests/data/test2.nupkg +0 -0
  579. {diffoscope-331 → diffoscope-336}/tests/data/test2.o +0 -0
  580. {diffoscope-331 → diffoscope-336}/tests/data/test2.odt +0 -0
  581. {diffoscope-331 → diffoscope-336}/tests/data/test2.ogg +0 -0
  582. {diffoscope-331 → diffoscope-336}/tests/data/test2.pcap +0 -0
  583. {diffoscope-331 → diffoscope-336}/tests/data/test2.pdf +0 -0
  584. {diffoscope-331 → diffoscope-336}/tests/data/test2.pgp +0 -0
  585. {diffoscope-331 → diffoscope-336}/tests/data/test2.png +0 -0
  586. {diffoscope-331 → diffoscope-336}/tests/data/test2.ppu +0 -0
  587. {diffoscope-331 → diffoscope-336}/tests/data/test2.ps +0 -0
  588. {diffoscope-331 → diffoscope-336}/tests/data/test2.pyc-renamed +0 -0
  589. {diffoscope-331 → diffoscope-336}/tests/data/test2.rdb +0 -0
  590. {diffoscope-331 → diffoscope-336}/tests/data/test2.rdx +0 -0
  591. {diffoscope-331 → diffoscope-336}/tests/data/test2.rlib +0 -0
  592. {diffoscope-331 → diffoscope-336}/tests/data/test2.rpm +0 -0
  593. {diffoscope-331 → diffoscope-336}/tests/data/test2.sqlite3 +0 -0
  594. {diffoscope-331 → diffoscope-336}/tests/data/test2.squashfs +0 -0
  595. {diffoscope-331 → diffoscope-336}/tests/data/test2.tar +0 -0
  596. {diffoscope-331 → diffoscope-336}/tests/data/test2.xml +0 -0
  597. {diffoscope-331 → diffoscope-336}/tests/data/test2.xsb +0 -0
  598. {diffoscope-331 → diffoscope-336}/tests/data/test2.xz +0 -0
  599. {diffoscope-331 → diffoscope-336}/tests/data/test2.zip +0 -0
  600. {diffoscope-331 → diffoscope-336}/tests/data/test2_meta.ico +0 -0
  601. {diffoscope-331 → diffoscope-336}/tests/data/test2_meta.jpg +0 -0
  602. {diffoscope-331 → diffoscope-336}/tests/data/test2_root.squashfs +0 -0
  603. {diffoscope-331 → diffoscope-336}/tests/data/test2_signed.pgp +0 -0
  604. {diffoscope-331 → diffoscope-336}/tests/data/test3.apk +0 -0
  605. {diffoscope-331 → diffoscope-336}/tests/data/test3.changes +0 -0
  606. {diffoscope-331 → diffoscope-336}/tests/data/test3.gif +0 -0
  607. {diffoscope-331 → diffoscope-336}/tests/data/test3.nar +0 -0
  608. {diffoscope-331 → diffoscope-336}/tests/data/test3.pdf +0 -0
  609. {diffoscope-331 → diffoscope-336}/tests/data/test3.xml +0 -0
  610. {diffoscope-331 → diffoscope-336}/tests/data/test3.xz +0 -0
  611. {diffoscope-331 → diffoscope-336}/tests/data/test3.zip +0 -0
  612. {diffoscope-331 → diffoscope-336}/tests/data/test4.changes +0 -0
  613. {diffoscope-331 → diffoscope-336}/tests/data/test4.gif +0 -0
  614. {diffoscope-331 → diffoscope-336}/tests/data/test4.nar +0 -0
  615. {diffoscope-331 → diffoscope-336}/tests/data/test4.pdf +0 -0
  616. {diffoscope-331 → diffoscope-336}/tests/data/test4.xml +0 -0
  617. {diffoscope-331 → diffoscope-336}/tests/data/test4.xz +0 -0
  618. {diffoscope-331 → diffoscope-336}/tests/data/test5.changes +0 -0
  619. {diffoscope-331 → diffoscope-336}/tests/data/test_comment1.zip +0 -0
  620. {diffoscope-331 → diffoscope-336}/tests/data/test_comment2.zip +0 -0
  621. {diffoscope-331 → diffoscope-336}/tests/data/test_directory_a_b_diff +0 -0
  622. {diffoscope-331 → diffoscope-336}/tests/data/test_directory_b_a_diff +0 -0
  623. {diffoscope-331 → diffoscope-336}/tests/data/test_directory_device_diff +0 -0
  624. {diffoscope-331 → diffoscope-336}/tests/data/test_directory_file_diff +0 -0
  625. {diffoscope-331 → diffoscope-336}/tests/data/test_directory_symlink_diff +0 -0
  626. {diffoscope-331 → diffoscope-336}/tests/data/test_invalid.json +0 -0
  627. {diffoscope-331 → diffoscope-336}/tests/data/test_invalid.xml +0 -0
  628. {diffoscope-331 → diffoscope-336}/tests/data/test_iso8859-1.mo +0 -0
  629. {diffoscope-331 → diffoscope-336}/tests/data/test_no_charset.mo +0 -0
  630. {diffoscope-331 → diffoscope-336}/tests/data/test_openssh_pub_key1.pub +0 -0
  631. {diffoscope-331 → diffoscope-336}/tests/data/test_openssh_pub_key2.pub +0 -0
  632. {diffoscope-331 → diffoscope-336}/tests/data/test_openssh_pub_key3.pub +0 -0
  633. {diffoscope-331 → diffoscope-336}/tests/data/test_weird_non_unicode_chars1.pdf +0 -0
  634. {diffoscope-331 → diffoscope-336}/tests/data/test_weird_non_unicode_chars2.pdf +0 -0
  635. {diffoscope-331 → diffoscope-336}/tests/data/test_xml_expected_diff +0 -0
  636. {diffoscope-331 → diffoscope-336}/tests/data/test_xml_ordering_differences_diff +0 -0
  637. {diffoscope-331 → diffoscope-336}/tests/data/text_ascii1 +0 -0
  638. {diffoscope-331 → diffoscope-336}/tests/data/text_ascii2 +0 -0
  639. {diffoscope-331 → diffoscope-336}/tests/data/text_ascii_expected_diff +0 -0
  640. {diffoscope-331 → diffoscope-336}/tests/data/text_endings1 +0 -0
  641. {diffoscope-331 → diffoscope-336}/tests/data/text_endings2 +0 -0
  642. {diffoscope-331 → diffoscope-336}/tests/data/text_endings_expected_diff +0 -0
  643. {diffoscope-331 → diffoscope-336}/tests/data/text_iso8859 +0 -0
  644. {diffoscope-331 → diffoscope-336}/tests/data/text_iso8859_expected_diff +0 -0
  645. {diffoscope-331 → diffoscope-336}/tests/data/text_order1 +0 -0
  646. {diffoscope-331 → diffoscope-336}/tests/data/text_order2 +0 -0
  647. {diffoscope-331 → diffoscope-336}/tests/data/text_order_expected_diff +0 -0
  648. {diffoscope-331 → diffoscope-336}/tests/data/text_sevenzmetadata_expected_diff +0 -0
  649. {diffoscope-331 → diffoscope-336}/tests/data/text_unicode1 +0 -0
  650. {diffoscope-331 → diffoscope-336}/tests/data/text_unicode2 +0 -0
  651. {diffoscope-331 → diffoscope-336}/tests/data/text_unicode_binary_fallback +0 -0
  652. {diffoscope-331 → diffoscope-336}/tests/data/text_unicode_expected_diff +0 -0
  653. {diffoscope-331 → diffoscope-336}/tests/data/text_xz_list +0 -0
  654. {diffoscope-331 → diffoscope-336}/tests/data/ttf_expected_diff +0 -0
  655. {diffoscope-331 → diffoscope-336}/tests/data/ttf_ttx_expected_diff +0 -0
  656. {diffoscope-331 → diffoscope-336}/tests/data/uimage_expected_diff +0 -0
  657. {diffoscope-331 → diffoscope-336}/tests/data/uimage_expected_diff_pre_5_41 +0 -0
  658. {diffoscope-331 → diffoscope-336}/tests/data/uki_expected_diff +0 -0
  659. {diffoscope-331 → diffoscope-336}/tests/data/wasm_expected_diff +0 -0
  660. {diffoscope-331 → diffoscope-336}/tests/data/xsb_expected_diff +0 -0
  661. {diffoscope-331 → diffoscope-336}/tests/data/zip2_zipdetails_expected_diff +0 -0
  662. {diffoscope-331 → diffoscope-336}/tests/data/zip_bsdtar_expected_diff +0 -0
  663. {diffoscope-331 → diffoscope-336}/tests/data/zip_zipdetails_expected_diff +0 -0
  664. {diffoscope-331 → diffoscope-336}/tests/data/zip_zipinfo_expected_diff +0 -0
  665. {diffoscope-331 → diffoscope-336}/tests/test_diff_mask.py +0 -0
  666. {diffoscope-331 → diffoscope-336}/tests/test_difference.py +0 -0
  667. {diffoscope-331 → diffoscope-336}/tests/test_excludes.py +0 -0
  668. {diffoscope-331 → diffoscope-336}/tests/test_main.py +0 -0
  669. {diffoscope-331 → diffoscope-336}/tests/test_presenters.py +0 -0
  670. {diffoscope-331 → diffoscope-336}/tests/test_progress.py +0 -0
  671. {diffoscope-331 → diffoscope-336}/tests/test_quines.py +0 -0
  672. {diffoscope-331 → diffoscope-336}/tests/test_readers.py +0 -0
  673. {diffoscope-331 → diffoscope-336}/tests/test_source.py +0 -0
  674. {diffoscope-331 → diffoscope-336}/tests/test_tools.py +0 -0
  675. {diffoscope-331 → diffoscope-336}/tests/test_versions.py +0 -0
  676. {diffoscope-331 → diffoscope-336}/tests/utils/__init__.py +0 -0
  677. {diffoscope-331 → diffoscope-336}/tests/utils/data.py +0 -0
  678. {diffoscope-331 → diffoscope-336}/tests/utils/nonexisting.py +0 -0
  679. {diffoscope-331 → diffoscope-336}/tests/utils/tools.py +0 -0
  680. {diffoscope-331 → diffoscope-336}/tests/utils/versions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffoscope
3
- Version: 331
3
+ Version: 336
4
4
  Summary: in-depth comparison of files, archives, and directories
5
5
  Home-page: https://diffoscope.org/
6
6
  Author: Diffoscope developers
@@ -14,12 +14,9 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (G
14
14
  Classifier: Operating System :: POSIX
15
15
  Classifier: Programming Language :: Python
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.7
18
- Classifier: Programming Language :: Python :: 3.8
19
- Classifier: Programming Language :: Python :: 3.9
20
17
  Classifier: Programming Language :: Python :: 3.10
21
18
  Classifier: Topic :: Utilities
22
- Requires-Python: >=3.7
19
+ Requires-Python: >=3.10
23
20
  Description-Content-Type: text/x-rst
24
21
  License-File: COPYING
25
22
  Requires-Dist: python-magic
@@ -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 = "331"
20
+ VERSION = "336"
@@ -331,11 +331,17 @@ def get_v2_signing_keys(path):
331
331
  except Exception:
332
332
  return ""
333
333
 
334
+ try:
335
+ pairs = instance._v2_blocks.items()
336
+ except AttributeError:
337
+ # Androguard >= 4.1.4-1 (approx)
338
+ pairs = [(b.id, b.data) for b in instance._v2_blocks]
339
+
334
340
  def format_key(x):
335
341
  return "\n".join(textwrap.wrap(binascii.hexlify(x).decode("utf-8")))
336
342
 
337
343
  output = []
338
- for k, v in sorted(instance._v2_blocks.items()):
344
+ for k, v in sorted(pairs):
339
345
  output.append("Key {}:\n{}\n".format(hex(k), format_key(v)))
340
346
 
341
347
  return "\n".join(output)
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # diffoscope: in-depth comparison of files, archives, and directories
3
3
  #
4
- # Copyright © 2024 Chris Lamb <lamby@debian.org>
4
+ # Copyright © 2024, 2026 Chris Lamb <lamby@debian.org>
5
5
  # Copyright © 2022 Christopher Baines <mail@cbaines.net>
6
6
  #
7
7
  # diffoscope is free software: you can redistribute it and/or modify
@@ -2,7 +2,7 @@
2
2
  # diffoscope: in-depth comparison of files, archives, and directories
3
3
  #
4
4
  # Copyright © 2014-2015 Jérémy Bobbio <lunar@debian.org>
5
- # Copyright © 2015-2016, 2018-2024 Chris Lamb <lamby@debian.org>
5
+ # Copyright © 2015-2016, 2018-2024, 2026 Chris Lamb <lamby@debian.org>
6
6
  # Copyright © 2023 Mattia Rizzolo <mattia@debian.org>
7
7
  #
8
8
  # diffoscope is free software: you can redistribute it and/or modify
@@ -23,6 +23,7 @@ import os
23
23
  import re
24
24
 
25
25
  from diffoscope.tools import (
26
+ find_executable,
26
27
  python_module_missing,
27
28
  tool_required,
28
29
  get_package_provider,
@@ -86,7 +87,7 @@ class Pdftotext(Command):
86
87
  class Dumppdf(Command):
87
88
  @tool_required("dumppdf")
88
89
  def cmdline(self):
89
- return ["dumppdf", "-at", self.path]
90
+ return [find_executable("dumppdf"), "-at", self.path]
90
91
 
91
92
 
92
93
  class PdfFile(File):
@@ -105,7 +106,7 @@ class PdfFile(File):
105
106
  Difference.from_operation(Dumppdf, self.path, other.path)
106
107
  )
107
108
 
108
- # Always preppend metadata differences
109
+ # Always prepend metadata differences
109
110
  xs[:0] = self.gen_metadata_differences(other)
110
111
 
111
112
  return xs
@@ -0,0 +1,232 @@
1
+ #
2
+ # diffoscope: in-depth comparison of files, archives, and directories
3
+ #
4
+ # Copyright © 2014-2015 Jérémy Bobbio <lunar@debian.org>
5
+ # Copyright © 2015-2016, 2018-2020, 2026 Chris Lamb <lamby@debian.org>
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 datetime
21
+ import re
22
+ import struct
23
+ import tarfile
24
+
25
+ from diffoscope.difference import Difference
26
+
27
+ from .utils.file import File
28
+ from .utils.libarchive import LibarchiveContainer, list_libarchive
29
+
30
+
31
+ class TarContainer(LibarchiveContainer):
32
+ pass
33
+
34
+
35
+ class TarFile(File):
36
+ DESCRIPTION = "tape archives (.tar)"
37
+ CONTAINER_CLASSES = [TarContainer]
38
+ FILE_TYPE_RE = re.compile(r"\btar archive\b")
39
+
40
+ def compare_details(self, other, source=None):
41
+ libarchive_result = Difference.from_text_readers(
42
+ list_libarchive(self.path),
43
+ list_libarchive(other.path),
44
+ self.path,
45
+ other.path,
46
+ source="file list",
47
+ )
48
+ if libarchive_result is not None:
49
+ return [libarchive_result]
50
+
51
+ # The libarchive based reader is not able to spot differences in
52
+ # POSIX.1-2001 PAX headers. libarchive itself is capable of reading
53
+ # this information (the archive_entry_xattr_* functions) but it
54
+ # doesn't seem to expose the relevant functions via libarchive.ffi.
55
+ #
56
+ # The PAX header stores information like
57
+ # * very long filenames and linknames
58
+ # * extended attributes
59
+ # * POSIX ACLs
60
+ # * atime and ctime with sub-second resolution
61
+ # * GNU/Hurd translators
62
+ # * sparse files
63
+ # * files larger than 8 GiB
64
+ # * device major and minor numbers with more than 21 bits
65
+ # * uid/gid with more than 21 bits
66
+ #
67
+ # If libarchive is unable to see a difference between the tarballs
68
+ # we fall back to the Python tarfile module and try to print more
69
+ # information.
70
+ return [
71
+ Difference.from_text_readers(
72
+ list_pytarfile(self.path),
73
+ list_pytarfile(other.path),
74
+ self.path,
75
+ other.path,
76
+ source="file list",
77
+ ),
78
+ ]
79
+
80
+
81
+ def timestamp2str(ts):
82
+ try:
83
+ return str(datetime.datetime.fromtimestamp(float(ts), datetime.UTC))
84
+ except ValueError:
85
+ return f"Unable to parse: {ts}"
86
+
87
+
88
+ def read_number(v):
89
+ try:
90
+ return int(v)
91
+ except ValueError:
92
+ return f"Unable to parse: {v}"
93
+
94
+
95
+ # from https://salsa.debian.org/josch/seedfiles-integration-tests/-/blob/main/test.py
96
+ def parse_xattr(acl):
97
+ # see uapi/linux/posix_acl.h
98
+ POSIX_ACL_XATTR_VERSION = 0x0002
99
+ assert (POSIX_ACL_XATTR_VERSION,) == struct.unpack("<I", acl[:4])
100
+ acl = acl[4:]
101
+ assert (1,) == struct.unpack("<H", acl[:2]) # a_refcount
102
+ (count,) = struct.unpack("<H", acl[2:4])
103
+ assert b"\xff\xff\xff\xff" == acl[4:8] # filler?
104
+ # make sure that the acl minus the header is a multiple of 8
105
+ assert len(acl) % 8 == 0
106
+ assert count >= len(acl) / 8
107
+ count = len(acl) / 8
108
+ result = ""
109
+ # see linux/posix_acl.h
110
+ while acl:
111
+ e_tag, e_perm, e_id = struct.unpack("<hHI", acl[:8])
112
+ match e_tag:
113
+ case 0x01:
114
+ e_tag = "ACL_USER_OBJ"
115
+ case 0x02:
116
+ e_tag = "ACL_USER"
117
+ case 0x04:
118
+ e_tag = "ACL_GROUP_OBJ"
119
+ case 0x08:
120
+ e_tag = "ACL_GROUP"
121
+ case 0x10:
122
+ e_tag = "ACL_MASK"
123
+ case 0x20:
124
+ e_tag = "ACL_OTHER"
125
+ case _:
126
+ e_tag = f"Unknown e_tag: {e_tag}"
127
+ e_perm_str = ""
128
+ if e_perm & 0x04:
129
+ e_perm_str += "r"
130
+ if e_perm & 0x02:
131
+ e_perm_str += "w"
132
+ if e_perm & 0x01:
133
+ e_perm_str += "x"
134
+ if e_id + 1 == 2**32:
135
+ e_id = "2^32-1"
136
+ result += f"\n {e_tag:>13} {e_perm_str:<3} {e_id}"
137
+ acl = acl[8:]
138
+ return result
139
+
140
+
141
+ def list_pytarfile(path):
142
+ with tarfile.open(path) as tar:
143
+ for member in tar:
144
+ if not member.pax_headers:
145
+ continue
146
+ for k, v in sorted(member.pax_headers.items()):
147
+ p = f"{member.name} PAX header {k}"
148
+ match k:
149
+ case "GNU.sparse.numblocks":
150
+ yield f"{p} raw value: {v}\n"
151
+ case "GNU.sparse.offset":
152
+ yield f"{p}: {read_number(v)}\n"
153
+ case "GNU.sparse.numbytes":
154
+ yield f"{p}: {read_number(v)}\n"
155
+ case "GNU.sparse.size":
156
+ yield f"{p}: {read_number(v)}\n"
157
+ case "GNU.sparse.map":
158
+ yield f"{p} raw value: {v}\n"
159
+ case "GNU.sparse.major":
160
+ yield f"{p}: {read_number(v)}\n"
161
+ case "GNU.sparse.minor":
162
+ yield f"{p}: {read_number(v)}\n"
163
+ case "GNU.sparse.name":
164
+ yield f"{p}: {v}\n"
165
+ case "GNU.sparse.realsize":
166
+ yield f"{p}: {read_number(v)}\n"
167
+ case "LIBARCHIVE.creationtime":
168
+ yield f"{p}: {timestamp2str(v)}\n"
169
+ case "LIBARCHIVE.symlinktype":
170
+ match v:
171
+ case "file" | "dir":
172
+ yield f"{p}: {v}\n"
173
+ case _:
174
+ yield f"{p}: Unknown value: {v}"
175
+ case "LIBARCHIVE.xattr":
176
+ yield f"{p} raw value: {v}\n"
177
+ case "RHT.security.selinux":
178
+ yield f"{p} raw value: {v}\n"
179
+ case "SCHILY.acl.access":
180
+ yield f"{p} raw value: {v}\n"
181
+ case "SCHILY.acl.default":
182
+ yield f"{p} raw value: {v}\n"
183
+ case "SCHILY.acl.ace":
184
+ yield f"{p} raw value: {v}\n"
185
+ case "SCHILY.devmajor":
186
+ yield f"{p}: {read_number(v)}\n"
187
+ case "SCHILY.devminor":
188
+ yield f"{p}: {read_number(v)}\n"
189
+ case "SCHILY.fflags":
190
+ yield f"{p} raw value: {v}\n"
191
+ case "SCHILY.dev":
192
+ yield f"{p}: {read_number(v)}\n"
193
+ case "SCHILY.ino":
194
+ yield f"{p}: {read_number(v)}\n"
195
+ case "SCHILY.nlink":
196
+ yield f"{p}: {read_number(v)}\n"
197
+ case "SCHILY.realsize":
198
+ yield f"{p}: {read_number(v)}\n"
199
+ case "SCHILY.xattr.gnu.translator":
200
+ yield f"{p} raw value: {v}\n"
201
+ case "SCHILY.xattr.system.posix_acl_default":
202
+ yield f"{p}: {parse_xattr(v.encode(errors='surrogateescape'))}\n"
203
+ case "SCHILY.xattr.user":
204
+ yield f"{p} raw value: {v}\n"
205
+ case "SCHILY.xattr.trusted":
206
+ yield f"{p} raw value: {v}\n"
207
+ case "SCHILY.xattr.security":
208
+ yield f"{p} raw value: {v}\n"
209
+ case "SCHILY.xattr.gnu.author":
210
+ yield f"{p} raw value: {v}\n"
211
+ case "SUN.holesdata":
212
+ yield f"{p} raw value: {v}\n"
213
+ case "atime" | "ctime" | "mtime":
214
+ yield f"{p}: {timestamp2str(v)}\n"
215
+ case "gid" | "uid":
216
+ yield f"{p}: {read_number(v)}\n"
217
+ case "gname" | "uname":
218
+ yield f"{p}: {v}\n"
219
+ case "hdrcharset":
220
+ match v:
221
+ case "BINARY":
222
+ yield "{p}: BINARY\n"
223
+ case "ISO-IR 10646 2000 UTF-8":
224
+ yield "{p}: UTF-8\n"
225
+ case _:
226
+ yield f"{p}: Unknown value: {v}"
227
+ case "linkpath":
228
+ yield f"{p}: {v}\n"
229
+ case "path":
230
+ yield f"{p}: {v}\n"
231
+ case "size":
232
+ yield f"{p}: {read_number(v)}\n"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffoscope
3
- Version: 331
3
+ Version: 336
4
4
  Summary: in-depth comparison of files, archives, and directories
5
5
  Home-page: https://diffoscope.org/
6
6
  Author: Diffoscope developers
@@ -14,12 +14,9 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (G
14
14
  Classifier: Operating System :: POSIX
15
15
  Classifier: Programming Language :: Python
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.7
18
- Classifier: Programming Language :: Python :: 3.8
19
- Classifier: Programming Language :: Python :: 3.9
20
17
  Classifier: Programming Language :: Python :: 3.10
21
18
  Classifier: Topic :: Utilities
22
- Requires-Python: >=3.7
19
+ Requires-Python: >=3.10
23
20
  Description-Content-Type: text/x-rst
24
21
  License-File: COPYING
25
22
  Requires-Dist: python-magic
@@ -445,7 +445,10 @@ tests/data/squashfs_root_expected_diff
445
445
  tests/data/squashfs_superblock_expected_diff
446
446
  tests/data/symlink_expected_destination_diff
447
447
  tests/data/symlink_expected_diff
448
+ tests/data/tar_acl_diff
449
+ tests/data/tar_atime_diff
448
450
  tests/data/tar_listing_expected_diff
451
+ tests/data/tar_translator_diff
449
452
  tests/data/test1-le64.cache-4
450
453
  tests/data/test1.a
451
454
  tests/data/test1.apk
@@ -6,8 +6,8 @@ import sys
6
6
 
7
7
  from setuptools import setup, find_packages
8
8
 
9
- if sys.version_info < (3, 7):
10
- print("diffoscope requires at least python 3.7", file=sys.stderr)
9
+ if sys.version_info < (3, 10):
10
+ print("diffoscope requires at least python 3.10", file=sys.stderr)
11
11
  sys.exit(1)
12
12
 
13
13
 
@@ -36,7 +36,7 @@ setup(
36
36
  "libarchive-c",
37
37
  ],
38
38
  extras_require=extras_require,
39
- python_requires=">=3.7",
39
+ python_requires=">=3.10",
40
40
  classifiers=[
41
41
  "Development Status :: 5 - Production/Stable",
42
42
  "Intended Audience :: Developers",
@@ -44,9 +44,6 @@ setup(
44
44
  "Operating System :: POSIX",
45
45
  "Programming Language :: Python",
46
46
  "Programming Language :: Python :: 3",
47
- "Programming Language :: Python :: 3.7",
48
- "Programming Language :: Python :: 3.8",
49
- "Programming Language :: Python :: 3.9",
50
47
  "Programming Language :: Python :: 3.10",
51
48
  "Topic :: Utilities",
52
49
  ],
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # diffoscope: in-depth comparison of files, archives, and directories
3
3
  #
4
- # Copyright © 2024 Chris Lamb <lamby@debian.org>
4
+ # Copyright © 2024, 2026 Chris Lamb <lamby@debian.org>
5
5
  # Copyright © 2022 Christopher Baines <mail@cbaines.net>
6
6
  #
7
7
  # diffoscope is free software: you can redistribute it and/or modify
@@ -0,0 +1,275 @@
1
+ #
2
+ # diffoscope: in-depth comparison of files, archives, and directories
3
+ #
4
+ # Copyright © 2015 Jérémy Bobbio <lunar@debian.org>
5
+ # Copyright © 2015-2017, 2020, 2026 Chris Lamb <lamby@debian.org>
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 gzip
21
+ import os.path
22
+ import pytest
23
+ import struct
24
+
25
+ from diffoscope.config import Config
26
+ from diffoscope.comparators.tar import TarFile
27
+ from diffoscope.comparators.missing_file import MissingFile
28
+ from diffoscope.comparators.utils.specialize import specialize
29
+ from diffoscope.comparators.binary import FilesystemFile
30
+
31
+ from ..utils.data import load_fixture, get_data, assert_diff
32
+ from ..utils.nonexisting import assert_non_existing
33
+
34
+ tar1 = load_fixture("test1.tar")
35
+ tar2 = load_fixture("test2.tar")
36
+
37
+
38
+ def test_identification(tar1):
39
+ assert isinstance(tar1, TarFile)
40
+
41
+
42
+ def test_no_differences(tar1):
43
+ difference = tar1.compare(tar1)
44
+ assert difference is None
45
+
46
+
47
+ @pytest.fixture
48
+ def differences(tar1, tar2):
49
+ return tar1.compare(tar2).details
50
+
51
+
52
+ def test_listing(differences):
53
+ expected_diff = get_data("tar_listing_expected_diff")
54
+ assert differences[0].unified_diff == expected_diff
55
+
56
+
57
+ def test_symlinks(differences):
58
+ assert differences[2].source1 == "dir/link"
59
+ assert differences[2].source2 == "dir/link"
60
+ assert differences[2].comment == "symlink"
61
+ expected_diff = get_data("symlink_expected_diff")
62
+ assert differences[2].unified_diff == expected_diff
63
+
64
+
65
+ def test_text_file(differences):
66
+ assert differences[1].source1 == "dir/text"
67
+ assert differences[1].source2 == "dir/text"
68
+ expected_diff = get_data("text_ascii_expected_diff")
69
+ assert differences[1].unified_diff == expected_diff
70
+
71
+
72
+ def test_compare_non_existing(monkeypatch, tar1):
73
+ assert_non_existing(monkeypatch, tar1)
74
+
75
+
76
+ no_permissions_tar = load_fixture("no-perms.tar")
77
+
78
+ # Reported as Debian #797164. This is a good way to notice if we unpack directories
79
+ # as we won't be able to remove files in one if we don't have write permissions.
80
+
81
+
82
+ def test_no_permissions_dir_in_tarball(monkeypatch, no_permissions_tar):
83
+ # We want to make sure OSError is not raised.
84
+ # Comparing with non-existing file makes it easy to make sure all files are unpacked
85
+ monkeypatch.setattr(Config(), "new_file", True)
86
+ no_permissions_tar.compare(MissingFile("/nonexistent", no_permissions_tar))
87
+
88
+
89
+ # The result of
90
+ # $ tar --format=pax --no-recursion -C /var/log -cf journal.tar ./journal
91
+ # once with and once without the --xattrs option
92
+ tar_acl_bytes = bytes.fromhex(
93
+ "1f8b080085ad436a02ffedd44f4bc3301806f02813a5273f42bf8069fef6ad87"
94
+ "9dbc4cf02078f224a1ad30e9ac3419d44faf2fdb4419a2286e179f1f94276d42"
95
+ "d2439fcae23a8cb33634ed108b877e393c864efc31c54ae756c9b6535947423b"
96
+ "6b4a22e734afd39ab411f928f660195318f855c4ff64551ed27cd14e35558648"
97
+ "3932d2581e91b72ee3d97a3d5b92f59a942269cfb5afac336556f9fce6627679"
98
+ "752bc790d220e3734ced423ef5713ede85bae3ab6e639c1ef23907e258bcb089"
99
+ "385ae509e7849f9f6eeef34d6655f9cda64d7b1f965dfad9ae023e27df4a5fec"
100
+ "ee0caeb821ef3ff65e13775ebddbeabf2d9d16b9df67ff87be4f5fad5b7f87cd"
101
+ "d98efe910000000000000000000000000000000000bff10adb0252ab00280000"
102
+ )
103
+
104
+
105
+ tar_noacl_bytes = bytes.fromhex(
106
+ "1f8b0800b4ad436a02ffedd43d6a0331108661d53ec55ec0bbfa19699cc2bdcb"
107
+ "5c41c45bc4c459d85d83737b0f0e263f458a101b82dfa719a11990407c6abbc7"
108
+ "7adcf475db8f53b71b0ee36b7d717fcc9b2272aee67bf55ec50549b1a88a049b"
109
+ "0b41bdbae6e86ee030cd75b4abb8fb947c53e7e77dbf0eba8aaa5e34b631d94a"
110
+ "739285759fdebb4553b657f1daa687905749625938fc7bed25f4ddf5ceb08447"
111
+ "cdf973ee838a7ee4dff6bee63f1509aec9b7ccff380cf34f73d3db34f7fbedf2"
112
+ "4a7f24000000000000000000000000f01b278df8083500280000"
113
+ )
114
+
115
+ # We run tar with --clamp-mtime --mtime=0 but the ctime and atime
116
+ # will still be stored in pax headers. Re-create like this:
117
+ # $ tar --clamp-mtime --mtime=0 --format=pax --no-recursion -cf bin1.tar ./bin
118
+ # $ touch ./bin
119
+ # $ tar --clamp-mtime --mtime=0 --format=pax --no-recursion -cf bin2.tar ./bin
120
+
121
+ tar_before_bytes = bytes.fromhex(
122
+ "1f8b0800000000000003edd3cd0a8240148661d75d8557a067fe6dd1be65b760"
123
+ "256450411a74f94d861006b508b3c5fb6c0ecc37301f0c27cb57e5755995dbea"
124
+ "dce4ebfa988c40226f6d37a3e1140936514e6b71de191bcf95846092f43a4699"
125
+ "a14bd396e758e5176ffd212369d9d6876aa142a10be38cf299b7f107bcf6c52c"
126
+ "a69b97d4e898cadccea6ee8eef65f7a5cfc77da35bf1e0ee530527cfb337d87f"
127
+ "25da25a91bb7d643bffffb53b3d9bdb9f7290700000000000000000000000026"
128
+ "7003acf6139900280000"
129
+ )
130
+
131
+ tar_after_bytes = bytes.fromhex(
132
+ "1f8b0800000000000003edd3cd0a8240148661d75d8557a0f3e39971d3be65b7"
133
+ "60266450811678f98d861042b508b3c5fb6c3e983370cee64bd26dd16daa625f"
134
+ "356dbaabcfd10c54e0b26cc8609a4af92cd2628c1227360bef5a796fa3b89be3"
135
+ "98a95b7b2d9a70ca2f76fd21abe2e25a9faab5f6b9c9ad5897275a7b63c439b7"
136
+ "0ad3f2f574e9dbf1bda42f7d3aef8ea1e25efad45ed4738e26fdd7ca4814cbbc"
137
+ "673d8cfd3f5edaf2f0e6dfa739000000000000000000000000b0803be9796d3f"
138
+ "00280000"
139
+ )
140
+
141
+
142
+ # Generates a PAX format tarball with a single entry which has the GNU/Hurd
143
+ # translator given in the content argument attached to it in a PAX header
144
+ def generate_pax(
145
+ name, mode, type, linktarget=None, major=None, minor=None, content=None
146
+ ):
147
+ entries = []
148
+ if content is not None:
149
+ content = "SCHILY.xattr.gnu.translator=" + content
150
+ # In the beginning the decimal length of the field is recorded.
151
+ # But the length includes the length of the number itself.
152
+ # Luckily we only need to support decimal numbers with two digits.
153
+ assert 9 < len(content) + 4 < 100
154
+ dirname, basename = os.path.split(name)
155
+ paxname = dirname + "/PaxHeaders/" + basename
156
+ content = f"{len(content) +4} {content}\n"
157
+ entries.append((paxname, 0, "x", None, None, None, content))
158
+ entries.append((name, mode, type, linktarget, major, minor, None))
159
+
160
+ mtime = int(1612543740) # an arbitrary reproducible date
161
+ devtar = b""
162
+ for file in entries:
163
+ fname, mode, type, linktarget, major, minor, content = file
164
+ assert len(fname) <= 100
165
+ buf = struct.pack(
166
+ "@100s8s8s8s12s12s8s1s100s6s2s32s32s8s8s155s12s",
167
+ fname.encode(),
168
+ f"{mode:07o}".encode(),
169
+ b"0" * 7,
170
+ b"0" * 7,
171
+ f"{len(content) if content is not None else 0:011o}".encode(),
172
+ f"{0 if type == 'x' else mtime:011o}".encode(),
173
+ b" " * 8,
174
+ type.encode(),
175
+ linktarget.encode() if linktarget is not None else b"",
176
+ b"ustar",
177
+ b"00",
178
+ b"",
179
+ b"",
180
+ (f"{major:07o}" if major is not None else "").encode(),
181
+ (f"{minor:07o}" if minor is not None else "").encode(),
182
+ b"",
183
+ b"",
184
+ )
185
+ chksum = 256 + sum(struct.unpack_from("148B8x356B", buf))
186
+ buf = buf[:-364] + f"{chksum:06o}\0".encode() + buf[-357:]
187
+ devtar += buf
188
+ if content is not None:
189
+ devtar += struct.pack("@512s", content.encode())
190
+ return struct.pack("@10240s", devtar)
191
+
192
+
193
+ def tar_fixture(content, prefix):
194
+ @pytest.fixture
195
+ def pax_tar(tmp_path, tar1, tar2):
196
+ match prefix:
197
+ case "test1":
198
+ tar = tar1
199
+ case "test2":
200
+ tar = tar2
201
+ case _:
202
+ raise Exception(f"Invalid prefix: {prefix}")
203
+ tar_path = tmp_path / f"{prefix}.tar"
204
+ with open(tar_path, "wb") as t_fp:
205
+ t_fp.write(content)
206
+ with open(tar.path, "rb") as r_fp:
207
+ t_fp.write(bytes(r_fp.read()))
208
+ return specialize(FilesystemFile(str(tar_path)))
209
+
210
+ return pax_tar
211
+
212
+
213
+ tar_acl = tar_fixture(gzip.decompress(tar_acl_bytes), "test1")
214
+ tar_noacl = tar_fixture(gzip.decompress(tar_noacl_bytes), "test2")
215
+
216
+ tar_before = tar_fixture(gzip.decompress(tar_before_bytes), "test1")
217
+ tar_after = tar_fixture(gzip.decompress(tar_after_bytes), "test2")
218
+
219
+
220
+ # The translator of tar_fd1_translator is wrong -- don't do this at home, kids!
221
+ tar_fd0_translator = tar_fixture(
222
+ generate_pax(
223
+ name="./dev/fd0", mode=0o640, type="0", content="/hurd/storeio\0fd0\0"
224
+ ),
225
+ "test1",
226
+ )
227
+ tar_fd1_translator = tar_fixture(
228
+ generate_pax(
229
+ name="./dev/fd0", mode=0o640, type="0", content="/hurd/storeio\0fd1\0"
230
+ ),
231
+ "test2",
232
+ )
233
+
234
+
235
+ def test_identification(
236
+ tar_acl,
237
+ tar_noacl,
238
+ tar_before,
239
+ tar_after,
240
+ tar_fd0_translator,
241
+ tar_fd1_translator,
242
+ ):
243
+ assert isinstance(tar_acl, TarFile)
244
+ assert isinstance(tar_noacl, TarFile)
245
+ assert isinstance(tar_before, TarFile)
246
+ assert isinstance(tar_after, TarFile)
247
+ assert isinstance(tar_fd0_translator, TarFile)
248
+ assert isinstance(tar_fd1_translator, TarFile)
249
+
250
+
251
+ @pytest.fixture
252
+ def differences_acl(tar_acl, tar_noacl):
253
+ return tar_acl.compare(tar_noacl).details
254
+
255
+
256
+ def test_listing_acl(differences_acl):
257
+ assert_diff(differences_acl[0], "tar_acl_diff")
258
+
259
+
260
+ @pytest.fixture
261
+ def differences_atime(tar_before, tar_after):
262
+ return tar_before.compare(tar_after).details
263
+
264
+
265
+ def test_listing_atime(differences_atime):
266
+ assert_diff(differences_atime[0], "tar_atime_diff")
267
+
268
+
269
+ @pytest.fixture
270
+ def differences_translator(tar_fd0_translator, tar_fd1_translator):
271
+ return tar_fd0_translator.compare(tar_fd1_translator).details
272
+
273
+
274
+ def test_listing_translator(differences_translator):
275
+ assert_diff(differences_translator[0], "tar_translator_diff")
@@ -8,3 +8,4 @@
8
8
  rbp = pop () // rsp // rsp
9
9
  return
10
10
  }
11
+