File sorthash.patch of Package build
commit a06e44938202c533d0840c99de7a4310755261e3
Author: Bernhard M. Wiedemann <bwiedemann@suse.de>
Date: Fri Sep 7 15:02:36 2018 +0200
Sort hash keys
to have more reproducible behaviour
especially with building installation-images
that uses rpmlist files produced here
Index: obs-build-20200107/Build.pm
===================================================================
--- obs-build-20200107.orig/Build.pm
+++ obs-build-20200107/Build.pm
@@ -141,7 +141,7 @@ sub init_helper_hashes {
push @{$conflicts{$s}}, @s;
push @{$conflicts{$_}}, $s for @s;
}
- for (keys %conflicts) {
+ for (sort keys %conflicts) {
$conflicts{$_} = [ unify(@{$conflicts{$_}}) ]
}
$config->{'conflicth'} = \%conflicts;
@@ -375,7 +375,7 @@ sub read_config {
for my $l (qw{preinstall vminstall required support keep runscripts repotype patterntype}) {
$config->{$l} = [ unify(@{$config->{$l}}) ];
}
- for my $l (keys %{$config->{'substitute'}}) {
+ for my $l (sort keys %{$config->{'substitute'}}) {
$config->{'substitute_vers'}->{$l} = [ map {/^(.*?)(=)?$/g} unify(@{$config->{'substitute'}->{$l}}) ];
$config->{'substitute'}->{$l} = [ unify(@{$config->{'substitute'}->{$l}}) ];
s/=$// for @{$config->{'substitute'}->{$l}};
@@ -743,7 +743,7 @@ sub readdeps {
my $dofileprovides = %{$config->{'fileprovides'} || {}};
for my $depfile (@depfiles) {
if (ref($depfile) eq 'HASH') {
- for my $rr (keys %$depfile) {
+ for my $rr (sort keys %$depfile) {
$provides{$rr} = $depfile->{$rr}->{'provides'};
$requires{$rr} = $depfile->{$rr}->{'requires'};
$pkgconflicts{$rr} = $depfile->{$rr}->{'conflicts'};
@@ -898,12 +898,12 @@ sub makewhatprovidesh {
my %whatprovides;
my $provides = $config->{'providesh'};
- for my $p (keys %$provides) {
+ for my $p (sort keys %$provides) {
my @pp = @{$provides->{$p}};
s/[ <=>].*// for @pp;
push @{$whatprovides{$_}}, $p for unify(@pp);
}
- for my $p (keys %{$config->{'fileprovides'}}) {
+ for my $p (sort keys %{$config->{'fileprovides'}}) {
my @pp = grep {@{$provides->{$_} || []}} @{$config->{'fileprovides'}->{$p}};
@{$whatprovides{$p}} = unify(@{$whatprovides{$p} || []}, @pp) if @pp;
}
@@ -1327,7 +1327,7 @@ sub expand {
my $n = normalizerich($config, undef, $r, 1, \@error);
my %naconflicts;
check_conddeps_inst(undef, $n, \@error, \%p, \%naconflicts, \@todo, \%todo_cond);
- push @{$aconflicts{$_}}, $naconflicts{$_} for keys %naconflicts;
+ push @{$aconflicts{$_}}, $naconflicts{$_} for sort keys %naconflicts;
next;
}
my @q = @{$whatprovides->{$r} || addproviders($config, $r)};
@@ -1363,7 +1363,7 @@ sub expand {
my $n = normalizerich($config, undef, $r, 0, \@error);
my %naconflicts;
check_conddeps_inst(undef, $n, \@error, \%p, \%naconflicts, \@todo, \%todo_cond);
- push @{$aconflicts{$_}}, $naconflicts{$_} for keys %naconflicts;
+ push @{$aconflicts{$_}}, $naconflicts{$_} for sort keys %naconflicts;
} else {
push @todo, $r, undef;
}
@@ -1393,7 +1393,7 @@ sub expand {
for my $c (@{delete $todo_cond{$p}}) {
my %naconflicts;
check_conddeps_inst($c->[1], [ $c->[0] ], \@error, \%p, \%naconflicts, \@todo);
- push @{$aconflicts{$_}}, $naconflicts{$_} for keys %naconflicts;
+ push @{$aconflicts{$_}}, $naconflicts{$_} for sort keys %naconflicts;
}
}
delete $aconflicts{$p}; # no longer needed
@@ -1431,11 +1431,11 @@ sub expand {
}
if (%naconflicts) {
push @error, map {"$p conflicts with $_"} grep {$_ ne $p && $p{$_}} sort keys %naconflicts;
- push @{$aconflicts{$_}}, $naconflicts{$_} for keys %naconflicts;
+ push @{$aconflicts{$_}}, $naconflicts{$_} for sort keys %naconflicts;
}
if (%naobsoletes) {
push @error, map {"$p obsoletes $_"} grep {$_ ne $p && $p{$_}} sort keys %naobsoletes;
- push @{$aconflicts{$_}}, $naobsoletes{$_} for keys %naobsoletes;
+ push @{$aconflicts{$_}}, $naobsoletes{$_} for sort keys %naobsoletes;
}
push @rec_todo, $p if $userecommendsforchoices;
}
@@ -1695,7 +1695,7 @@ sub add_all_providers {
$a{$_} = 1 for @{$whatprovides->{$rn} || []};
}
}
- push @p, keys %a;
+ push @p, sort keys %a;
return unify(@p);
}
Index: obs-build-20200107/expanddeps
===================================================================
--- obs-build-20200107.orig/expanddeps
+++ obs-build-20200107/expanddeps
@@ -272,7 +272,7 @@ sub parsedepline {
return \@r;
}
-for my $pack (keys %packs) {
+for my $pack (sort keys %packs) {
my $r = {};
$r->{'provides'} = parsedepline($prov{$packs{$pack}});
$r->{'requires'} = parsedepline($req{$packs{$pack}});
Index: obs-build-20200107/mkbaselibs
===================================================================
--- obs-build-20200107.orig/mkbaselibs
+++ obs-build-20200107/mkbaselibs
@@ -637,7 +637,7 @@ sub handle_rpms {
}
my %cpiodirs;
- for (keys %files) {
+ for (sort keys %files) {
next if $cfiles{$_} || $moves{$_};
my $fn = $_;
next unless $fn =~ s/\/[^\/]+$//;
@@ -645,7 +645,7 @@ sub handle_rpms {
}
my %alldirs;
- for (keys %files) {
+ for (sort keys %files) {
next if $cfiles{$_};
my $fn = $_;
if ($moves{$fn}) {
@@ -663,7 +663,7 @@ sub handle_rpms {
for $ad (keys %alldirs) {
$alldirs{$ad} = 1 while $ad =~ s/\/[^\/]+$//;
}
- for (keys %files) {
+ for (sort keys %files) {
next if $cfiles{$_};
my $fn = $_;
if ($moves{$fn}) {
@@ -860,7 +860,7 @@ sub handle_rpms {
for my $file (sort keys %alldirs) {
print SPEC "%dir %attr(0755,root,root) $file\n";
}
- for my $file (keys %files) {
+ for my $file (sort keys %files) {
my $fi = $files{$file};
my $fm = $res{'FILEMODES'}->[$fi];
my $fv = $res{'FILEVERIFYFLAGS'}->[$fi];
@@ -915,7 +915,7 @@ sub handle_rpms {
}
}
}
- for (keys %symlinks) {
+ for (sort keys %symlinks) {
printf SPEC "%%attr(-,root,root) $_\n";
}
Index: obs-build-20200107/spectool
===================================================================
--- obs-build-20200107.orig/spectool
+++ obs-build-20200107/spectool
@@ -304,7 +304,7 @@ for my $spec (@specs) {
for my $tag (@opt_showtag) {
if($tag =~ /^\/(.+)\/$/) {
my $expr = $1;
- for my $t (keys %$parsed) {
+ for my $t (sort keys %$parsed) {
if ($t =~ $expr) {
push @opt_showtag, $t;
}
@@ -333,7 +333,7 @@ for my $spec (@specs) {
timeout => 42);
}
- for my $t (keys %$parsed) {
+ for my $t (sort keys %$parsed) {
next unless ($t =~ /^(?:source|patch)\d*/);
my $url = $parsed->{$t};
next unless $url =~ /^(?:https?|ftp):\/\//;
@@ -367,7 +367,7 @@ for my $spec (@specs) {
}
if ($opt_update) {
my $changed;
- for my $t (keys %$parsed) {
+ for my $t (sort keys %$parsed) {
next unless ($t =~ /^(?:source|patch)\d*/);
my $file = $parsed->{$t};
$file =~ s/.*\///;
@@ -381,7 +381,7 @@ for my $spec (@specs) {
}
if($changed) {
if(open(F, '>', $srcfile)) {
- for my $file (keys %$files) {
+ for my $file (sort keys %$files) {
$files->{$file} =~ s/^md5:// if $srcfile eq 'sources';
print F $files->{$file}, ' ', $file, "\n";
}
@@ -389,7 +389,7 @@ for my $spec (@specs) {
}
}
} else {
- for my $t (keys %$parsed) {
+ for my $t (sort keys %$parsed) {
next unless ($t =~ /^(?:source|patch)\d*/);
my $file = $parsed->{$t};
$file =~ s/.*\///;
@@ -416,7 +416,7 @@ for my $spec (@specs) {
}
print $parsed->{$t}, "\n";
}
- for my $file (keys %$files) {
+ for my $file (sort keys %$files) {
print "? $file\n";
}
}
Index: obs-build-20200107/substitutedeps
===================================================================
--- obs-build-20200107.orig/substitutedeps
+++ obs-build-20200107/substitutedeps
@@ -308,7 +308,7 @@ for my $line (@$xspec) {
my %f2 = @f2;
if ($isbuildrequires) {
delete $f2{$_} for @neg;
- delete $f2{$_} for grep {/^-/} keys %f2;
+ delete $f2{$_} for sort grep {/^-/} keys %f2;
}
while (@deps) {
my ($pack, $vers) = splice(@deps, 0, 2);