diff options
Diffstat (limited to 'urpm/parallel.pm')
-rw-r--r-- | urpm/parallel.pm | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/urpm/parallel.pm b/urpm/parallel.pm index 124b6491..6a9207f4 100644 --- a/urpm/parallel.pm +++ b/urpm/parallel.pm @@ -129,4 +129,46 @@ sub parse_urpme_output { return; } +sub simple_resolve_dependencies { + my ($parallel, $urpm, $state, $requested, %options) = @_; + + #- compute command line of urpm? tools. + my $line = $parallel->{line} . ($options{auto_select} ? ' --auto-select' : '') . ($options{keep} ? ' --keep' : ''); + foreach (keys %$requested) { + if (/\|/) { + #- taken from URPM::Resolve to filter out choices, not complete though. + my $packages = $urpm->find_candidate_packages($_); + foreach (values %$packages) { + my ($best_requested, $best); + foreach (@$_) { + exists $state->{selected}{$_->id} and $best_requested = $_, last; + if ($best_requested) { + if ($best_requested && $best_requested != $_) { + $_->compare_pkg($best_requested) > 0 and $best_requested = $_; + } else { + $best_requested = $_; + } + } elsif ($best && $best != $_) { + $_->compare_pkg($best) > 0 and $best = $_; + } else { + $best = $_; + } + } + $_ = $best_requested || $best; + } + #- simplified choice resolution. + my $choice = $options{callback_choices}->($urpm, undef, $state, [ values %$packages ]); + if ($choice) { + $urpm->{source}{$choice->id} and next; #- local packages have already been added. + $line .= ' ' . $choice->fullname; + } + } else { + my $pkg = $urpm->{depslist}[$_] or next; + $urpm->{source}{$pkg->id} and next; #- local packages have already been added. + $line .= ' ' . $pkg->fullname; + } + } + $line; +} + 1; |