]> 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 ef384b76789af71aab74c27a25afdf7238e09d2b..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
@@ -38,12 +39,21 @@ 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;
+  ++$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
@@ -51,7 +61,7 @@ sub run {
   }
   undef $code unless $code & SAVE;
  }
- $conf->cwd_repo->chdir;
+
  return wantarray ? ($status, $code) : $status;
 }