every_foo for Takfile, add Tak->await_all
[scpubgit/Tak.git] / lib / Tak / Script.pm
index b932fea..00208d2 100644 (file)
@@ -80,6 +80,8 @@ sub run {
     return $self->_run($cmd, $code, @argv);
   } elsif ($code = $self->can("each_$cmd")) {
     return $self->_run_each($cmd, $code, @argv);
+  } elsif ($code = $self->can("every_$cmd")) {
+    return $self->_run_every($cmd, $code, @argv);
   }
   $self->stderr->print("No such command: ${cmd}\n");
   return $self->local_help;
@@ -118,9 +120,6 @@ sub _run_each {
     return;
   }
   my $opt = $self->_maybe_parse_options($code, \@argv);
-  if (my $prepare = $self->can("prepare_$cmd")) {
-    $self->$prepare($opt, @argv);
-  }
   $self->local_client->ensure(connector => 'Tak::ConnectorService');
   foreach my $target (@targets) {
     my $remote = $self->_connection_to($target);
@@ -128,6 +127,19 @@ sub _run_each {
   }
 }
 
+sub _run_every {
+  my ($self, $cmd, $code, @argv) = @_;
+  my @targets = $self->_host_list_for($cmd);
+  unless (@targets) {
+    $self->stderr->print("No targets for ${cmd}\n");
+    return;
+  }
+  my $opt = $self->_maybe_parse_options($code, \@argv);
+  $self->local_client->ensure(connector => 'Tak::ConnectorService');
+  my @remotes = map $self->_connection_to($_), @targets;
+  $self->$code(\@remotes, $opt, @argv);
+}
+
 sub _host_list_for {
   my ($self, $command) = @_;
   my @host_spec = map split(' ', $_), @{$self->options->{host}};