Package: dh-buildinfo
Version: 0.9+nmu1
Severity: wishlist
Tags: patch

Hi!

It would really help the “reproducible efforts” [1] if dh-buildinfo
would produce a stable output each time it is called.

The attached patch do this by:

 * calling gzip with the `-n` flag in order to prevent it to store
   a timestamp;
 * sorting the package lists by name.

The later might not be the nicest code, I don't really know Perl.

[1] http://wiki.debian.org/ReproducibleBuilds

Thanks!
-- 
Lunar                                .''`. 
lu...@debian.org                    : :Ⓐ  :  # apt-get install anarchism
                                    `. `'` 
                                      `-   
diff -Nru dh-buildinfo-0.9+nmu1/debian/changelog dh-buildinfo-0.9+nmu2/debian/changelog
--- dh-buildinfo-0.9+nmu1/debian/changelog	2012-05-13 12:22:38.000000000 +0200
+++ dh-buildinfo-0.9+nmu2/debian/changelog	2013-09-08 23:22:26.000000000 +0200
@@ -1,3 +1,10 @@
+dh-buildinfo (0.9+nmu2) UNRELEASED; urgency=low
+
+  * Do not record timestamps when compressing buildinfo file.
+  * Output packages sorted by name.
+
+ -- Jérémy Bobbio <lu...@debian.org>  Sun, 08 Sep 2013 20:59:23 +0000
+
 dh-buildinfo (0.9+nmu1) unstable; urgency=low
 
   * Non-maintainer upload.
diff -Nru dh-buildinfo-0.9+nmu1/dh_buildinfo dh-buildinfo-0.9+nmu2/dh_buildinfo
--- dh-buildinfo-0.9+nmu1/dh_buildinfo	2012-05-13 11:53:10.000000000 +0200
+++ dh-buildinfo-0.9+nmu2/dh_buildinfo	2013-09-08 23:28:36.000000000 +0200
@@ -161,12 +161,14 @@
   while (shift @essentials ne '') {
   }
   ;
+  @essentials = sort @essentials;
 
   # get output in the same format as build-essential and explicit build-deps
   #@essentials = BuildDeps::depends(join (', ', @essentials), @status);
 
   # closure
   my @essentialsclosure = deps_closure(\@essentials, \%depends, $excludes);
+  @essentialsclosure = sort @essentialsclosure;
   add_to_closure(\@essentialsclosure, $excludes);
 
   # record
@@ -201,9 +203,11 @@
 
   # have the expression parsed
   my @buildessentials = BuildDeps::depends($bestring, @status);
+  @buildessentials = sort @buildessentials;
 
   # closure
   my @buildessentialsclosure = deps_closure(\@buildessentials, \%depends, $excludes);
+  @buildessentialsclosure = sort @buildessentialsclosure;
   add_to_closure (\@buildessentialsclosure, $excludes);
 
   # record
@@ -222,16 +226,18 @@
   my %fields = BuildDeps::parse_control ('debian/control');
   if (defined $fields{'Build-Depends-Indep'}) {
     @builddepsindep = BuildDeps::depends($fields{'Build-Depends-Indep'}, @status);
+    @builddepsindep = sort @builddepsindep;
   }
 
   # closure
   my @builddepsindepclosure = deps_closure(\@builddepsindep, \%depends, $excludes);
+  @builddepsindepclosure = sort @builddepsindepclosure;
   add_to_closure (\@builddepsindepclosure, $excludes);
 
   # record
   $buildinfo .=
     "\n\n Declared Arch-indep Build-Dependencies:\n\n" .
-      pkgformat (\@builddepsindep, 0, @status) .
+      pkgformat (@builddepsindep, 0, @status) .
 	"\n\n Arch-indep Build-Dependencies closure:\n\n" .
 	  pkgformat (\@builddepsindepclosure, 1, @status);
 
@@ -244,10 +250,12 @@
   %fields = BuildDeps::parse_control ('debian/control');
   if (defined $fields{'Build-Depends'}) {
     @builddeps = BuildDeps::depends($fields{'Build-Depends'}, @status);
+    @builddeps = sort @builddeps;
   }
 
   # closure
   my @builddepsclosure = deps_closure(\@builddeps, \%depends, $excludes);
+  @builddepsclosure = sort @builddepsclosure;
   #add_to_closure (\@builddepsclosure, $excludes);
 
   # record
@@ -265,7 +273,7 @@
 }
 
 sub install_buildinfo {
-  complex_doit("gzip -9f debian/buildinfo >debian/buildinfo.gz");
+  complex_doit("gzip -9nf debian/buildinfo >debian/buildinfo.gz");
   foreach my $package (@{$dh{DOPACKAGES}}) {
     my $tmp=tmpdir($package);
     my $arch=package_arch($package);

Attachment: signature.asc
Description: Digital signature

Reply via email to