diff options
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/RequiredBy.pm | 20 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_add | 28 |
2 files changed, 23 insertions, 25 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/RequiredBy.pm b/usr.sbin/pkg_add/OpenBSD/RequiredBy.pm index cb915e9ac4d..143e0eb9a95 100644 --- a/usr.sbin/pkg_add/OpenBSD/RequiredBy.pm +++ b/usr.sbin/pkg_add/OpenBSD/RequiredBy.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: RequiredBy.pm,v 1.10 2005/08/17 09:19:09 espie Exp $ +# $OpenBSD: RequiredBy.pm,v 1.11 2005/08/17 18:24:53 espie Exp $ # # Copyright (c) 2003-2004 Marc Espie <espie@openbsd.org> # @@ -130,6 +130,24 @@ sub forget } } +sub compute_closure +{ + my ($class, @seed) = @_; + + my @todo = @seed; + my %done = (); + + while (my $pkgname = pop @todo) { + next if $done{$pkgname}; + $done{$pkgname} = 1; + for my $dep ($class->new($pkgname)->list()) { + next if defined $done{$dep}; + push(@todo, $dep); + } + } + return keys %done; +} + package OpenBSD::RequiredBy; our @ISA=qw(OpenBSD::RequirementList); use OpenBSD::PackageInfo; diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add index 75947003eee..69383b88351 100644 --- a/usr.sbin/pkg_add/pkg_add +++ b/usr.sbin/pkg_add/pkg_add @@ -1,7 +1,7 @@ #! /usr/bin/perl # ex:ts=8 sw=4: -# $OpenBSD: pkg_add,v 1.191 2005/08/17 11:01:07 espie Exp $ +# $OpenBSD: pkg_add,v 1.192 2005/08/17 18:24:52 espie Exp $ # # Copyright (c) 2003-2004 Marc Espie <espie@openbsd.org> # @@ -555,28 +555,6 @@ sub install_package return (); } -sub compute_closure -{ - require OpenBSD::RequiredBy; - - my $old = shift; - my @todo; - my %done; - my %toupdate = map {($_, 1)} @$old; - push(@todo, keys %toupdate); - while (my $pkgname = pop @todo) { - next if $done{$pkgname}; - $done{$pkgname} = 1; - for my $dep (OpenBSD::Requiring->new($pkgname)->list()) { - next if defined $done{$dep}; - next if defined $toupdate{$dep}; - $toupdate{$dep} = 1; - push(@todo, $dep); - } - } - return keys %toupdate; -} - sub find_updates { my ($old, $new, $state) = @_; @@ -596,7 +574,9 @@ sub find_updates } } unless (defined $state->{full_update} or defined $state->{forced}->{noclosure}) { - @list = compute_closure(\@list); + require OpenBSD::RequiredBy; + + @list = OpenBSD::Requiring->compute_closure(@list); } my @cantupdate = (); my $hash = OpenBSD::PackageName::compile_stemlist(OpenBSD::PackageLocator::distant_available()); |