X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/8200c01ad21ff0fbe3e9fcff6f25b645a2b813be..82688d628f05af1fceb96026311ad6b3a9c66b3a:/mr?ds=sidebyside diff --git a/mr b/mr index 2932ea3..72c917c 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) { @@ -209,7 +225,8 @@ sub action { } else { print "mr $action: in $dir\n"; - my $command="set -e; my_action(){ $config{$topdir}{$subdir}{$action} ; }; my_action @ARGV"; + my $command="set -e; my_action(){ $config{$topdir}{$subdir}{$action} ; }; my_action ". + join(" ", map { s/\//\/\//g; s/"/\"/g; '"'.$_.'"' } @ARGV); my $ret=system($command); if ($ret != 0) { print STDERR "mr $action: failed to run: $command\n" if $verbose; @@ -312,6 +329,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 +352,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,16 +361,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 push --all; \ + git commit -a "$@" \ else \ - echo "mr commit: unknown RCS"; \ + echo "mr commit: unknown repo type"; \ exit 1; \ fi