From: Vincent Pit Date: Tue, 7 Oct 2008 21:52:40 +0000 (+0200) Subject: Add a few command line switches. List::Util isn't required anymore X-Git-Tag: v0.04~2 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Frgit.git;a=commitdiff_plain;h=0b92814532347d414b2b8371711c72e8afef174a Add a few command line switches. List::Util isn't required anymore --- diff --git a/Makefile.PL b/Makefile.PL index a3b5a0d..8414683 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -34,7 +34,6 @@ WriteMakefile( 'Exporter' => 0, 'File::Find' => 0, 'File::Spec::Functions' => 0, - 'List::Util' => 0, 'Object::Tiny' => 0, 'POSIX' => 0, }, diff --git a/bin/rgit b/bin/rgit index ca7b0f3..06364ad 100755 --- a/bin/rgit +++ b/bin/rgit @@ -7,49 +7,66 @@ 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.03'; +our $VERSION; +BEGIN { + $VERSION = '0.03'; +} + +my %opts; +my $cmd; 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; - }; + @ARGV = grep { + defined $cmd ? $_ + : ( /^-([IKV]+)$/ ? do { $opts{$_} = 1 for split //, $1; () } + : do { $cmd = $_ unless /^-/; $_ } ) + } @ARGV; + warn "rgit $VERSION\n" if $opts{V}; + $cmd = ' ' unless defined $cmd; +} + +BEGIN { + if (-t && $opts{I}) { + if (eval "require Term::ReadKey; 1") { + Term::ReadKey->import; + *policy = sub { + my ($cmd, $conf, $repo, $status, $signal) = @_; + return NEXT unless $status; + print STDERR 'The command failed for ' . $repo->work . "\n"; + print STDERR "[a]bort, [i]gnore, [I]gnore all, [r]etry ?"; + ReadMode(4); + my $key = ReadKey(0); + ReadMode(1); + print STDERR "\n"; + my %codes = ( + 'a' => LAST, + 'i' => NEXT, + 'I' => NEXT | SAVE, + 'r' => REDO, + ); + $key = 'a' unless defined $key; + my $code = $codes{$key}; + $code = $codes{a} unless defined $code; + return $code; + }; + } else { + warn "You have to install Term::ReadKey to use the interactive mode.\n"; + } } + *policy = sub { NEXT } if $opts{K} and not defined *policy{CODE}; + *policy = sub { + my ($cmd, $conf, $repo, $status, $signal) = @_; + return NEXT unless $status; + return LAST; + } unless defined *policy{CODE}; } setpgrp 0, 0 if $Config{d_setpgrp}; -my $cmd = first { !/^-/ } @ARGV; -$cmd = ' ' unless defined $cmd; - my $git = $ENV{GIT_EXEC_PATH}; unless (defined $git) { for (path) { @@ -85,7 +102,7 @@ Version 0.03 =head1 SYNOPSIS - rgit [GIT_OPTIONS] COMMAND [COMMAND_ARGS] + rgit [-K|-V|-I] [GIT_OPTIONS] COMMAND [COMMAND_ARGS] =head1 DESCRIPTION @@ -137,6 +154,37 @@ For any of those, no format substitution is done. You can specify which C executable to use with the C environment variable. +=head1 COMMAND LINE SWITCHES + +C takes its options as the capital switches that comes before the git command. +It's possible to bundle them together. +They are removed from the argument list before calling C. + +=over 4 + +=item * + +C<-K> + +Keep processing on error. +The default policy is to stop whenever an error occured. + +=item * + +C<-I> + +Enables interactive mode. +Requires L to be installed. +This lets you choose interactively what to do when one of the commands returns a non-zero status. + +=item * + +C<-V> + +Outputs the version. + +=back + =head1 EXAMPLES Execute C on all the repositories below the current directory : @@ -153,7 +201,7 @@ Add a remote to all repositories in "/foo/bar" to their bare counterpart in C, L, L, L, L, L and L. +The core modules L, L, L, L, L and L. L.