summaryrefslogtreecommitdiffstats
path: root/urpm
diff options
context:
space:
mode:
Diffstat (limited to 'urpm')
-rw-r--r--urpm/parallel_ka_run.pm24
-rw-r--r--urpm/parallel_ssh.pm28
2 files changed, 28 insertions, 24 deletions
diff --git a/urpm/parallel_ka_run.pm b/urpm/parallel_ka_run.pm
index ef806b6b..8a60ed8f 100644
--- a/urpm/parallel_ka_run.pm
+++ b/urpm/parallel_ka_run.pm
@@ -75,26 +75,27 @@ sub parallel_install {
}
local (*F, $_);
- my ($node, %good_nodes, $bad);
+ my ($node, %bad_nodes);
$urpm->{log}("parallel_ka_run: rshp -v $parallel->{options} -- urpmi --no-locales --test --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}");
open F, "rshp -v $parallel->{options} -- urpmi --no-locales --test --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line} |";
while ($_ = <F>) {
chomp;
s/<([^>]*)>.*:->:(.*)/$2/ and $node = $1;
- /Installation is possible/ and $good_nodes{$node} = undef;
+ $bad_nodes{$node} .= $_;
+ /Installation failed/ and $bad_nodes{$node} = '';
+ /Installation is possible/ and delete $bad_nodes{$node}, last;
}
close F or $urpm->{fatal}(1, _("rshp failed"));
foreach (keys %{$parallel->{nodes}}) {
- exists $good_nodes{$_} and next;
- $urpm->{error}(_("Installation failed on node %s", $_) . ":\n" . ""); #TODO
- $bad = 1;
- }
- unless ($bad) {
- #- continue installation.
- $urpm->{log}("parallel_ka_run: rshp $parallel->{options} -- urpmi --no-locales --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}");
- system "rshp $parallel->{options} -- urpmi --no-locales --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}";
+ exists $bad_nodes{$_} or next;
+ $urpm->{error}(_("Installation failed on node %s", $_) . ":\n" . $bad_nodes{$_});
}
+ %bad_nodes and return;
+
+ #- continue installation.
+ $urpm->{log}("parallel_ka_run: rshp $parallel->{options} -- urpmi --no-locales --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}");
+ system "rshp $parallel->{options} -- urpmi --no-locales --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}" == 0;
}
@@ -102,7 +103,7 @@ sub parallel_install {
package urpm;
sub handle_parallel_options {
my ($urpm, $options) = @_;
- my ($ka_run_options) = $options =~ /ka-run:(.*)/;
+ my ($media, $ka_run_options) = $options =~ /ka-run(?:\(([^\)]*)\))?:(.*)/;
if ($ka_run_options) {
my ($flush_nodes, %nodes);
@@ -117,6 +118,7 @@ sub handle_parallel_options {
}
return bless {
+ media => $media,
options => $ka_run_options,
nodes => \%nodes,
}, "urpm::parallel_ka_run";
diff --git a/urpm/parallel_ssh.pm b/urpm/parallel_ssh.pm
index 46a21b34..bd7ee200 100644
--- a/urpm/parallel_ssh.pm
+++ b/urpm/parallel_ssh.pm
@@ -77,29 +77,30 @@ sub parallel_install {
system "scp $sources $_:$urpm->{cachedir}/rpms";
}
- my (%good_nodes, $bad);
+ my %bad_nodes;
foreach my $node (keys %{$parallel->{nodes}}) {
local (*F, $_);
$urpm->{log}("parallel_ssh: ssh $node urpmi --no-locales --test --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}");
open F, "ssh $node urpmi --no-locales --test --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line} |";
while ($_ = <F>) {
- chomp;
- /Installation is possible/ and $good_nodes{$node} = undef;
+ $bad_nodes{$node} .= $_;
+ /Installation failed/ and $bad_nodes{$node} = '';
+ /Installation is possible/ and delete $bad_nodes{$node}, last;
}
close F;
}
foreach (keys %{$parallel->{nodes}}) {
- exists $good_nodes{$_} and next;
- $urpm->{error}(_("Installation failed on node %s", $_) . ":\n" . ""); #TODO
- $bad = 1;
+ exists $bad_nodes{$_} or next;
+ $urpm->{error}(_("Installation failed on node %s", $_) . ":\n" . $bad_nodes{$_});
}
- unless ($bad) {
- foreach my $node (keys %{$parallel->{nodes}}) {
- #- continue installation.
- $urpm->{log}("parallel_ssh: ssh $node urpmi --no-locales --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}");
- system "ssh $node urpmi --no-locales --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}";
- }
+ %bad_nodes and return;
+
+ #- continue installation on each nodes.
+ foreach my $node (keys %{$parallel->{nodes}}) {
+ $urpm->{log}("parallel_ssh: ssh $node urpmi --no-locales --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}");
+ system "ssh $node urpmi --no-locales --no-verify-rpm --auto --synthesis $parallel->{synthesis} $parallel->{line}";
}
+ 1;
}
@@ -109,10 +110,11 @@ sub handle_parallel_options {
my ($urpm, $options) = @_;
my ($id, @nodes) = split ':', $options;
- if ($id eq 'ssh') {
+ if ($id =~ /^ssh(?:\(([^\)]*)\))?$/) {
my %nodes; @nodes{@nodes} = undef;
return bless {
+ media => $1,
nodes => \%nodes,
}, "urpm::parallel_ssh";
}