lib/App/Rgit/Command/Once.pm
lib/App/Rgit/Config.pm
lib/App/Rgit/Config/Default.pm
+lib/App/Rgit/Guard.pm
lib/App/Rgit/Policy.pm
lib/App/Rgit/Policy/Default.pm
lib/App/Rgit/Policy/Interactive.pm
use base qw/App::Rgit::Command/;
+use App::Rgit::Guard;
use App::Rgit::Utils qw/:codes/;
=head1 NAME
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
}
undef $code unless $code & SAVE;
}
- $conf->cwd_repo->chdir;
+
return wantarray ? ($status, $code) : $status;
}
--- /dev/null
+package App::Rgit::Guard;
+
+use strict;
+use warnings;
+
+=head1 NAME
+
+App::Rgit::Guard - Scope guard helper for App::Rgit.
+
+=head1 VERSION
+
+Version 0.06
+
+=cut
+
+our $VERSION = '0.06';
+
+=head1 DESCRIPTION
+
+This class implements a simple scope guard object.
+
+This is an internal module to L<rgit>.
+
+=head1 METHODS
+
+=head2 C<new $callback>
+
+Creates a new C<App::Rgit::Guard> object that will call C<$callback> when it is destroyed.
+
+=cut
+
+sub new {
+ my $class = shift;
+ $class = ref $class || $class;
+
+ bless \($_[0]), $class;
+}
+
+=head2 C<DESTROY>
+
+Invokes the callback when the guard object goes out of scope.
+
+=cut
+
+sub DESTROY { ${$_[0]}->() }
+
+=head1 SEE ALSO
+
+L<rgit>.
+
+=head1 AUTHOR
+
+Vincent Pit, C<< <perl at profvince.com> >>, L<http://profvince.com>.
+
+You can contact me by mail or on C<irc.perl.org> (vincent).
+
+=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.
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+ perldoc App::Rgit::Guard
+
+=head1 COPYRIGHT & LICENSE
+
+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.
+
+=cut
+
+1; # End of App::Rgit::Guard
use strict;
use warnings;
-use Test::More tests => 12;
+use Test::More tests => 13;
BEGIN {
use_ok( 'App::Rgit' );
use_ok( 'App::Rgit::Command::Once' );
use_ok( 'App::Rgit::Config' );
use_ok( 'App::Rgit::Config::Default' );
+ use_ok( 'App::Rgit::Guard' );
use_ok( 'App::Rgit::Policy' );
use_ok( 'App::Rgit::Policy::Default' );
use_ok( 'App::Rgit::Policy::Interactive' );
my $trustparents = { coverage_class => 'Pod::Coverage::CountParents' };
-plan tests => 12;
+plan tests => 13;
pod_coverage_ok('App::Rgit');
pod_coverage_ok('App::Rgit::Config');
pod_coverage_ok('App::Rgit::Config::Default', $trustparents);
+pod_coverage_ok('App::Rgit::Guard');
+
pod_coverage_ok('App::Rgit::Policy');
pod_coverage_ok('App::Rgit::Policy::Default', $trustparents);
pod_coverage_ok('App::Rgit::Policy::Interactive', $trustparents);