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.08
=cut
-our $VERSION = '0.02';
+our $VERSION = '0.08';
=head1 DESCRIPTION
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;
}
- $self->cwd_as_repo->chdir;
- return $status;
+
+ return wantarray ? ($status, $code) : $status;
}
=head1 SEE ALSO
L<rgit>.
+L<App::Rgit::Command>.
+
=head1 AUTHOR
Vincent Pit, C<< <perl at profvince.com> >>, L<http://profvince.com>.
=head1 BUGS
-Please report any bugs or feature requests to C<bug-rgit at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=rgit>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
+Please report any bugs or feature requests to C<bug-rgit at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=rgit>.
+I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
=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.