[Reproducible-commits] [dpkg] 59/63: dpkg-genbuildinfo: Improve computation of dependencies

Jérémy Bobbio lunar at moszumanska.debian.org
Fri Mar 4 17:44:46 UTC 2016


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch pu/buildinfo
in repository dpkg.

commit d356bd21702e970799c0bb49c1a73fd66499a8f6
Author: Jérémy Bobbio <lunar at debian.org>
Date:   Sat Jan 30 14:37:14 2016 +0000

    dpkg-genbuildinfo: Improve computation of dependencies
    
    Instead of looking at all dependencies again each time we had a new one,
    we now keep an array of packages that still need to be processed.
---
 scripts/dpkg-genbuildinfo.pl | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/scripts/dpkg-genbuildinfo.pl b/scripts/dpkg-genbuildinfo.pl
index 03177a0..4787d10 100755
--- a/scripts/dpkg-genbuildinfo.pl
+++ b/scripts/dpkg-genbuildinfo.pl
@@ -131,14 +131,14 @@ sub parse_status {
 }
 
 sub append_deps {
-    my $env_pkgs = shift;
+    my $pkgs = shift;
     my $deps;
 
     foreach my $dep_str (@_) {
         next unless $dep_str;
         $deps = deps_parse($dep_str, reduce_restrictions => 1, build_dep => 1);
         # add packages as unseen if they were not there before
-        deps_iterate($deps, sub { ${$env_pkgs}{$_[0]->{package}} //= 0; 1 });
+        deps_iterate($deps, sub { push @{$pkgs}, $_[0]->{package}; 1 });
     }
 }
 
@@ -288,31 +288,33 @@ $checksums->export_to_control($fields);
 
 my ($facts, $depends, $essential_pkgs) = parse_status("$admindir/status");
 my $deps;
-my %env_pkgs;
+my %seen_pkgs;
+my @unprocessed_pkgs;
 
 # parse essential list
 
-append_deps(\%env_pkgs, @{$essential_pkgs}, run_vendor_hook('builtin-build-depends'),
-                        $control->get_source->{'Build-Depends'});
+append_deps(\@unprocessed_pkgs,
+            @{$essential_pkgs},
+            run_vendor_hook('builtin-build-depends'),
+            $control->get_source->{'Build-Depends'});
 
 if ($include & BUILD_ARCH_DEP) {
-    append_deps(\%env_pkgs, $control->get_source->{'Build-Depends-Arch'});
+    append_deps(\@unprocessed_pkgs, $control->get_source->{'Build-Depends-Arch'});
 }
 
 if ($include & BUILD_ARCH_INDEP) {
-    append_deps(\%env_pkgs, $control->get_source->{'Build-Depends-Indep'});
+    append_deps(\@unprocessed_pkgs, $control->get_source->{'Build-Depends-Indep'});
 }
 
-while (my ($pkg, $seen) = each(%env_pkgs)) {
-    next if $seen;
-    $env_pkgs{$pkg} = 1; # mark as seen
+while (my $pkg = shift @unprocessed_pkgs) {
+    next if $seen_pkgs{$pkg};
     next unless defined $facts->{pkg}->{$pkg}->[0];
-    append_deps(\%env_pkgs, @{$depends->{$pkg}});
-    keys %env_pkgs; # reset iterator
+    append_deps(\@unprocessed_pkgs, @{$depends->{$pkg}});
+    $seen_pkgs{$pkg} = 1;
 }
 
 my $environment = Dpkg::Deps::AND->new();
-foreach my $pkg (sort keys %env_pkgs) {
+foreach my $pkg (sort keys %seen_pkgs) {
     foreach my $installed_pkg (@{$facts->{pkg}->{$pkg}}) {
         my $version = $installed_pkg->{version};
         my $architecture = $installed_pkg->{architecture};

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/dpkg.git



More information about the Reproducible-commits mailing list