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
my $config="$ENV{HOME}/.mrconfig";
my $verbose=0;
my %config;
+my %knownactions;
Getopt::Long::Configure("no_permute");
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) {
}
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;
$config{$dir}{$section}={ %{$config{$dir}{default}} };
}
$config{$dir}{$section}{$parameter}=$value;
+ $knownactions{$parameter}=1;
}
else {
die "$f line $.: parse error\n";
elif [ -d .git ]; then \
git pull origin master; \
else \
- echo "mr update: unknown RCS"; \
+ echo "mr update: unknown repo type"; \
exit 1; \
fi
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 "$@" \
else \
- echo "mr commit: unknown RCS"; \
+ echo "mr commit: unknown repo type"; \
exit 1; \
fi