diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2007-09-07 14:44:53 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2007-09-07 14:44:53 +0000 |
commit | e33b4d554c02fd516d62fbcbf981e9596273b565 (patch) | |
tree | eb8371d72697b7010a0920f923b62336d479e43d /URPM | |
parent | f42a01645785ed74589e027de76ad7e197c0b2b6 (diff) | |
download | perl-URPM-e33b4d554c02fd516d62fbcbf981e9596273b565.tar perl-URPM-e33b4d554c02fd516d62fbcbf981e9596273b565.tar.gz perl-URPM-e33b4d554c02fd516d62fbcbf981e9596273b565.tar.bz2 perl-URPM-e33b4d554c02fd516d62fbcbf981e9596273b565.tar.xz perl-URPM-e33b4d554c02fd516d62fbcbf981e9596273b565.zip |
move code from resolve_requested__no_suggests() into new function _handle_provides_overlap()
Diffstat (limited to 'URPM')
-rw-r--r-- | URPM/Resolve.pm | 73 |
1 files changed, 40 insertions, 33 deletions
diff --git a/URPM/Resolve.pm b/URPM/Resolve.pm index a09ea3d..c7c372f 100644 --- a/URPM/Resolve.pm +++ b/URPM/Resolve.pm @@ -763,39 +763,7 @@ sub resolve_requested__no_suggests { @keep and return; my ($p) = @_; if ($p->provides_overlap($property)) { - $urpm->{debug_URPM}("installed package " . $p->fullname . " is conflicting with " . $pkg->fullname . " (Conflicts: $property)") if $urpm->{debug_URPM}; - - #- the existing package will conflict with the selection; check - #- whether a newer version will be ok, else ask to remove the old. - my $need_deps = $p->name . " > " . ($p->epoch ? $p->epoch . ":" : "") . - $p->version . "-" . $p->release; - my $packages = $urpm->find_candidate_packages($need_deps, avoided => $state->{rejected}); - my $best = join('|', map { $_->id } - grep { ! $_->provides_overlap($property) } - @{$packages->{$p->name}}); - - if (length $best) { - $urpm->{debug_URPM}("promoting " . $urpm->{depslist}[$best]->fullname . " because of conflict above") if $urpm->{debug_URPM}; - unshift @properties, { required => $best, promote_conflicts => $name }; - } else { - if ($options{keep}) { - push @keep, scalar $p->fullname; - } else { - #- no package has been found, we need to remove the package examined. - my $obsoleted; - #- force resolution (#12696, maybe #11885) - if (my $prev = delete $state->{rejected}{$p->fullname}) { - $obsoleted = $prev->{obsoleted}; - } - $urpm->resolve_rejected( - $db, $state, $p, - ($obsoleted ? 'obsoleted' : 'removed') => 1, - unsatisfied => \@properties, - from => scalar $pkg->fullname, - why => { conflicts => $property }, - ); - } - } + _handle_provides_overlap($urpm, $db, $state, $pkg, $p, $property, $name, \@properties, $options{keep} && \@keep); } }); } @@ -889,6 +857,45 @@ sub resolve_requested__no_suggests { grep { exists $state->{selected}{$_->id} } @selected; } + +sub _handle_provides_overlap { + my ($urpm, $db, $state, $pkg, $p, $property, $name, $properties, $keep) = @_; + + $urpm->{debug_URPM}("installed package " . $p->fullname . " is conflicting with " . $pkg->fullname . " (Conflicts: $property)") if $urpm->{debug_URPM}; + + #- the existing package will conflict with the selection; check + #- whether a newer version will be ok, else ask to remove the old. + my $need_deps = $p->name . " > " . ($p->epoch ? $p->epoch . ":" : "") . + $p->version . "-" . $p->release; + my $packages = $urpm->find_candidate_packages($need_deps, avoided => $state->{rejected}); + my $best = join('|', map { $_->id } + grep { ! $_->provides_overlap($property) } + @{$packages->{$p->name}}); + + if (length $best) { + $urpm->{debug_URPM}("promoting " . $urpm->{depslist}[$best]->fullname . " because of conflict above") if $urpm->{debug_URPM}; + unshift @$properties, { required => $best, promote_conflicts => $name }; + } else { + if ($keep) { + push @$keep, scalar $p->fullname; + } else { + #- no package has been found, we need to remove the package examined. + my $obsoleted; + #- force resolution (#12696, maybe #11885) + if (my $prev = delete $state->{rejected}{$p->fullname}) { + $obsoleted = $prev->{obsoleted}; + } + $urpm->resolve_rejected( + $db, $state, $p, + ($obsoleted ? 'obsoleted' : 'removed') => 1, + unsatisfied => $properties, + from => scalar $pkg->fullname, + why => { conflicts => $property }, + ); + } + } +} + sub _id_to_name { my ($urpm, $dep) = @_; if ($dep =~ /^\d+/) { |