X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/f096cfec16f6b36046862cdf84c88a426948a6dc..a6af578542ff49bdbac29fb5773c24ff2ed4ef5c:/mr diff --git a/mr b/mr index f2e4af5..1741812 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,12 @@ 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}) { if (exists $alias{$action}) { @@ -192,6 +210,19 @@ 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}}) { + if ($directory =~ /^\Q$topdir$subdir\E\//) { + $directory=$topdir.$subdir; + } + } +} + my (@failed, @successful, @skipped); my $first=1; foreach my $topdir (sort keys %config) { @@ -203,16 +234,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); - } } @@ -273,6 +298,9 @@ sub action { else { push @successful, $dir; } + + print "\n" unless $first; + $first=0; } } @@ -285,7 +313,8 @@ sub showstat { } return; } -print "\nmr $action: finished (".join("; ", +print "\n" unless $first; +print "mr $action: finished (".join("; ", showstat($#successful+1, "successful", "successful"), showstat($#failed+1, "failed", "failed"), showstat($#skipped+1, "skipped", "skipped"), @@ -405,17 +434,17 @@ lib = \ } update = \ if [ -d .svn ]; then \ - svn update; \ + svn update "$@"; \ elif [ -d .git ]; then \ - git pull origin master; \ + git pull origin master "$@"; \ else \ error "unknown repo type"; \ fi status = \ if [ -d .svn ]; then \ - svn status; \ + svn status "$@"; \ elif [ -d .git ]; then \ - git status || true; \ + git status "$@" || true; \ else \ error "unknown repo type"; \ fi @@ -427,3 +456,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"