summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2009-11-16 15:01:31 +0000
committerMarc Espie <espie@cvs.openbsd.org>2009-11-16 15:01:31 +0000
commit89b4744e285aab6945e82f6cb24aa0b123ceef03 (patch)
treec45b71572a25beb27a13e85d62db96196f52332f
parent2cc1ee1bc9a928fdb96b50ea985a4b5e63df5e66 (diff)
unify hints and normal updates some more
-rw-r--r--usr.sbin/pkg_add/OpenBSD/Update.pm37
-rw-r--r--usr.sbin/pkg_add/pkg_add78
2 files changed, 73 insertions, 42 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/Update.pm b/usr.sbin/pkg_add/OpenBSD/Update.pm
index 0ee017497a0..45f32f5d009 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.94 2009/11/16 14:47:05 espie Exp $
+# $OpenBSD: Update.pm,v 1.95 2009/11/16 15:01:30 espie Exp $
#
# Copyright (c) 2004-2006 Marc Espie <espie@openbsd.org>
#
@@ -162,4 +162,39 @@ sub process_hint
}
}
+sub process_set
+{
+ my ($self, $set, $state) = @_;
+ my $problem;
+ my $need_update;
+ for my $h ($set->older) {
+ next if $h->{done};
+ my $r = $self->process_handle($set, $h, $state);
+ if (!defined $r) {
+ $problem = 1;
+ }
+ if ($r) {
+ $need_update = 1;
+ }
+ }
+ for my $h ($set->hints) {
+ next if $h->{done};
+ my $r = $self->process_hint($set, $h, $state);
+ if (!defined $r) {
+ $problem = 1;
+ }
+ if ($r) {
+ $need_update = 1;
+ }
+ }
+ if ($problem) {
+ $state->tracker->mark_cantupdate($set);
+ return 0;
+ } elsif (!$need_update) {
+ $state->tracker->mark_uptoupdate($set);
+ return 0;
+ }
+ return 1;
+}
+
1;
diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add
index 0b431faedc6..bb5e24a2bb0 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.386 2009/11/16 14:47:05 espie Exp $
+# $OpenBSD: pkg_add,v 1.387 2009/11/16 15:01:30 espie Exp $
#
# Copyright (c) 2003-2009 Marc Espie <espie@openbsd.org>
#
@@ -646,6 +646,36 @@ if ($opt_l && @ARGV != 0) {
# later for the most part...
my @todo2 = ();
+sub inform_user_of_pending_update
+{
+ my $state = shift;
+ my @cantupdate = $state->tracker->cant_update;
+ if (@cantupdate > 0) {
+ $state->print("Cannot find updates for ", join(', ', (@cantupdate > 50 ? @cantupdate[1..50] : @cantupdate)));
+ print " and more" if @cantupdate > 50;
+ print "\n";
+ if (@todo2 == 0) {
+ print "No updates found\n";
+ exit(1);
+ }
+ if ($state->{defines}->{alwaysupdate} ||
+ $state->{full_update} && !$state->{interactive}) {
+ print "Proceeding anyways\n";
+ } else {
+ if (!OpenBSD::Interactive::confirm("Proceed",
+ $state->{interactive}, 0)) {
+ exit(1);
+ }
+ }
+ }
+ if (defined $state->{issues}) {
+ $state->say("There are some ambiguities. ",
+ "Please run in interactive mode again.");
+ }
+ $state->say("Running update ",
+ join(',', map {$_->short_print} @todo2));
+}
+
sub process_parameters
{
if ($opt_l) {
@@ -665,13 +695,11 @@ sub process_parameters
$state->progress->set_header("Looking for packages");
for my $_ (@ARGV) {
my $set = OpenBSD::UpdateSet->new->add_hints($_);
- for my $hint ($set->hints) {
- if ($state->updater->process_hint($set,
- $hint, $state)) {
- push(@todo2, $set);
- }
+ if ($state->updater->process_set($set, $state)) {
+ push(@todo2, $set);
}
}
+ inform_user_of_pending_update($state);
# 2/ update existing stuff
} elsif ($opt_u) {
require OpenBSD::PackageRepository::Installed;
@@ -694,47 +722,15 @@ sub process_parameters
$state->say("Problem finding $pkgname");
} else {
my $set = OpenBSD::UpdateSet->new->add_older(OpenBSD::Handle->from_location($l));
- my $problem = 0;
- for my $l ($set->older) {
- (defined $state->updater->process_handle($set, $l, $state)) or $problem = 1;
- }
- if ($set->newer > 0) {
+ if ($state->updater->process_set($set, $state)) {
push(@todo2, $set);
- } else {
- $state->tracker->mark_uptodate($set);
- }
- if ($problem) {
- $state->tracker->mark_cant_update($set);
}
}
}
$state->progress->next;
- my @cantupdate = $state->tracker->cant_update;
- if (@cantupdate > 0) {
- $state->print("Cannot find updates for ", join(', ', (@cantupdate > 50 ? @cantupdate[1..50] : @cantupdate)));
- print " and more" if @cantupdate > 50;
- print "\n";
- if (@todo2 == 0) {
- print "No updates found\n";
- exit(1);
- }
- if ($state->{defines}->{alwaysupdate} ||
- $state->{full_update} && !$state->{interactive}) {
- print "Proceeding anyways\n";
- } else {
- if (!OpenBSD::Interactive::confirm("Proceed",
- $state->{interactive}, 0)) {
- exit(1);
- }
- }
- }
- if (defined $state->{issues}) {
- $state->say("There are some ambiguities. ",
- "Please run in interactive mode again.");
- }
- $state->say("Running update ",
- join(',', map {$_->short_print} @todo2));
+ inform_user_of_pending_update($state);
+
} else {
# 3/ actual names
find_truelocations(\@ARGV, \@todo2, $state);