X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/51d39a2b9b48c1e31f96cc6f629159aaa722fecf..0460be30602c0b1dbf31ea5cb470568b27e6ef55:/mr diff --git a/mr b/mr index a5ff4de..4e3d738 100755 --- a/mr +++ b/mr @@ -1,6 +1,7 @@ #!/usr/bin/perl #man{{{ + =head1 NAME mr - a Multiple Repository management tool @@ -38,7 +39,7 @@ working directory. Or, if you are in a subdirectory of a repository that contains no other registered repositories, it will stay in that directory, and work on only that repository, -The predefined commands should be fairly familiar to users of any revision +These predefined commands should be fairly familiar to users of any revision control system: =over 4 @@ -73,6 +74,12 @@ Show a diff of uncommitted changes. Show the commit log. +=back + +These commands are also available: + +=over 4 + =item list (or ls) List the repositories that mr will act on. @@ -131,6 +138,11 @@ directory. Be verbose. +=item -s + +Expand the statistics line displayed at the end to include information +about exactly which repositories failed and were skipped, if any. + =back =head1 FILES @@ -227,6 +239,7 @@ Licensed under the GNU GPL version 2 or higher. http://kitenet.net/~joey/code/mr/ =cut + #}}} use warnings; @@ -237,6 +250,7 @@ use Cwd qw(getcwd abs_path); my $directory=getcwd(); my $config="$ENV{HOME}/.mrconfig"; my $verbose=0; +my $stats=0; my %config; my %knownactions; my %alias; @@ -245,7 +259,8 @@ Getopt::Long::Configure("no_permute"); my $result=GetOptions( "d|directory=s" => sub { $directory=abs_path($_[1]) }, "c|config=s" => \$config, - "verbose" => \$verbose, + "v|verbose" => \$verbose, + "s|stats" => \$stats, ); if (! $result || @ARGV < 1) { die("Usage: mr [-d directory] action [params ...]\n". @@ -471,6 +486,14 @@ print "mr $action: finished (".join("; ", showstat($#failed+1, "failed", "failed"), showstat($#skipped+1, "skipped", "skipped"), ).")\n"; +if ($stats) { + if (@skipped) { + print "mr $action: (skipped: ".join(" ", @skipped).")\n"; + } + if (@failed) { + print "mr $action: (failed: ".join(" ", @failed).")\n"; + } +} if (@failed) { exit 1; } @@ -510,7 +533,10 @@ sub loadconfig { #{{{ # copy in defaults from first parent my $parent=$dir; - while ($parent=~s/^(.*)\/[^\/]+\/?$/$1/) { + while ($parent=~s/^(.*\/)[^\/]+\/?$/$1/) { + if ($parent eq '/') { + $parent=""; + } if (exists $config{$parent} && exists $config{$parent}{DEFAULT}) { $config{$dir}{DEFAULT}={ %{$config{$parent}{DEFAULT}} }; @@ -525,8 +551,10 @@ sub loadconfig { #{{{ close $in; my $section; + my $line=0; while (@lines) { $_=shift @lines; + $line++; chomp; next if /^\s*\#/ || /^\s*$/; if (/^\[([^\]]*)\]\s*$/) { @@ -539,6 +567,7 @@ sub loadconfig { #{{{ # continued value while (@lines && $lines[0]=~/^\s(.+)/) { shift(@lines); + $line++; $value.="\n$1"; chomp $value; } @@ -570,7 +599,7 @@ sub loadconfig { #{{{ } } else { - die "$f line $.: parse error\n"; + die "$f line $line: parse error\n"; } } @@ -804,4 +833,5 @@ config = ed = echo "A horse is a horse, of course, of course.." T = echo "I pity the fool." +right = echo "Not found." #}}}