summaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2009-12-28 14:38:52 +0000
committerMarc Espie <espie@cvs.openbsd.org>2009-12-28 14:38:52 +0000
commit69ae9cfe601cfcf54e09e2bb9e677e99a96f78fb (patch)
tree25d26ac106a3ab349ccbca93a9b5d8c2527618b7 /usr.sbin
parentb288517c36a0450f17bb90aee6327deb3126670a (diff)
move forward dependency checking to very late, so we can reuse the result.
uncache conflict checking, since it might need to be redone now...
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/pkg_add/pkg_add85
1 files changed, 44 insertions, 41 deletions
diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add
index adf2342a5d6..66711fb6861 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.441 2009/12/28 12:51:26 espie Exp $
+# $OpenBSD: pkg_add,v 1.442 2009/12/28 14:38:51 espie Exp $
#
# Copyright (c) 2003-2009 Marc Espie <espie@openbsd.org>
#
@@ -176,12 +176,10 @@ sub complete
$o->complete_old($state);
}
- return 1 if defined $set->{installable};
+ my $check = $set->can_install($state);
+ return 0 if !defined $check;
- $set->{installable} = $set->can_install($state);
- return 0 if !defined $set->{installable};
-
- if (!$set->{installable}) {
+ if (!$check) {
$set->cleanup(OpenBSD::Handle::CANT_INSTALL);
$state->tracker->cant($set);
}
@@ -249,34 +247,6 @@ sub can_install
return if $later;
- require OpenBSD::ForwardDependencies;
- if (!defined $set->{forward}) {
- $set->{forward} = OpenBSD::ForwardDependencies->find($set);
- my $bad = $set->{forward}->check($set, $state);
-
- if (keys %$bad > 0) {
-# for my $m (keys %$bad) {
-# my $s = $state->tracker->is_to_update($m);
-# if (defined $s) {
-# $set->merge($state->tracker, $s);
-# } else {
-# $set->add_older(OpenBSD::Handle->create_old($m,
-# $state));
-# }
-# }
-# $state->say("Merging ", $set->print, $state->ntogo);
-# return;
- if ($state->{defines}->{updatedepends}) {
- $state->errsay("Forcing update");
- } elsif ($state->{interactive}) {
- if ($state->confirm("Proceed with update anyways", 0)) {
- }
- } else {
- return 0;
- }
- }
- }
-
my $manual_install = 0;
@@ -300,6 +270,38 @@ sub can_install
return 1;
}
+sub check_forward_dependencies
+{
+ my ($set, $state) = @_;
+
+ require OpenBSD::ForwardDependencies;
+ $set->{forward} = OpenBSD::ForwardDependencies->find($set);
+ my $bad = $set->{forward}->check($set, $state);
+
+ if (keys %$bad > 0) {
+# for my $m (keys %$bad) {
+# my $s = $state->tracker->is_to_update($m);
+# if (defined $s) {
+# $set->merge($state->tracker, $s);
+# } else {
+# $set->add_older(OpenBSD::Handle->create_old($m,
+# $state));
+# }
+# }
+# $state->say("Merging ", $set->print, $state->ntogo);
+# return;
+ if ($state->{defines}->{updatedepends}) {
+ $state->errsay("Forcing update");
+ } elsif ($state->{interactive}) {
+ if ($state->confirm("Proceed with update anyways", 0)) {
+ }
+ } else {
+ return 0;
+ }
+ }
+ return 1;
+}
+
sub recheck_conflicts
{
my ($set, $state) = @_;
@@ -662,15 +664,20 @@ sub install_set
}
}
+ if ($set->older_to_do) {
+ if (!$set->check_forward_dependencies($state)) {
+ $set->cleanup(OpenBSD::Handle::CANT_INSTALL);
+ $state->tracker->cant($set);
+ return ();
+ }
+ }
+
# verify dependencies have been installed
my @baddeps = $set->{solver}->check_depends;
if (@baddeps) {
$state->errsay("Can't install ", $set->print,
": can't resolve ", join(',', @baddeps));
- for my $handle ($set->newer) {
- $handle->location->close_now;
- }
$bad++;
$set->cleanup(OpenBSD::Handle::CANT_INSTALL);
$state->tracker->cant($set);
@@ -679,16 +686,12 @@ sub install_set
# print "Didn't need to process: ", join(',', @{$set->{solver}->{todo}}), "\n";
if (!$set->{solver}->solve_wantlibs($state)) {
- for my $handle ($set->newer) {
- $handle->location->close_now;
- }
$set->cleanup(OpenBSD::Handle::CANT_INSTALL);
$state->tracker->cant($set);
$bad++;
return ();
}
# if (!$set->{solver}->solve_tags($state)) {
-# $location->close_now;
# if (!$defines{libdepends}) {
# $bad++;
# return ();