diff options
Diffstat (limited to 'usr.sbin/pkg_add/OpenBSD')
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/PackingElement.pm | 13 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/Update.pm | 32 |
2 files changed, 42 insertions, 3 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PackingElement.pm b/usr.sbin/pkg_add/OpenBSD/PackingElement.pm index ccbbeb57d93..24edaa23654 100644 --- a/usr.sbin/pkg_add/OpenBSD/PackingElement.pm +++ b/usr.sbin/pkg_add/OpenBSD/PackingElement.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: PackingElement.pm,v 1.207 2012/07/12 08:57:02 espie Exp $ +# $OpenBSD: PackingElement.pm,v 1.208 2012/10/13 10:28:22 jeremy Exp $ # # Copyright (c) 2003-2010 Marc Espie <espie@openbsd.org> # @@ -1863,6 +1863,17 @@ sub new }, $class; } +sub fullpkgpath +{ + my ($self) = @_; + if(%{$self->{mandatory}}) { + my $m = join(",", keys %{$self->{mandatory}}); + return "$self->{dir},$m"; + } else { + return $self->{dir}; + } +} + # a pkgpath has a dir, and some flavors/multi parts. To match, we must # remove them all. So, keep a full hash of everything we have (has), and # when stuff $to_rm matches, remove them from $from. diff --git a/usr.sbin/pkg_add/OpenBSD/Update.pm b/usr.sbin/pkg_add/OpenBSD/Update.pm index 0cce8ba1767..4300aa5f71d 100644 --- a/usr.sbin/pkg_add/OpenBSD/Update.pm +++ b/usr.sbin/pkg_add/OpenBSD/Update.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Update.pm,v 1.152 2012/04/28 11:55:16 espie Exp $ +# $OpenBSD: Update.pm,v 1.153 2012/10/13 10:28:22 jeremy Exp $ # # Copyright (c) 2004-2010 Marc Espie <espie@openbsd.org> # @@ -126,6 +126,7 @@ sub process_handle $state->quirks->tweak_search(\@search, $h, $state); }; my $oldfound = 0; + my @skipped_locs = (); # XXX this is nasty: maybe we added an old set to update # because of conflicts, in which case the pkgpath + @@ -164,7 +165,7 @@ sub process_handle } } if (!$plist->match_pkgpath($p2)) { - $loc->forget; + push(@skipped_locs, $loc); next } if ($p2->has('explicit-update') && $state->{allupdates}) { @@ -188,6 +189,15 @@ sub process_handle } my $l = $set->match_locations(@search); + + for my $loc (@skipped_locs) { + if (@$l == 0 && $state->verbose) { + $self->say_skipped_packages($state, $plist, + $loc->update_info); + } + $loc->forget; + } + if (@$l == 0) { if ($oldfound) { $h->{update_found} = $h; @@ -213,6 +223,24 @@ sub process_handle } } +sub say_skipped_packages +{ + my ($self, $state, $o, $n) = @_; + + my $o_name = $o->pkgname; + my @o_ps = map { @{$o->pkgpath->{$_}} } keys %{$o->pkgpath}; + my $o_pp = join(" ", map {$_->fullpkgpath} @o_ps); + + my $n_name = $n->pkgname; + my @n_ps = map { @{$n->pkgpath->{$_}} } keys %{$n->pkgpath}; + my $n_pp= join(" ", map {$_->fullpkgpath} @n_ps); + + my $t = "Skipping #1 (update candidate for #2)"; + $t .= "\n\t#2 pkgpaths: #4\n\t#1 pkgpaths: #3"; + + $state->say($t, $n_name, $o_name, $n_pp, $o_pp); +} + sub find_nearest { my ($base, $locs) = @_; |