From 14494b8b340e4b660a4e1acaaf57b76032f97224 Mon Sep 17 00:00:00 2001 From: Francois Pons Date: Wed, 10 Apr 2002 09:48:23 +0000 Subject: fixed 2 resolver bug. --- urpm.pm | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'urpm.pm') diff --git a/urpm.pm b/urpm.pm index 6d14a840..cc096a69 100644 --- a/urpm.pm +++ b/urpm.pm @@ -1599,13 +1599,19 @@ sub filter_packages_to_upgrade { foreach (@{$p->{requires}}) { if (my ($pn, $po, $pv, $pr) = /^([^\s\[]*)(?:\[\*\])?(?:\s+|\[)?([^\s\]]*)\s*([^\s\-\]]*)-?([^\s\]]*)/) { - $pn eq $n && $pn eq $pkg->{name} or next; - ++$needed; - (!$pv || eval(rpmtools::version_compare($pkg->{version}, $pv) . $po . 0)) && - (!$pr || rpmtools::version_compare($pkg->{version}, $pv) != 0 || - eval(rpmtools::version_compare($pkg->{release}, $pr) . $po . 0)) or next; - #- an existing provides (propably the one examined) is satisfying the underlying. - ++$satisfied; + if ($po || $o) { + $pn eq $n && $pn eq $pkg->{name} or next; + ++$needed; + (!$pv || eval(rpmtools::version_compare($pkg->{version}, $pv) . $po . 0)) && + (!$pr || rpmtools::version_compare($pkg->{version}, $pv) != 0 || + eval(rpmtools::version_compare($pkg->{release}, $pr) . $po . 0)) or next; + #- an existing provides (propably the one examined) is satisfying the underlying. + ++$satisfied; + } else { + $pn eq $n or next; + #- a property has been removed since in diff_provides. + ++$needed; + } } } #- check if the package need to be updated because it @@ -1686,6 +1692,7 @@ sub filter_packages_to_upgrade { if (my ($n, $o, $v, $r) = /^([^\s\[]*)(?:\[\*\])?(?:\s+|\[)?([^\s\]]*)\s*([^\s\-\]]*)-?([^\s\]]*)/) { $provides{$_} and next; + print "trying on $n ($o,$v,$r)\n" if /backend/; foreach my $fullname (keys %{$urpm->{params}{provides}{$n} || {}}) { exists $conflicts{$fullname} and next; my $pkg = $urpm->{params}{info}{$fullname}; @@ -1703,8 +1710,8 @@ sub filter_packages_to_upgrade { /^([^\s\[]*)(?:\[\*\])?(?:\s+|\[)?([^\s\]]*)\s*([^\s\-\]]*)-?([^\s\]]*)/) { $pn eq $n or next; my $no = $po eq '==' ? $o : $po; #- CHECK TODO ? - (!$pv || eval(rpmtools::version_compare($pv, $v) . $no . 0)) && - (!$pr || rpmtools::version_compare($pv, $v) != 0 || + (!$pv || !$v || eval(rpmtools::version_compare($pv, $v) . $no . 0)) && + (!$pr || !$r || rpmtools::version_compare($pv, $v) != 0 || eval(rpmtools::version_compare($pr, $r) . $no . 0)) or next; push @{$pre_choices{$pkg->{name}}}, $pkg; } -- cgit v1.2.1