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.
Use the specified mrconfig file. The default is B<~/.mrconfig>
+=item -p
+
+Search in the current directory, and its parent directories and use
+the first B<.mrconfig> found, instead of the default B<~/.mrconfig>.
+
=item -v
Be verbose.
=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;
return $action;
}
+sub find_nearest_mrconfig {
+ my $dir=getcwd();
+ while (length $dir) {
+ if (-e "$dir/.mrconfig") {
+ return "$dir/.mrconfig";
+ }
+ $dir=~s/\/[^\/]*$//;
+ }
+ die "no .mrconfig found in path\n";
+}
+
sub getopts {
my @saved=@ARGV;
Getopt::Long::Configure("bundling", "no_permute");
my $result=GetOptions(
"d|directory=s" => sub { $directory=abs_path($_[1]) },
"c|config=s" => sub { $ENV{MR_CONFIG}=$_[1]; $config_overridden=1 },
+ "p|path" => sub { $ENV{MR_CONFIG}=find_nearest_mrconfig(); $config_overridden=1 },
"v|verbose" => \$verbose,
"q|quiet" => \$quiet,
"s|stats" => \$stats,
man -l "$tmp" || error "man failed"
list = true
config =
+bootstrap =
online =
if [ -s ~/.mrlog ]; then