X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/c31d2ce101d2be10f6a4b47e7bee0dd6875d71aa..f6c757a40f1c19bfabeb673d02ede27255259f78:/mr diff --git a/mr b/mr index 2a43906..6988ed2 100755 --- a/mr +++ b/mr @@ -54,6 +54,11 @@ like git.) The optional -m parameter allows specifying a commit message. +=back + +Actions can be abbreviated to any unambiguous subsctring, so +"mr st" is equivilant to "mr status". + =head1 OPTIONS =over 4 @@ -132,6 +137,7 @@ my $directory=getcwd(); my $config="$ENV{HOME}/.mrconfig"; my $verbose=0; my %config; +my %knownactions; Getopt::Long::Configure("no_permute"); my $result=GetOptions( @@ -142,13 +148,23 @@ my $result=GetOptions( if (! $result || @ARGV < 1) { die("Usage: mr [-d directory] action [params ...]\n"); } -my $action=shift @ARGV; loadconfig(\*DATA); loadconfig($config); #use Data::Dumper; #print Dumper(\%config); +my $action=shift @ARGV; +if (! $knownactions{$action}) { + my @matches = grep { /^\Q$action\E/ } keys %knownactions; + if (@matches == 1) { + $action=$matches[0]; + } + else { + die "mr: ambiguous action \"$action\" (matches @matches)\n"; + } +} + my (@failed, @successful, @skipped); my $first=1; foreach my $topdir (sort keys %config) { @@ -312,6 +328,7 @@ sub loadconfig { $config{$dir}{$section}={ %{$config{$dir}{default}} }; } $config{$dir}{$section}{$parameter}=$value; + $knownactions{$parameter}=1; } else { die "$f line $.: parse error\n"; @@ -334,7 +351,7 @@ update = \ elif [ -d .git ]; then \ git pull origin master; \ else \ - echo "mr update: unknown RCS"; \ + echo "mr update: unknown repo type"; \ exit 1; \ fi status = \ @@ -343,15 +360,15 @@ status = \ elif [ -d .git ]; then \ git status || true; \ else \ - echo "mr status: unknown RCS"; \ + echo "mr status: unknown repo type"; \ exit 1; \ fi commit = \ if [ -d .svn ]; then \ svn commit "$@"; \ elif [ -d .git ]; then \ - git commit -a "$@"; \ + git commit -a "$@" && git push --all; \ else \ - echo "mr commit: unknown RCS"; \ + echo "mr commit: unknown repo type"; \ exit 1; \ fi