diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2009-12-28 12:51:27 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2009-12-28 12:51:27 +0000 |
commit | 3eb56ed12b79d02ae89d6f9b5e4c82acfedeef91 (patch) | |
tree | 6eb9707882e2c34dcbc9a4de323832d12f29e035 | |
parent | df21489bc4a8c527014cd466bc237d7c7ad3a507 (diff) |
move code around a bit, more functions. Especially do the exec check
ways later, when we're certain we're not going to change the set any longer,
so we don't need to go back.
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/Replace.pm | 6 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_add | 99 |
2 files changed, 62 insertions, 43 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/Replace.pm b/usr.sbin/pkg_add/OpenBSD/Replace.pm index 372134586ae..36bd8b3733c 100644 --- a/usr.sbin/pkg_add/OpenBSD/Replace.pm +++ b/usr.sbin/pkg_add/OpenBSD/Replace.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Replace.pm,v 1.64 2009/12/27 15:32:20 espie Exp $ +# $OpenBSD: Replace.pm,v 1.65 2009/12/28 12:51:26 espie Exp $ # # Copyright (c) 2004-2006 Marc Espie <espie@openbsd.org> # @@ -309,14 +309,10 @@ sub is_set_safe my $ok = 1; for my $pkg ($set->older) { - next if defined $pkg->{exec_checked}; $ok = 0 unless can_old_package_be_replaced($pkg->plist, $state); - $pkg->{exec_checked} = 1; } for my $pkg ($set->newer) { - next if defined $pkg->{exec_checked}; $ok = 0 unless is_new_package_safe($pkg->plist, $state); - $pkg->{exec_checked} = 1; } return 1 if $ok; diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add index 9da16743b9a..adf2342a5d6 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.440 2009/12/28 10:42:02 espie Exp $ +# $OpenBSD: pkg_add,v 1.441 2009/12/28 12:51:26 espie Exp $ # # Copyright (c) 2003-2009 Marc Espie <espie@openbsd.org> # @@ -297,9 +297,7 @@ sub can_install $set->mark_as_manual_install if $manual_install; - require OpenBSD::Replace; - - return OpenBSD::Replace::is_set_safe($set, $state); + return 1; } sub recheck_conflicts @@ -400,17 +398,9 @@ sub iterate } } -sub really_add +sub check_x509_signature { my ($set, $state) = @_; - - for my $h ($set->newer) { - $h->plist->set_infodir($h->location->info); - } - - $set->validate_plists($state); - - my $errors = 0; for my $handle ($set->newer) { $state->set_name_from_handle($handle, '+'); my $plist = $handle->plist; @@ -434,6 +424,21 @@ sub really_add $state->{check_digest} = 0; } } +} + +sub really_add +{ + my ($set, $state) = @_; + + for my $h ($set->newer) { + $h->plist->set_infodir($h->location->info); + } + + $set->validate_plists($state); + + my $errors = 0; + + check_x509_signature($set, $state); if ($state->{not}) { $state->status->what("Pretending to add"); @@ -578,35 +583,14 @@ sub really_add } } -sub install_set +sub newer_has_errors { my ($set, $state) = @_; - $set = $set->real_set; - - if ($set->{finished}) { - return (); - } - - if (!$state->updater->process_set($set, $state)) { - return (); - } - - for my $handle ($set->newer) { - if ($state->tracker->is_installed($handle->pkgname)) { - $set->cleanup(OpenBSD::Handle::ALREADY_INSTALLED); - return (); - } - } - - if (!$set->complete($state)) { - return $set; - } - for my $handle ($set->newer) { if ($handle->has_error(OpenBSD::Handle::ALREADY_INSTALLED)) { $set->cleanup(OpenBSD::Handle::ALREADY_INSTALLED); - return (); + return 1; } if ($handle->has_error) { $state->set_name_from_handle($handle); @@ -615,7 +599,7 @@ sub install_set $bad++; $set->cleanup($handle->has_error); $state->tracker->cant($set); - return (); + return 1; } if ($handle->plist->has('arch')) { @@ -625,11 +609,42 @@ sub install_set if (!$defines{arch}) { $set->cleanup(OpenBSD::Handle::CANT_INSTALL); $state->tracker->cant($set); - return (); + return 1; } } } } + return 0; +} + +sub install_set +{ + my ($set, $state) = @_; + + $set = $set->real_set; + + if ($set->{finished}) { + return (); + } + + if (!$state->updater->process_set($set, $state)) { + return (); + } + + for my $handle ($set->newer) { + if ($state->tracker->is_installed($handle->pkgname)) { + $set->cleanup(OpenBSD::Handle::ALREADY_INSTALLED); + return (); + } + } + + if (!$set->complete($state)) { + return $set; + } + + if (newer_has_errors($set, $state)) { + return (); + } if (!defined $set->{solver} || $set->{solver}->{not_ready}) { delete $set->{solver}; @@ -684,6 +699,14 @@ sub install_set $state->tracker->cant($set); return (); } + if ($set->older_to_do) { + require OpenBSD::Replace; + if (!OpenBSD::Replace::is_set_safe($set, $state)) { + $set->cleanup(OpenBSD::Handle::CANT_INSTALL); + $state->tracker->cant($set); + return (); + } + } really_add($set, $state); $set->cleanup; $state->tracker->done($set); |