aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--URPM/Resolve.pm31
-rw-r--r--perl-URPM.spec6
2 files changed, 30 insertions, 7 deletions
diff --git a/URPM/Resolve.pm b/URPM/Resolve.pm
index 004e894..dc424fb 100644
--- a/URPM/Resolve.pm
+++ b/URPM/Resolve.pm
@@ -84,13 +84,16 @@ sub unsatisfied_requires {
#- close ask_remove (as urpme previously) for package to be removable without error.
sub resolve_closure_ask_remove {
- my ($urpm, $db, $state, $pkg, $from, $why) = @_;
+ my ($urpm, $db, $state, $pkg, $from, $why, $avoided) = @_;
my $name = join '-', ($pkg->fullname)[0..2]; #- specila name (without arch) to allow selection.
my @unsatisfied;
#- allow default value for 'from' to be taken.
$from ||= $name;
+ #- keep track to avoided removed package.
+ $avoided and $avoided->{$pkg->fullname} = undef;
+
#- check if the package has already been asked to be removed,
#- this means only add the new reason and return.
unless ($state->{ask_remove}{$name}) {
@@ -122,6 +125,9 @@ sub resolve_closure_ask_remove {
if (my @l = $urpm->unsatisfied_requires($db, $state, $p, name => $n, keep_state => 1)) {
my $v = $state->{ask_remove}{join '-', ($p->fullname)[0..2]} ||= {};
+ #- keep track to avoided removed package.
+ $avoided and $avoided->{$p->fullname} = undef;
+
#- keep track of what cause closure.
$v->{closure}{$name} = { unsatisfied => \@l };
exists $v->{size} and return;
@@ -290,7 +296,8 @@ sub resolve_requested {
$allow = ++$state->{oldpackage};
$options{keep_state} or
push @properties, $urpm->resolve_closure_ask_remove($db, $state, $p, $pkg->id,
- { old_requested => 1 });
+ { old_requested => 1 },
+ \%avoided);
}
});
#- if nothing has been removed, just ignore it.
@@ -382,7 +389,8 @@ sub resolve_requested {
} else {
$options{keep_state} or
push @properties, $urpm->resolve_closure_ask_remove($db, $state, $p, $pkg->id,
- { unsatisfied => \@l });
+ { unsatisfied => \@l },
+ \%avoided);
}
}
}
@@ -401,13 +409,22 @@ sub resolve_requested {
#- examine conflicts, an existing package conflicting with this selection should
#- be upgraded to a new version which will be safe, else it should be removed.
foreach ($pkg->conflicts) {
+ #- propagate conflicts to avoided.
+ if (my ($n, $o, $v) = /^([^\s\[]*)(?:\[\*\])?\s*\[?([^\s\]]*)\s*([^\s\]]*)/) {
+ foreach (keys %{$urpm->{provides}{$n} || {}}) {
+ my $p = $urpm->{depslist}[$_];
+ $p->name eq $n && (!$o || eval($p->compare($v) . $o . 0)) or next;
+ $avoided{$p->fullname} = $pkg->fullname;
+ }
+ }
if (my ($file) = /^(\/[^\s\[]*)/) {
$db->traverse_tag('path', [ $file ], sub {
my ($p) = @_;
#- all these packages should be removed.
$options{keep_state} or
push @properties, $urpm->resolve_closure_ask_remove($db, $state, $p, $pkg->id,
- { conflicts => $file });
+ { conflicts => $file },
+ \%avoided);
});
} elsif (my ($property, $name) = /^(([^\s\[]*).*)/) {
$db->traverse_tag('whatprovides', [ $name ], sub {
@@ -428,7 +445,8 @@ sub resolve_requested {
#- no package have been found, we need to remove the package examined.
$options{keep_state} or
push @properties, $urpm->resolve_closure_ask_remove($db, $state, $p, $pkg->id,
- { conflicts => $property });
+ { conflicts => $property },
+ \%avoided);
}
}
});
@@ -453,7 +471,8 @@ sub resolve_requested {
#- all these packages should be removed.
$options{keep_state} or
push @properties, $urpm->resolve_closure_ask_remove($db, $state, $p, $pkg->id,
- { conflicts => $property });
+ { conflicts => $property },
+ \%avoided);
}
}
});
diff --git a/perl-URPM.spec b/perl-URPM.spec
index 4573f16..d0c0c48 100644
--- a/perl-URPM.spec
+++ b/perl-URPM.spec
@@ -1,7 +1,7 @@
%define name perl-URPM
%define real_name URPM
%define version 0.81
-%define release 12mdk
+%define release 13mdk
%{expand:%%define rpm_version %(rpm -q --queryformat '%{VERSION}-%{RELEASE}' rpm)}
@@ -49,6 +49,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Mar 12 2003 François Pons <fpons@mandrakesoft.com> 0.81-13mdk
+- fixed bug 3207 (consolidated avoided hash with removed and
+ conflicting packages).
+
* Mon Mar 10 2003 François Pons <fpons@mandrakesoft.com> 0.81-12mdk
- fixed typo in search method.
- fixed wrong resolution of conflicts where an older package