]> git.madduck.net Git - code/myrepos.git/blobdiff - mr

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Add `mr bootstrap`
[code/myrepos.git] / mr
diff --git a/mr b/mr
index 4dbaa7a6a3e1969e01c65b2e7a5ba050c20f970d..fd380dbe80b2657260caae2e840f8ca9a2b42b58 100755 (executable)
--- a/mr
+++ b/mr
@@ -20,6 +20,8 @@ B<mr> [options] diff
 
 B<mr> [options] log
 
+B<mr> [options] bootstrap url
+
 B<mr> [options] register [repository]
 
 B<mr> [options] config section ["parameter=[value]" ...]
@@ -98,6 +100,14 @@ These commands are also available:
 
 =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.
@@ -354,7 +364,7 @@ the documentation in the files for details about using them.
 
 =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.
 
@@ -1023,6 +1033,9 @@ sub dispatch {
        elsif ($action eq 'register') {
                register(@ARGV);
        }
+       elsif ($action eq 'bootstrap') {
+               bootstrap();
+       }
        elsif ($action eq 'remember' ||
               $action eq 'offline' ||
               $action eq 'online') {
@@ -1128,6 +1141,25 @@ sub register {
        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;
@@ -1393,6 +1425,7 @@ help =
        man -l "$tmp" || error "man failed"
 list = true
 config = 
+bootstrap = 
 
 online =
        if [ -s ~/.mrlog ]; then