[Git][reproducible-builds/diffoscope][master] Add support for zipdetails from the Perl package. Thanks to Larry Doolittle et...
Chris Lamb (@lamby)
gitlab at salsa.debian.org
Fri Mar 29 12:47:15 UTC 2024
Chris Lamb pushed to branch master at Reproducible Builds / diffoscope
Commits:
d9dfe40d by Chris Lamb at 2024-03-29T12:46:22+00:00
Add support for zipdetails from the Perl package. Thanks to Larry Doolittle et al. for the pointer to this tool.
- - - - -
7 changed files:
- diffoscope/comparators/zip.py
- diffoscope/external_tools.py
- tests/comparators/test_zip.py
- + tests/data/comment_zipdetails_expected_diff
- + tests/data/jmod_zipdetails_expected_diff
- + tests/data/zip2_zipdetails_expected_diff
- + tests/data/zip_zipdetails_expected_diff
Changes:
=====================================
diffoscope/comparators/zip.py
=====================================
@@ -2,7 +2,7 @@
# diffoscope: in-depth comparison of files, archives, and directories
#
# Copyright © 2014-2015 Jérémy Bobbio <lunar at debian.org>
-# Copyright © 2015-2022 Chris Lamb <lamby at debian.org>
+# Copyright © 2015-2022, 2024 Chris Lamb <lamby at debian.org>
#
# diffoscope is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -154,6 +154,12 @@ def zipinfo_differences(file, other):
return []
+class Zipdetails(Command):
+ @tool_required("zipdetails")
+ def cmdline(self):
+ return ["zipdetails", "--redact", "--scan", "--utc", self.path]
+
+
class ZipDirectory(Directory, ArchiveMember):
def __init__(self, archive, member_name):
ArchiveMember.__init__(self, archive, member_name)
@@ -251,12 +257,13 @@ class ZipFile(ZipFileBase):
if Config().exclude_directory_metadata != "recursive":
differences.extend(zipinfo_differences(self, other))
- try:
- differences.append(
- Difference.from_operation(Zipnote, self.path, other.path)
- )
- except RequiredToolNotFound: # noqa
- pass
+ for op in (Zipnote, Zipdetails):
+ try:
+ differences.append(
+ Difference.from_operation(op, self.path, other.path)
+ )
+ except RequiredToolNotFound: # noqa
+ pass
return differences
=====================================
diffoscope/external_tools.py
=====================================
@@ -251,6 +251,7 @@ EXTERNAL_TOOLS = {
"arch": "libxmlb",
"guix": "libxmlb",
},
+ "zipdetails": {"debian": "perl"},
"zstd": {"debian": "zstd", "guix": "zstd"},
}
=====================================
tests/comparators/test_zip.py
=====================================
@@ -65,21 +65,23 @@ def differences2(zip1, zip3):
return zip1.compare(zip3).details
- at skip_unless_tools_exist("zipinfo")
+ at skip_unless_tools_exist("zipinfo", "zipdetails")
def test_metadata(differences):
assert_diff(differences[0], "zip_zipinfo_expected_diff")
+ assert_diff(differences[1], "zip_zipdetails_expected_diff")
- at skip_unless_tools_exist("zipinfo")
+ at skip_unless_tools_exist("zipinfo", "zipdetails")
def test_compressed_files(differences):
- assert differences[1].source1 == "dir/text"
- assert differences[1].source2 == "dir/text"
- assert_diff(differences[1], "text_ascii_expected_diff")
+ assert differences[2].source1 == "dir/text"
+ assert differences[2].source2 == "dir/text"
+ assert_diff(differences[2], "text_ascii_expected_diff")
- at skip_unless_tools_exist("zipinfo", "bsdtar")
+ at skip_unless_tools_exist("zipinfo", "bsdtar", "zipdetails")
def test_extra_fields(differences2):
assert_diff(differences2[0], "zip_bsdtar_expected_diff")
+ assert_diff(differences2[1], "zip2_zipdetails_expected_diff")
@skip_unless_tools_exist("zipinfo")
@@ -136,9 +138,10 @@ def jmod_differences(jmod1, jmod2):
return jmod1.compare(jmod2).details
- at skip_unless_tools_exist("zipinfo")
+ at skip_unless_tools_exist("zipinfo", "zipdetails")
def test_jmod_metadata(jmod_differences, jmod1, jmod2):
assert_diff(jmod_differences[0], "jmod_zipinfo_expected_diff")
+ assert_diff(jmod_differences[1], "jmod_zipdetails_expected_diff")
def test_encrypted(encrypted_zip1, encrypted_zip2):
@@ -151,6 +154,7 @@ def comment_differences(test_comment1, test_comment2):
return test_comment1.compare(test_comment2).details
- at skip_unless_tools_exist("zipnote")
+ at skip_unless_tools_exist("zipnote", "zipdetails")
def test_commented(comment_differences):
assert_diff(comment_differences[1], "comment_zipinfo_expected_diff")
+ assert_diff(comment_differences[2], "comment_zipdetails_expected_diff")
=====================================
tests/data/comment_zipdetails_expected_diff
=====================================
@@ -0,0 +1,45 @@
+@@ -33,15 +33,15 @@
+ 004B Compression Method 0000 'Stored'
+ 004D Last Mod Time 4D869485 'Thu Dec 6 18:36:10 2018'
+ 0051 CRC 00000000
+ 0055 Compressed Length 00000000
+ 0059 Uncompressed Length 00000000
+ 005D Filename Length 0003
+ 005F Extra Length 0018
+-0061 Comment Length 0000
++0061 Comment Length 0005
+ 0063 Disk Start 0000
+ 0065 Int File Attributes 0000
+ [Bit 0] 0 'Binary Data'
+ 0067 Ext File Attributes 81A40000
+ 006B Local Header Offset 00000000
+ 006F Filename 'XXX'
+ 0072 Extra ID #0001 5455 'UT: Extended Timestamp'
+@@ -51,17 +51,19 @@
+ 007B Extra ID #0002 7875 'ux: Unix Extra Type 3'
+ 007D Length 000B
+ 007F Version 01
+ 0080 UID Size 04
+ 0081 UID 000003E8
+ 0085 GID Size 04
+ 0086 GID 000003E8
++008A Comment 'hello'
+
+-0086 END CENTRAL HEADER 06054B50
+-008A Number of this disk 0000
+-008C Central Dir Disk no 0000
+-008E Entries in this disk 0001
+-0090 Total Entries 0001
+-0092 Size of Central Dir 00000049
+-0096 Offset to Central Dir 0000003D
+-009A Comment Length 0000
++008B END CENTRAL HEADER 06054B50
++008F Number of this disk 0000
++0091 Central Dir Disk no 0000
++0093 Entries in this disk 0001
++0095 Total Entries 0001
++0097 Size of Central Dir 0000004E
++009B Offset to Central Dir 0000003D
++009F Comment Length 0007
++00A1 Comment 'goodbye'
+ Done
=====================================
tests/data/jmod_zipdetails_expected_diff
=====================================
@@ -0,0 +1,20 @@
+@@ -1,10 +1,19 @@
+ Filename: classes/module-info.class
+ Comment:
+
++Filename: classes/javax/transaction/xa/Xid.class
++Comment:
++
++Filename: classes/javax/transaction/xa/XAResource.class
++Comment:
++
++Filename: classes/javax/transaction/xa/XAException.class
++Comment:
++
+ Filename: legal/ADDITIONAL_LICENSE_INFO
+ Comment:
+
+ Filename: legal/ASSEMBLY_EXCEPTION
+ Comment:
+
+ Filename: legal/LICENSE
=====================================
tests/data/zip2_zipdetails_expected_diff
=====================================
@@ -0,0 +1,19 @@
+@@ -36,16 +36,16 @@
+ 0054 Uncompressed Length 000001BE
+ 0058 Filename Length 0008
+ 005A Extra Length 001C
+ 005C Filename 'XXX/XXXX'
+ 0064 Extra ID #0001 5455 'UT: Extended Timestamp'
+ 0066 Length 0009
+ 0068 Flags '03 mod access'
+-0069 Mod Time 558AB455 'Wed Jun 24 13:44:53 2015'
+-006D Access Time 558AB45F 'Wed Jun 24 13:45:03 2015'
++0069 Mod Time 41414141 'Fri Sep 10 05:53:05 2004'
++006D Access Time 41414141 'Fri Sep 10 05:53:05 2004'
+ 0071 Extra ID #0002 7875 'ux: Unix Extra Type 3'
+ 0073 Length 000B
+ 0075 Version 01
+ 0076 UID Size 04
+ 0077 UID 000003E8
+ 007B GID Size 04
+ 007C GID 000003E8
=====================================
tests/data/zip_zipdetails_expected_diff
=====================================
@@ -0,0 +1,177 @@
+@@ -26,103 +26,103 @@
+
+ 003E LOCAL HEADER #2 04034B50
+ 0042 Extract Zip Spec 14 '2.0'
+ 0043 Extract OS 00 'MS-DOS'
+ 0044 General Purpose Flag 0000
+ [Bits 1-2] 0 'Normal Compression'
+ 0046 Compression Method 0008 'Deflated'
+-0048 Last Mod Time 46D87D9B 'Wed Jun 24 15:44:54 2015'
+-004C CRC 43E526E8
+-0050 Compressed Length 0000010D
+-0054 Uncompressed Length 000001BE
++0048 Last Mod Time 46D87DAC 'Wed Jun 24 15:45:24 2015'
++004C CRC 5EB26950
++0050 Compressed Length 0000019C
++0054 Uncompressed Length 0000029F
+ 0058 Filename Length 0008
+ 005A Extra Length 001C
+ 005C Filename 'XXX/XXXX'
+ 0064 Extra ID #0001 5455 'UT: Extended Timestamp'
+ 0066 Length 0009
+ 0068 Flags '03 mod access'
+-0069 Mod Time 558AB455 'Wed Jun 24 13:44:53 2015'
++0069 Mod Time 558AB474 'Wed Jun 24 13:45:24 2015'
+ 006D Access Time 558AB45F 'Wed Jun 24 13:45:03 2015'
+ 0071 Extra ID #0002 7875 'ux: Unix Extra Type 3'
+ 0073 Length 000B
+ 0075 Version 01
+ 0076 UID Size 04
+ 0077 UID 000003E8
+ 007B GID Size 04
+ 007C GID 000003E8
+ 0080 PAYLOAD
+
+-0191 CENTRAL HEADER #1 02014B50
+-0195 Created Zip Spec 1E '3.0'
+-0196 Created OS 03 'Unix'
+-0197 Extract Zip Spec 0A '1.0'
+-0198 Extract OS 00 'MS-DOS'
+-0199 General Purpose Flag 0000
+-019B Compression Method 0000 'Stored'
+-019D Last Mod Time 46D87D9B 'Wed Jun 24 15:44:54 2015'
+-01A1 CRC 00000000
+-01A5 Compressed Length 00000000
+-01A9 Uncompressed Length 00000000
+-01AD Filename Length 0004
+-01AF Extra Length 0018
+-01B1 Comment Length 0000
+-01B3 Disk Start 0000
+-01B5 Int File Attributes 0000
++0220 CENTRAL HEADER #1 02014B50
++0224 Created Zip Spec 1E '3.0'
++0225 Created OS 03 'Unix'
++0226 Extract Zip Spec 0A '1.0'
++0227 Extract OS 00 'MS-DOS'
++0228 General Purpose Flag 0000
++022A Compression Method 0000 'Stored'
++022C Last Mod Time 46D87D9B 'Wed Jun 24 15:44:54 2015'
++0230 CRC 00000000
++0234 Compressed Length 00000000
++0238 Uncompressed Length 00000000
++023C Filename Length 0004
++023E Extra Length 0018
++0240 Comment Length 0000
++0242 Disk Start 0000
++0244 Int File Attributes 0000
+ [Bit 0] 0 'Binary Data'
+-01B7 Ext File Attributes 41ED0010
++0246 Ext File Attributes 41ED0010
+ [Bit 4] Directory
+-01BB Local Header Offset 00000000
+-01BF Filename 'XXX/'
+-01C3 Extra ID #0001 5455 'UT: Extended Timestamp'
+-01C5 Length 0005
+-01C7 Flags '03 mod access'
+-01C8 Mod Time 558AB455 'Wed Jun 24 13:44:53 2015'
+-01CC Extra ID #0002 7875 'ux: Unix Extra Type 3'
+-01CE Length 000B
+-01D0 Version 01
+-01D1 UID Size 04
+-01D2 UID 000003E8
+-01D6 GID Size 04
+-01D7 GID 000003E8
++024A Local Header Offset 00000000
++024E Filename 'XXX/'
++0252 Extra ID #0001 5455 'UT: Extended Timestamp'
++0254 Length 0005
++0256 Flags '03 mod access'
++0257 Mod Time 558AB455 'Wed Jun 24 13:44:53 2015'
++025B Extra ID #0002 7875 'ux: Unix Extra Type 3'
++025D Length 000B
++025F Version 01
++0260 UID Size 04
++0261 UID 000003E8
++0265 GID Size 04
++0266 GID 000003E8
+
+-01D7 CENTRAL HEADER #2 02014B50
+-01DB Created Zip Spec 1E '3.0'
+-01DC Created OS 03 'Unix'
+-01DD Extract Zip Spec 14 '2.0'
+-01DE Extract OS 00 'MS-DOS'
+-01DF General Purpose Flag 0000
++0266 CENTRAL HEADER #2 02014B50
++026A Created Zip Spec 1E '3.0'
++026B Created OS 03 'Unix'
++026C Extract Zip Spec 14 '2.0'
++026D Extract OS 00 'MS-DOS'
++026E General Purpose Flag 0000
+ [Bits 1-2] 0 'Normal Compression'
+-01E1 Compression Method 0008 'Deflated'
+-01E3 Last Mod Time 46D87D9B 'Wed Jun 24 15:44:54 2015'
+-01E7 CRC 43E526E8
+-01EB Compressed Length 0000010D
+-01EF Uncompressed Length 000001BE
+-01F3 Filename Length 0008
+-01F5 Extra Length 0018
+-01F7 Comment Length 0000
+-01F9 Disk Start 0000
+-01FB Int File Attributes 0001
++0270 Compression Method 0008 'Deflated'
++0272 Last Mod Time 46D87DAC 'Wed Jun 24 15:45:24 2015'
++0276 CRC 5EB26950
++027A Compressed Length 0000019C
++027E Uncompressed Length 0000029F
++0282 Filename Length 0008
++0284 Extra Length 0018
++0286 Comment Length 0000
++0288 Disk Start 0000
++028A Int File Attributes 0001
+ [Bit 0] 1 Text Data
+-01FD Ext File Attributes 81A40000
+-0201 Local Header Offset 0000003E
+-0205 Filename 'XXX/XXXX'
+-020D Extra ID #0001 5455 'UT: Extended Timestamp'
+-020F Length 0005
+-0211 Flags '03 mod access'
+-0212 Mod Time 558AB455 'Wed Jun 24 13:44:53 2015'
+-0216 Extra ID #0002 7875 'ux: Unix Extra Type 3'
+-0218 Length 000B
+-021A Version 01
+-021B UID Size 04
+-021C UID 000003E8
+-0220 GID Size 04
+-0221 GID 000003E8
++028C Ext File Attributes 81A40000
++0290 Local Header Offset 0000003E
++0294 Filename 'XXX/XXXX'
++029C Extra ID #0001 5455 'UT: Extended Timestamp'
++029E Length 0005
++02A0 Flags '03 mod access'
++02A1 Mod Time 558AB474 'Wed Jun 24 13:45:24 2015'
++02A5 Extra ID #0002 7875 'ux: Unix Extra Type 3'
++02A7 Length 000B
++02A9 Version 01
++02AA UID Size 04
++02AB UID 000003E8
++02AF GID Size 04
++02B0 GID 000003E8
+
+-0225 END CENTRAL HEADER 06054B50
+-0229 Number of this disk 0000
+-022B Central Dir Disk no 0000
+-022D Entries in this disk 0002
+-022F Total Entries 0002
+-0231 Size of Central Dir 00000098
+-0235 Offset to Central Dir 0000018D
+-0239 Comment Length 0000
++02B4 END CENTRAL HEADER 06054B50
++02B8 Number of this disk 0000
++02BA Central Dir Disk no 0000
++02BC Entries in this disk 0002
++02BE Total Entries 0002
++02C0 Size of Central Dir 00000098
++02C4 Offset to Central Dir 0000021C
++02C8 Comment Length 0000
+ Done
View it on GitLab: https://salsa.debian.org/reproducible-builds/diffoscope/-/commit/d9dfe40dc77030f062533fa96ccba43db6ebbf89
--
View it on GitLab: https://salsa.debian.org/reproducible-builds/diffoscope/-/commit/d9dfe40dc77030f062533fa96ccba43db6ebbf89
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.reproducible-builds.org/pipermail/rb-commits/attachments/20240329/dae8f54a/attachment.htm>
More information about the rb-commits
mailing list