From: Vincent Pit Date: Wed, 24 Feb 2010 17:36:42 +0000 (+0100) Subject: Make sure we chdir to the original directory at the end of App::Rgit::Command::Each... X-Git-Tag: v0.07~6 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Frgit.git;a=commitdiff_plain;h=3c8fbdcb1480e5d245448b8fa2f99fa36c489cf2 Make sure we chdir to the original directory at the end of App::Rgit::Command::Each->run --- diff --git a/MANIFEST b/MANIFEST index ded8e84..4269543 100644 --- a/MANIFEST +++ b/MANIFEST @@ -9,6 +9,7 @@ lib/App/Rgit/Command/Each.pm 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 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; } diff --git a/lib/App/Rgit/Guard.pm b/lib/App/Rgit/Guard.pm new file mode 100644 index 0000000..5f5739a --- /dev/null +++ b/lib/App/Rgit/Guard.pm @@ -0,0 +1,75 @@ +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. + +=head1 METHODS + +=head2 C + +Creates a new C 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 + +Invokes the callback when the guard object goes out of scope. + +=cut + +sub DESTROY { ${$_[0]}->() } + +=head1 SEE ALSO + +L. + +=head1 AUTHOR + +Vincent Pit, C<< >>, L. + +You can contact me by mail or on C (vincent). + +=head1 BUGS + +Please report any bugs or feature requests to C, or through the web interface at L. 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 diff --git a/t/00-load.t b/t/00-load.t index 4fac964..df9d02d 100644 --- a/t/00-load.t +++ b/t/00-load.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 12; +use Test::More tests => 13; BEGIN { use_ok( 'App::Rgit' ); @@ -12,6 +12,7 @@ BEGIN { 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' ); diff --git a/t/92-pod-coverage.t b/t/92-pod-coverage.t index 3acb46b..52226ae 100644 --- a/t/92-pod-coverage.t +++ b/t/92-pod-coverage.t @@ -18,7 +18,7 @@ plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage" if $@ my $trustparents = { coverage_class => 'Pod::Coverage::CountParents' }; -plan tests => 12; +plan tests => 13; pod_coverage_ok('App::Rgit'); @@ -29,6 +29,8 @@ pod_coverage_ok('App::Rgit::Command::Once', $trustparents); 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);