From 41cd26588f5e8f23073b07b0617a059fcba10b87 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Thu, 10 Jul 2008 11:45:11 +0000 Subject: move parallel_find_remove() (=> avoid duplication) --- urpm/parallel.pm | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'urpm/parallel.pm') 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) = @_; -- cgit v1.2.1