]> git.vpit.fr Git - perl/modules/rgit.git/commitdiff
Make sure we chdir to the original directory at the end of App::Rgit::Command::Each...
authorVincent Pit <vince@profvince.com>
Wed, 24 Feb 2010 17:36:42 +0000 (18:36 +0100)
committerVincent Pit <vince@profvince.com>
Wed, 24 Feb 2010 17:36:42 +0000 (18:36 +0100)
MANIFEST
lib/App/Rgit/Command/Each.pm
lib/App/Rgit/Guard.pm [new file with mode: 0644]
t/00-load.t
t/92-pod-coverage.t

index ded8e848a82f7e922dc8832951fc3ff089cd7c9f..4269543f891b6eca002335be53598ceb7ccc4839 100644 (file)
--- 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
index ef384b76789af71aab74c27a25afdf7238e09d2b..d111f3243423b05046ffcebb88f76332a3fee90c 100644 (file)
@@ -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 (file)
index 0000000..5f5739a
--- /dev/null
@@ -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<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
index 4fac9643b3f7c5d20bbf1dccc6e867d7ee85ea9e..df9d02d8847c24f7c6e084ec12c281c4fbbde2ea 100644 (file)
@@ -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' );
index 3acb46b593680e71ab5db6c66821f753f877b3f1..52226aeac8b337c8d0d58499a63b19456f6b49f8 100644 (file)
@@ -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);