summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2009-12-27 22:27:03 +0000
committerespie <espie@openbsd.org>2009-12-27 22:27:03 +0000
commit6233ac2fd610cd6b6c42651c796230dd57185630 (patch)
treeccd2c8431e1bd379be5cc89c891846f49ba567d8
parentcheck for loops and merge sets, in case we end up with real funky depends. (diff)
downloadwireguard-openbsd-6233ac2fd610cd6b6c42651c796230dd57185630.tar.xz
wireguard-openbsd-6233ac2fd610cd6b6c42651c796230dd57185630.zip
tweak forward dep "almost ready" code and activate loop checker.
-rw-r--r--usr.sbin/pkg_add/pkg_add28
1 files changed, 15 insertions, 13 deletions
diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add
index e604e8e07bc..8beaaee3e68 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.438 2009/12/27 01:24:42 espie Exp $
+# $OpenBSD: pkg_add,v 1.439 2009/12/27 22:27:03 espie Exp $
#
# Copyright (c) 2003-2009 Marc Espie <espie@openbsd.org>
#
@@ -255,6 +255,17 @@ sub can_install
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}) {
@@ -263,17 +274,6 @@ sub can_install
} else {
return 0;
}
-# XXX can't do this yet, have to protect updates against loops
-# $later = 1;
-# 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));
-# }
-# }
}
}
@@ -640,7 +640,9 @@ sub install_set
}
if (@deps > 0) {
$state->build_deptree($set, @deps);
- # here I can check for loops
+ if ($set->{solver}->check_for_loops($state)) {
+ return $set;
+ }
return (@deps, $set);
}
}