X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=bin%2Frgit;h=ca7b0f34b2bcb710e34391329a85b19335a3aea9;hb=03469a4e200c6c9cf84a10a005e3e1aca7e848c6;hp=559fd9fbc39e0a32ba1c3a246903dec670ae8992;hpb=70c26265e3b77e713d1c9b39824526b3e1d2ad18;p=perl%2Fmodules%2Frgit.git diff --git a/bin/rgit b/bin/rgit index 559fd9f..ca7b0f3 100755 --- a/bin/rgit +++ b/bin/rgit @@ -4,13 +4,48 @@ use strict; use warnings; use Carp qw/croak/; +use Config qw/%Config/; 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, $signal) = @_; + return NEXT unless $status; + 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, $signal) = @_; + return NEXT unless $status; + return LAST; + }; + } +} + +setpgrp 0, 0 if $Config{d_setpgrp}; my $cmd = first { !/^-/ } @ARGV; $cmd = ' ' unless defined $cmd; @@ -31,10 +66,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 +81,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 +89,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 @@ -96,7 +132,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 +153,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.