[Reproducible-commits] [strip-nondeterminism] 02/10: Strip non-deterministic fields from MANIFEST.MF files inside JARs
Andrew Ayer
agwa at andrewayer.name
Sun Nov 16 23:16:05 UTC 2014
This is an automated email from the git hooks/post-receive script.
agwa-guest pushed a commit to branch master
in repository strip-nondeterminism.
commit 94204e571c94f534849614afc51d41d8df235f8b
Author: Andrew Ayer <agwa at andrewayer.name>
Date: Sat Oct 25 16:53:42 2014 -0700
Strip non-deterministic fields from MANIFEST.MF files inside JARs
Closes: #765302
---
lib/File/StripNondeterminism/handlers/jar.pm | 30 ++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/lib/File/StripNondeterminism/handlers/jar.pm b/lib/File/StripNondeterminism/handlers/jar.pm
index c574195..3c7af14 100644
--- a/lib/File/StripNondeterminism/handlers/jar.pm
+++ b/lib/File/StripNondeterminism/handlers/jar.pm
@@ -36,6 +36,33 @@ sub _jar_filename_cmp ($$) {
return $a cmp $b;
}
+sub _jar_normalize_manifest {
+ my ($filename) = @_;
+
+ open(my $fh, '<', $filename) or die "Unable to open $filename for reading: $!";
+ my $tempfile = File::Temp->new(DIR => dirname($filename));
+
+ my $modified = 0;
+
+ while (defined(my $line = <$fh>)) {
+ # Bnd-LastModified contains a timestamp.
+ # Built-By contains the system username.
+ if ($line =~ /^(Bnd-LastModified|Built-By):/) {
+ $modified = 1;
+ next;
+ }
+ print $tempfile $line;
+ }
+
+ if ($modified) {
+ # Rename temporary file over the file
+ chmod((stat($fh))[2] & 07777, $tempfile->filename);
+ rename($tempfile->filename, $filename) or die "$filename: unable to overwrite: rename: $!";
+ $tempfile->unlink_on_destroy(0);
+ }
+ return $modified;
+}
+
sub _jar_normalize_member {
my ($member) = @_; # $member is a ref to an Archive::Zip::Member
return if $member->isDirectory();
@@ -45,6 +72,9 @@ sub _jar_normalize_member {
# javadoc header should be within first 1kb of file
File::StripNondeterminism::handlers::zip::normalize_member($member,
\&File::StripNondeterminism::handlers::javadoc::normalize);
+ } elsif ($member->fileName() eq 'META-INF/MANIFEST.MF') {
+ File::StripNondeterminism::handlers::zip::normalize_member($member,
+ \&_jar_normalize_manifest);
}
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/strip-nondeterminism.git
More information about the Reproducible-commits
mailing list