#!/usr/bin/perl
+#man{{{
=head1 NAME
mr - a Multiple Repository management tool
=head1 DESCRIPTION
-B<mr> is a Multiple Repository management tool. It allows you to register a
-set of repositories in a .mrconfig file, and then checkout, update, or
-perform other actions on the repositories as if they were one big
-respository.
-
-Any mix of revision control systems can be used with B<mr>, and you can
-define arbitrary actions for commands like "update", "checkout", or "commit".
+B<mr> is a Multiple Repository management tool. It
+can checkout, update, or perform other actions on
+a set of repositories as if they were one combined respository. It
+supports any combination of subversion, git, cvs, and bzr repositories,
+and support for other revision control systems can easily be added.
B<mr> cds into and operates on all registered repsitories at or below your
working directory. Or, if you are in a subdirectory of a repository that
http://kitenet.net/~joey/code/mr/
=cut
+#}}}
use warnings;
use strict;
$nochdir=1;
}
-my (@failed, @successful, @skipped);
+my (@failed, @ok, @skipped);
foreach my $repo (@repos) {
action($action, @$repo);
}
-sub action {
+sub action { #{{{
my ($action, $dir, $topdir, $subdir) = @_;
my $lib= exists $config{$topdir}{$subdir}{lib} ?
}
}
else {
- push @successful, $dir;
+ push @ok, $dir;
}
print "\n";
}
-}
+} #}}}
-sub showstat {
+sub showstat { #{{{
my $count=shift;
my $singular=shift;
my $plural=shift;
return "$count ".($count > 1 ? $plural : $singular);
}
return;
-}
-if (! @successful && ! @failed && ! @skipped) {
+} #}}}
+if (! @ok && ! @failed && ! @skipped) {
die "mr $action: no repositories found to work on\n";
}
print "mr $action: finished (".join("; ",
- showstat($#successful+1, "successful", "successful"),
+ showstat($#ok+1, "ok", "ok"),
showstat($#failed+1, "failed", "failed"),
showstat($#skipped+1, "skipped", "skipped"),
).")\n";
if (@failed) {
exit 1;
}
-elsif (! @successful && @skipped) {
+elsif (! @ok && @skipped) {
exit 1;
}
exit 0;
my %loaded;
-sub loadconfig {
+sub loadconfig { #{{{
my $f=shift;
my @toload;
foreach (@toload) {
loadconfig($_);
}
-}
+} #}}}
-sub modifyconfig {
+sub modifyconfig { #{{{
my $f=shift;
# the section to modify or add
my $targetsection=shift;
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
ed = echo "A horse is a horse, of course, of course.."
T = echo "I pity the fool."
+#}}}