X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/d81ade697e3720bb1467c2da088b547b54fba7ae..f545405cbfefec20d0d8e2ad77bd1e4203c53932:/mr?ds=sidebyside diff --git a/mr b/mr index 29e5fad..adc0546 100755 --- a/mr +++ b/mr @@ -1,5 +1,7 @@ #!/usr/bin/perl +#man{{{ + =head1 NAME mr - a Multiple Repository management tool @@ -37,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 @@ -72,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. @@ -227,6 +235,8 @@ http://kitenet.net/~joey/code/mr/ =cut +#}}} + use warnings; use strict; use Getopt::Long; @@ -364,7 +374,7 @@ foreach my $repo (@repos) { action($action, @$repo); } -sub action { +sub action { #{{{ my ($action, $dir, $topdir, $subdir) = @_; my $lib= exists $config{$topdir}{$subdir}{lib} ? @@ -450,9 +460,9 @@ sub action { print "\n"; } -} +} #}}} -sub showstat { +sub showstat { #{{{ my $count=shift; my $singular=shift; my $plural=shift; @@ -460,7 +470,7 @@ sub showstat { return "$count ".($count > 1 ? $plural : $singular); } return; -} +} #}}} if (! @ok && ! @failed && ! @skipped) { die "mr $action: no repositories found to work on\n"; } @@ -478,7 +488,7 @@ elsif (! @ok && @skipped) { exit 0; my %loaded; -sub loadconfig { +sub loadconfig { #{{{ my $f=shift; my @toload; @@ -508,7 +518,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}} }; @@ -523,8 +536,10 @@ sub loadconfig { close $in; my $section; + my $line=0; while (@lines) { $_=shift @lines; + $line++; chomp; next if /^\s*\#/ || /^\s*$/; if (/^\[([^\]]*)\]\s*$/) { @@ -537,6 +552,7 @@ sub loadconfig { # continued value while (@lines && $lines[0]=~/^\s(.+)/) { shift(@lines); + $line++; $value.="\n$1"; chomp $value; } @@ -568,16 +584,16 @@ sub loadconfig { } } else { - die "$f line $.: parse error\n"; + die "$f line $line: parse error\n"; } } foreach (@toload) { loadconfig($_); } -} +} #}}} -sub modifyconfig { +sub modifyconfig { #{{{ my $f=shift; # the section to modify or add my $targetsection=shift; @@ -672,10 +688,11 @@ sub modifyconfig { open(my $out, ">", $f) || die "mr: write $f: $!\n"; print $out @out; close $out; -} +} #}}} # Finally, some useful actions that mr knows about by default. # These can be overridden in ~/.mrconfig. +#DATA{{{ __DATA__ [ALIAS] co = checkout @@ -801,3 +818,5 @@ config = ed = echo "A horse is a horse, of course, of course.." T = echo "I pity the fool." +right = echo "Not found." +#}}}