summaryrefslogtreecommitdiffstats
path: root/urpm/parallel.pm
diff options
context:
space:
mode:
Diffstat (limited to 'urpm/parallel.pm')
-rw-r--r--urpm/parallel.pm38
1 files changed, 38 insertions, 0 deletions
diff --git a/urpm/parallel.pm b/urpm/parallel.pm
index f9030698..0b6edba5 100644
--- a/urpm/parallel.pm
+++ b/urpm/parallel.pm
@@ -66,6 +66,44 @@ sub remove {
);
}
+#- parallel find_packages_to_remove
+sub parallel_find_remove {
+ my ($parallel, $urpm, $state, $l, %options) = @_;
+
+ my ($test, $pkgs) = urpm::parallel::find_remove_pre($urpm, $state, %options);
+ $pkgs and return @$pkgs;
+
+ my (%bad_nodes, %base_to_remove, %notfound);
+
+ #- now try an iteration of urpme.
+ $parallel->urpm_popen($urpm, 'urpme', "--auto $test" . join(' ', map { "'$_'" } @$l) . ' 2>&1', sub {
+ my ($node, $s) = @_;
+
+ urpm::parallel::parse_urpme_output($urpm, $state, $node, $s,
+ \%notfound, \%base_to_remove, \%bad_nodes, %options);
+ });
+
+ #- check base, which has been delayed until there.
+ if ($options{callback_base} && %base_to_remove) {
+ $options{callback_base}->($urpm, keys %base_to_remove) or return ();
+ }
+
+ #- build error list contains all the error returned by each node.
+ $urpm->{error_remove} = [ map {
+ my $msg = N("on node %s", $_);
+ map { "$msg, $_" } @{$bad_nodes{$_}};
+ } keys %bad_nodes ];
+
+ #- if at least one node has the package, it should be seen as unknown...
+ delete @notfound{map { /^(.*)-[^-]*-[^-]*$/ } keys %{$state->{rejected}}};
+ if (%notfound) {
+ $options{callback_notfound} && $options{callback_notfound}->($urpm, keys %notfound)
+ or delete $state->{rejected};
+ }
+
+ keys %{$state->{rejected}};
+}
+
sub post_register_rpms {
my ($parallel, $urpm, @files) = @_;