X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Frgit.git;a=blobdiff_plain;f=lib%2FApp%2FRgit%2FCommand%2FEach.pm;h=d111f3243423b05046ffcebb88f76332a3fee90c;hp=c313dc815b760250378c0b95a591a3e827418aac;hb=3c8fbdcb1480e5d245448b8fa2f99fa36c489cf2;hpb=34eec9dcea44c01535ee6ab4593d98a724ce7e06 diff --git a/lib/App/Rgit/Command/Each.pm b/lib/App/Rgit/Command/Each.pm index c313dc8..d111f32 100644 --- a/lib/App/Rgit/Command/Each.pm +++ b/lib/App/Rgit/Command/Each.pm @@ -5,17 +5,20 @@ use warnings; use base qw/App::Rgit::Command/; +use App::Rgit::Guard; +use App::Rgit::Utils qw/:codes/; + =head1 NAME App::Rgit::Command::Each - Class for commands to execute for each repository. =head1 VERSION -Version 0.02 +Version 0.06 =cut -our $VERSION = '0.02'; +our $VERSION = '0.06'; =head1 DESCRIPTION @@ -36,20 +39,38 @@ 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}); - last if $status; + ++$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; + } + undef $code unless $code & SAVE; } - $conf->root_repo->chdir; - return $status; + + return wantarray ? ($status, $code) : $status; } =head1 SEE ALSO L. +L. + =head1 AUTHOR Vincent Pit, C<< >>, L. @@ -68,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.