X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Frgit.git;a=blobdiff_plain;f=lib%2FApp%2FRgit%2FCommand%2FEach.pm;fp=lib%2FApp%2FRgit%2FCommand%2FEach.pm;h=d111f3243423b05046ffcebb88f76332a3fee90c;hp=ef384b76789af71aab74c27a25afdf7238e09d2b;hb=3c8fbdcb1480e5d245448b8fa2f99fa36c489cf2;hpb=517c579bda9717613f7faa9ffe41ef1648199e9b diff --git a/lib/App/Rgit/Command/Each.pm b/lib/App/Rgit/Command/Each.pm index ef384b7..d111f32 100644 --- a/lib/App/Rgit/Command/Each.pm +++ b/lib/App/Rgit/Command/Each.pm @@ -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; }