summaryrefslogtreecommitdiff
path: root/usr.sbin/pkg_add/OpenBSD/Update.pm
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2009-12-12 17:08:08 +0000
committerMarc Espie <espie@cvs.openbsd.org>2009-12-12 17:08:08 +0000
commitf098ff01389be6d00aac9c1d696f3d8346d92f33 (patch)
tree7d2ee2a89b01a4eaa59c2f78e593a4cde85a910b /usr.sbin/pkg_add/OpenBSD/Update.pm
parent2a82312ee8b30ae2f2bdcd0f40587194dee6ee0d (diff)
fix the fam->libgamin issue. Look for update candidates in self before
asking the repository. This solves this kind of conflicts. also, register packages we keep, this makes for simpler scenarios (todo: split updateset into further categories)
Diffstat (limited to 'usr.sbin/pkg_add/OpenBSD/Update.pm')
-rw-r--r--usr.sbin/pkg_add/OpenBSD/Update.pm33
1 files changed, 17 insertions, 16 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/Update.pm b/usr.sbin/pkg_add/OpenBSD/Update.pm
index cfef522a9f7..76aa74ba9df 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.113 2009/12/07 13:41:02 espie Exp $
+# $OpenBSD: Update.pm,v 1.114 2009/12/12 17:08:07 espie Exp $
#
# Copyright (c) 2004-2006 Marc Espie <espie@openbsd.org>
#
@@ -80,10 +80,12 @@ sub process_handle
$state->say("Not updating .libs*, remember to clean them");
$first = 0;
}
+ $h->{keepit} = 1;
return 0;
}
if ($pkgname =~ m/^partial\-/o) {
$state->say("Not updating $pkgname, remember to clean it");
+ $h->{keepit} = 1;
return 0;
}
@@ -110,6 +112,16 @@ sub process_handle
my $found;
my $oldfound = 0;
+ # XXX this is nasty: maybe we added an old set to update
+ # because of conflicts, in which case the pkgpath +
+ # conflict should be enough to "match".
+ for my $n ($set->newer) {
+ if ($n->location->update_info->match_pkgpath($plist) &&
+ $n->plist->conflict_list->conflicts_with($pkgname)) {
+ $self->add_handle($set, $h, $n);
+ return 1;
+ }
+ }
if (!$state->{defines}->{downgrade}) {
push(@search, OpenBSD::Search::FilterLocation->more_recent_than($pkgname, \$oldfound));
}
@@ -152,17 +164,9 @@ sub process_handle
my $l = OpenBSD::PackageLocator->match_locations(@search);
if (@$l == 0) {
- # XXX this is nasty: maybe we added an old set to update
- # because of conflicts, in which case the pkgpath +
- # conflict should be enough to "match".
- for my $n ($set->newer) {
- if ($n->location->update_info->match_pkgpath($plist)) {
- $self->add_handle($set, $h, $n);
- return 1;
- }
- }
if ($oldfound) {
$h->{update_found} = $h;
+ $h->{keepit} = 1;
my $msg = "No need to update $pkgname";
if (defined $state->{todo} && $state->{todo} > 0) {
$msg .= " ($state->{todo} to go)";
@@ -177,6 +181,7 @@ sub process_handle
if (defined $found && $found eq $l->[0] &&
!$plist->uses_old_libs && !$state->{defines}->{installed}) {
$h->{update_found} = $h;
+ $h->{keepit} = 1;
my $msg = "No need to update $pkgname";
if (defined $state->{todo} && $state->{todo} > 0) {
$msg .= " ($state->{todo} to go)";
@@ -263,18 +268,14 @@ sub process_set
my $problem;
for my $h ($set->older, $set->hints) {
next if $h->{update_found};
- my $r = $h->update($self, $set, $state);
-
- if (!defined $r) {
+ if (!defined $h->update($self, $set, $state)) {
$problem = 1;
- } else {
- $set->{updates} += $r;
}
}
if ($problem) {
$state->tracker->cant($set) if !$set->{quirks};
return 0;
- } elsif ($set->{updates} == 0 && $set->newer == 0) {
+ } elsif ($set->older_to_do == 0 && $set->newer == 0) {
$state->tracker->uptodate($set);
return 0;
}