X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=bin%2Frgit;h=53312f8ea1c4f19f956d294df6128568663e727c;hb=b70184fed49dd0135e68ab3491475f50521992f3;hp=61d3016ed30cb26f6591b9d2ea89131d37562a2b;hpb=4c6f2bc56bc50a662b2c2625bcc012d4757f9abf;p=perl%2Fmodules%2Frgit.git diff --git a/bin/rgit b/bin/rgit index 61d3016..53312f8 100755 --- a/bin/rgit +++ b/bin/rgit @@ -8,9 +8,43 @@ use Cwd qw/cwd/; use File::Spec::Functions qw/catfile path/; use List::Util qw/first/; +use App::Rgit::Utils qw/:codes/; use App::Rgit; -our $VERSION = '0.02'; +our $VERSION = '0.03'; + +BEGIN { + if (-t && eval { use Term::ReadKey; 1 }) { + *policy = sub { + my ($cmd, $conf, $repo, $status) = @_; + return NEXT unless $status; + print STDERR "git returned $status\n"; + print STDERR "[a]bort, [i]gnore, [I]gnore all, [r]etry, open [s]hell ?"; + ReadMode 4; + my $key = ReadKey 0; + ReadMode 1; + print STDERR "\n"; + my %codes = ( + 'a' => LAST, + 'i' => NEXT, + 'I' => NEXT | SAVE, + 'r' => REDO, + 's' => LAST, + ); + $key = 'a' unless defined $key; + my $code = $codes{$key}; + $code = $codes{a} unless defined $code; + return $code; + }; + } else { + *policy = sub { + my ($cmd, $conf, $repo, $status) = @_; + return NEXT unless $status; + print STDERR "git returned $status, aborting\n"; + return LAST; + }; + } +} my $cmd = first { !/^-/ } @ARGV; $cmd = ' ' unless defined $cmd; @@ -31,10 +65,11 @@ my $root = $ENV{GIT_DIR}; $root = cwd unless defined $root; exit App::Rgit->new( - git => $git, - root => $root, - cmd => $cmd, - args => \@ARGV + git => $git, + root => $root, + cmd => $cmd, + args => \@ARGV, + policy => \&policy, )->run; __END__ @@ -45,7 +80,7 @@ rgit - Recursively execute a command on all the git repositories in a directory =head1 VERSION -Version 0.02 +Version 0.03 =head1 SYNOPSIS @@ -53,7 +88,7 @@ Version 0.02 =head1 DESCRIPTION -This utility recursively searches in the current directory (or in the directory given by the C environment variable if it's set) for all git repositories, C into each of them, and executes the specified git command. +This utility recursively searches in the current directory (or in the directory given by the C environment variable if it's set) for all git repositories, sort this list by the repository path, C into each of them, and executes the specified git command. Moreover, those formats are substuted in the arguments before running the command : =over 4 @@ -84,7 +119,7 @@ C<^b> with a "bareified" relative path, i.e. C<^g> if this is a bare repository, =item * -C<^B> is the absolute version of the "bareified" path. +C<^B> with an absolute version of the "bareified" path. =item * @@ -96,7 +131,7 @@ C<^^> with a bare C<^>. =back -There are actually a few commands that are only executed once in the current directory : C, C, C and C. +There are actually a few commands that are only executed once in the current directory : C, C, C, C and C. For any of those, no format substitution is done. You can specify which C executable to use with the C environment variable. @@ -117,7 +152,7 @@ Add a remote to all repositories in "/foo/bar" to their bare counterpart in C, L, L, L, L and L. +The core modules L, L, L, L, L, L and L. L.