[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