mr (0.41) UNRELEASED; urgency=low
* Add -p switch, that makes mr search the current directory and its
- parents for a .mrconfig file to use. Useful for projects that want
- to publish a mrconfig file to use to check out their several repositories,
- without requiring users put it anywhere in particular.
+ parents for a .mrconfig file to use.
+ * Add `mr bootstrap`, which downloads an url to a .mrconfig file
+ in the current directory and then checks out all repositories configured
+ in it. This is intended for projects that want to publish a mrconfig file
+ to automate use of their several repositories.
-- Joey Hess <joeyh@debian.org> Thu, 06 Aug 2009 22:13:05 -0400
B<mr> [options] log
+B<mr> [options] bootstrap url
+
B<mr> [options] register [repository]
B<mr> [options] config section ["parameter=[value]" ...]
=over 4
+=item bootstrap url
+
+Causes mr to download the url, save it to a .mrconfig file in the
+current directory, and then check out all repositories listed in it.
+
+(Please only do this if you have reason to trust the url, since
+mrconfig files can contain arbitrary commands!)
+
=item list (or ls)
List the repositories that mr will act on.
=head1 AUTHOR
-Copyright 2007 Joey Hess <joey@kitenet.net>
+Copyright 2007-2009 Joey Hess <joey@kitenet.net>
Licensed under the GNU GPL version 2 or higher.
elsif ($action eq 'register') {
register(@ARGV);
}
+ elsif ($action eq 'bootstrap') {
+ bootstrap();
+ }
elsif ($action eq 'remember' ||
$action eq 'offline' ||
$action eq 'online') {
exec($command) || die "exec: $!";
}
+sub bootstrap {
+ my $url=shift @ARGV;
+
+ if (! defined $url || ! length $url) {
+ die "mr: bootstrap requires url\n";
+ }
+
+ if (-e ".mrconfig") {
+ die "mr: .mrconfig file already exists, not overwriting with $url\n";
+ }
+
+ if (system("curl", "-s", $url, "-o", ".mrconfig") != 0) {
+ die "mr: download of $url failed\n";
+ }
+
+ exec("mr $ENV{MR_SWITCHES} -c .mrconfig checkout");
+ die "failed to run mr checkout";
+}
+
# alias expansion and command stemming
sub expandaction {
my $action=shift;
man -l "$tmp" || error "man failed"
list = true
config =
+bootstrap =
online =
if [ -s ~/.mrlog ]; then