]> git.madduck.net Git - code/myrepos.git/commitdiff

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`
authorJoey Hess <joey@gnu.kitenet.net>
Fri, 7 Aug 2009 02:36:30 +0000 (22:36 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Fri, 7 Aug 2009 02:37:18 +0000 (22:37 -0400)
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.

debian/changelog
debian/copyright
mr

index 32958faaa2fdb39de87f3faedb1a44e1950f5e67..87a496ee2a3977f97d16062ead0102136d924457 100644 (file)
@@ -1,9 +1,11 @@
 mr (0.41) UNRELEASED; urgency=low
 
   * Add -p switch, that makes mr search the current directory and its
 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
 
 
  -- Joey Hess <joeyh@debian.org>  Thu, 06 Aug 2009 22:13:05 -0400
 
index 24c49f0c84d6dc326eb2e75dfa1bb1e55b421422..5acf19190ace9ea7847618db5e26cae6dc0e3852 100644 (file)
@@ -1,5 +1,5 @@
 Files: *
 Files: *
-Copyright: (c) 2007 Joey Hess <joeyh@debian.org>
+Copyright: (c) 2007-2009 Joey Hess <joeyh@debian.org>
 License: GPL-2+
  On Debian systems, the complete text of the GPL can be found in
  /usr/share/common-licenses/GPL.
 License: GPL-2+
  On Debian systems, the complete text of the GPL can be found in
  /usr/share/common-licenses/GPL.
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] log
 
+B<mr> [options] bootstrap url
+
 B<mr> [options] register [repository]
 
 B<mr> [options] config section ["parameter=[value]" ...]
 B<mr> [options] register [repository]
 
 B<mr> [options] config section ["parameter=[value]" ...]
@@ -98,6 +100,14 @@ These commands are also available:
 
 =over 4
 
 
 =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.
 =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
 
 
 =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.
 
 
 Licensed under the GNU GPL version 2 or higher.
 
@@ -1023,6 +1033,9 @@ sub dispatch {
        elsif ($action eq 'register') {
                register(@ARGV);
        }
        elsif ($action eq 'register') {
                register(@ARGV);
        }
+       elsif ($action eq 'bootstrap') {
+               bootstrap();
+       }
        elsif ($action eq 'remember' ||
               $action eq 'offline' ||
               $action eq 'online') {
        elsif ($action eq 'remember' ||
               $action eq 'offline' ||
               $action eq 'online') {
@@ -1128,6 +1141,25 @@ sub register {
        exec($command) || die "exec: $!";
 }
 
        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;
 # alias expansion and command stemming
 sub expandaction {
        my $action=shift;
@@ -1393,6 +1425,7 @@ help =
        man -l "$tmp" || error "man failed"
 list = true
 config = 
        man -l "$tmp" || error "man failed"
 list = true
 config = 
+bootstrap = 
 
 online =
        if [ -s ~/.mrlog ]; then
 
 online =
        if [ -s ~/.mrlog ]; then