From: Joey Hess Date: Thu, 11 Oct 2007 05:18:09 +0000 (-0400) Subject: action X-Git-Url: https://git.madduck.net/code/myrepos.git/commitdiff_plain/f6c757a40f1c19bfabeb673d02ede27255259f78?ds=inline;hp=052ba0de1db046987852e41b14c2fc78ebd905f2 action --- diff --git a/mr b/mr index ee5e5e2..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";