]>
git.madduck.net Git - code/myrepos.git/blobdiff - mr
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
The optional -m parameter allows specifying a commit message.
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".
+
my $config="$ENV{HOME}/.mrconfig";
my $verbose=0;
my %config;
my $config="$ENV{HOME}/.mrconfig";
my $verbose=0;
my %config;
Getopt::Long::Configure("no_permute");
my $result=GetOptions(
Getopt::Long::Configure("no_permute");
my $result=GetOptions(
if (! $result || @ARGV < 1) {
die("Usage: mr [-d directory] action [params ...]\n");
}
if (! $result || @ARGV < 1) {
die("Usage: mr [-d directory] action [params ...]\n");
}
loadconfig(\*DATA);
loadconfig($config);
#use Data::Dumper;
#print Dumper(\%config);
loadconfig(\*DATA);
loadconfig($config);
#use Data::Dumper;
#print Dumper(\%config);
-my (@failures, @successes, @skipped);
+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) {
foreach my $subdir (sort keys %{$config{$topdir}}) {
my $first=1;
foreach my $topdir (sort keys %config) {
foreach my $subdir (sort keys %{$config{$topdir}}) {
}
else {
print "mr $action: in $dir\n";
}
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;
my $ret=system($command);
if ($ret != 0) {
print STDERR "mr $action: failed to run: $command\n" if $verbose;
- push @failures , $topdir.$subdir;
+ push @failed , $topdir.$subdir;
if ($ret >> 8 != 0) {
print STDERR "mr $action: command failed\n";
}
if ($ret >> 8 != 0) {
print STDERR "mr $action: command failed\n";
}
+ push @successful , $dir;
return;
}
print "\nmr $action: finished (".join("; ",
return;
}
print "\nmr $action: finished (".join("; ",
- showstat($#successes+1, "success", "successes "),
- showstat($#failures+1, "failure", "failures "),
+ showstat($#successful+1, "successful", "successful "),
+ showstat($#failed+1, "failed", "failed "),
showstat($#skipped+1, "skipped", "skipped"),
).")\n";
showstat($#skipped+1, "skipped", "skipped"),
).")\n";
my %loaded;
sub loadconfig {
my %loaded;
sub loadconfig {
$config{$dir}{$section}={ %{$config{$dir}{default}} };
}
$config{$dir}{$section}{$parameter}=$value;
$config{$dir}{$section}={ %{$config{$dir}{default}} };
}
$config{$dir}{$section}{$parameter}=$value;
+ $knownactions{$parameter}=1;
}
else {
die "$f line $.: parse error\n";
}
else {
die "$f line $.: parse error\n";
elif [ -d .git ]; then \
git pull origin master; \
else \
elif [ -d .git ]; then \
git pull origin master; \
else \
- echo "mr update: unknown RCS "; \
+ echo "mr update: unknown repo type "; \
elif [ -d .git ]; then \
git status || true; \
else \
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 \
exit 1; \
fi
commit = \
if [ -d .svn ]; then \
svn commit "$@"; \
elif [ -d .git ]; then \
- echo "mr commit: unknown RCS "; \
+ echo "mr commit: unknown repo type "; \