X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/fef39d7214a11d37dd7b5e570419de5637bdcda4..4ef69db8078d3baf01bbe797303741aa748b4ee0:/mr diff --git a/mr b/mr index 577725d..5cdf9d4 100755 --- a/mr +++ b/mr @@ -14,6 +14,8 @@ B [options] status B [options] commit [-m "message"] +B [options] diff + B [options] action [params ...] =head1 DESCRIPTION @@ -54,6 +56,14 @@ like git.) The optional -m parameter allows specifying a commit message. +=item diff + +Show a diff of uncommitted changes. + +=item help + +Displays this help. + =back Actions can be abbreviated to any unambiguous subsctring, so @@ -167,7 +177,9 @@ my $result=GetOptions( "v" => \$verbose, ); if (! $result || @ARGV < 1) { - die("Usage: mr [-d directory] action [params ...]\n"); + die("Usage: mr [-d directory] action [params ...]\n". + "(Use mr help for man page.)\n"); + } loadconfig(\*DATA); @@ -175,6 +187,11 @@ loadconfig($config); #use Data::Dumper; #print Dumper(\%config); +eval { + use FindBin qw($Bin $Script); + $ENV{MR_PATH}=$Bin."/".$Script; +}; + # alias expansion and command stemming my $action=shift @ARGV; if (! exists $knownactions{$action}) { @@ -193,6 +210,10 @@ if (! exists $knownactions{$action}) { } } +if ($action eq 'help') { + exec($config{''}{default}{help}); +} + # handle being in a subdir of a repository foreach my $topdir (sort keys %config) { foreach my $subdir (sort keys %{$config{$topdir}}) { @@ -203,7 +224,6 @@ foreach my $topdir (sort keys %config) { } my (@failed, @successful, @skipped); -my $first=1; foreach my $topdir (sort keys %config) { foreach my $subdir (sort keys %{$config{$topdir}}) { next if $subdir eq 'default'; @@ -213,16 +233,10 @@ foreach my $topdir (sort keys %config) { if (defined $directory && $dir ne $directory && $dir !~ /^\Q$directory\E\//) { - print "mr $action: $dir skipped per -d parameter ($directory)\n" if $verbose; - push @skipped, $dir; next; } - print "\n" unless $first; - $first=0; - action($action, $dir, $topdir, $subdir); - } } @@ -283,6 +297,8 @@ sub action { else { push @successful, $dir; } + + print "\n"; } } @@ -295,7 +311,7 @@ sub showstat { } return; } -print "\nmr $action: finished (".join("; ", +print "mr $action: finished (".join("; ", showstat($#successful+1, "successful", "successful"), showstat($#failed+1, "failed", "failed"), showstat($#skipped+1, "skipped", "skipped"), @@ -437,3 +453,17 @@ commit = \ else \ error "unknown repo type"; \ fi +diff = \ + if [ -d .svn ]; then \ + svn diff "$@"; \ + elif [ -d .git ]; then \ + git diff "$@"; \ + else \ + error "unknown repo type"; \ + fi +help = \ + if [ ! -e "$MR_PATH" ]; then \ + error "cannot find program path";\ + fi; \ + (pod2man -c mr "$MR_PATH" | man -l -) || \ + error "pod2man or man failed"