]> git.vpit.fr Git - perl/modules/rgit.git/blobdiff - lib/App/Rgit/Command/Each.pm
Make sure we chdir to the original directory at the end of App::Rgit::Command::Each...
[perl/modules/rgit.git] / lib / App / Rgit / Command / Each.pm
index 7996f3d1795f515ad3f9057368f1128c95f06f73..d111f3243423b05046ffcebb88f76332a3fee90c 100644 (file)
@@ -5,6 +5,7 @@ use warnings;
 
 use base qw/App::Rgit::Command/;
 
+use App::Rgit::Guard;
 use App::Rgit::Utils qw/:codes/;
 
 =head1 NAME
@@ -13,11 +14,11 @@ App::Rgit::Command::Each - Class for commands to execute for each repository.
 
 =head1 VERSION
 
-Version 0.03
+Version 0.06
 
 =cut
 
-our $VERSION = '0.03';
+our $VERSION = '0.06';
 
 =head1 DESCRIPTION
 
@@ -38,20 +39,29 @@ It implements :
 sub run {
  my $self = shift;
  my $conf = shift;
+
  my $status = 0;
  my $code;
+
+ my $repos = 0;
+ my $guard = App::Rgit::Guard->new(sub { $conf->cwd_repo->chdir if $repos });
+
  for (@{$conf->repos}) {
   $_->chdir or next;
-  $status = $_->run($conf, @{$self->args});
-  $code = $self->report($conf, $_, $status) unless defined $code;
+  ++$repos;
+
+  ($status, my $signal) = $_->run($conf, @{$self->args});
+
+  $code = $self->report($conf, $_, $status, $signal) unless defined $code;
+
+  last if $code & LAST;
   if ($code & REDO) {
    undef $code; # Don't save it, that would be very dumb
    redo;
   }
-  last if $code & LAST;
   undef $code unless $code & SAVE;
  }
- $conf->cwd_repo->chdir;
+
  return wantarray ? ($status, $code) : $status;
 }
 
@@ -59,6 +69,8 @@ sub run {
 
 L<rgit>.
 
+L<App::Rgit::Command>.
+
 =head1 AUTHOR
 
 Vincent Pit, C<< <perl at profvince.com> >>, L<http://profvince.com>.
@@ -77,7 +89,7 @@ You can find documentation for this module with the perldoc command.
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2008 Vincent Pit, all rights reserved.
+Copyright 2008,2009,2010 Vincent Pit, all rights reserved.
 
 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.