diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2008-06-15 08:24:29 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2008-06-15 08:24:29 +0000 |
commit | 0b18a6dc503758681b240e76c768c2ea8a7f9b37 (patch) | |
tree | 444aa506bb868a6053849f0d65d8eaeacf0fac6f /usr.sbin/pkg_add | |
parent | e638bea349daf8534ae5852cd715d9a404847779 (diff) |
tweak the code that finds packages to find distant stems
(todo: match pkg_add code better)
Diffstat (limited to 'usr.sbin/pkg_add')
-rw-r--r-- | usr.sbin/pkg_add/pkg_info | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/usr.sbin/pkg_add/pkg_info b/usr.sbin/pkg_add/pkg_info index e52773bea7f..6a4a861e25c 100644 --- a/usr.sbin/pkg_add/pkg_info +++ b/usr.sbin/pkg_add/pkg_info @@ -1,6 +1,6 @@ #! /usr/bin/perl # ex:ts=8 sw=4: -# $OpenBSD: pkg_info,v 1.66 2008/03/08 12:07:45 espie Exp $ +# $OpenBSD: pkg_info,v 1.67 2008/06/15 08:24:28 espie Exp $ # # Copyright (c) 2003-2007 Marc Espie <espie@openbsd.org> # @@ -66,37 +66,45 @@ package main; my $total_size = 0; my $pkgs = 0; -sub find_pkg +sub find_pkg_in { - my ($pkgname, $code) = @_; - require OpenBSD::PackageRepository::Installed; - my $repo = OpenBSD::PackageRepository::Installed->new; - my $pkg; + my ($repo, $pkgname, $code) = @_; - $pkg = $repo->find($pkgname); - if (defined $pkg) { - &$code($pkgname, $pkg); - return; - } if (OpenBSD::PackageName::is_stem($pkgname)) { require OpenBSD::Search; my @l = sort ($repo->match(OpenBSD::Search::Stem->new($pkgname))); if (@l != 0) { for my $p (@l) { - &$code($p, $repo->find($p)); + my $pkg = $repo->find($p); + &$code($p, $pkg); + $pkg->close_now; + $pkg->wipe_info; } - return; + return 1; } } - - require OpenBSD::PackageLocator; - - $pkg = OpenBSD::PackageLocator->find($pkgname); + my $pkg = $repo->find($pkgname); if (defined $pkg) { &$code($pkgname, $pkg); $pkg->close_now; $pkg->wipe_info; + return 1; } + return 0; +} + +sub find_pkg +{ + my ($pkgname, $code) = @_; + require OpenBSD::PackageRepository::Installed; + + if (find_pkg_in(OpenBSD::PackageRepository::Installed->new, $pkgname, + $code)) { + return; + } + require OpenBSD::PackageLocator; + + find_pkg_in('OpenBSD::PackageLocator', $pkgname, $code); } sub printfile |