]> 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 ability to reorder repos, if you want mr to act on a given repo first
authorJoey Hess <joey@kodama.kitenet.net>
Sun, 21 Oct 2007 21:21:22 +0000 (17:21 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sun, 21 Oct 2007 21:21:22 +0000 (17:21 -0400)
  or last.

debian/changelog
mr
mrconfig.complex

index 07270a00966e06ca3fb55999acbf2d44771615a1..22984f35fcefa9331f5e0cfaeb7a878ba148a765 100644 (file)
@@ -5,8 +5,10 @@ mr (0.6) UNRELEASED; urgency=low
   * hours_since was broken by design, and fixing it involved changing
     its calling convention. If you used the old version, the new version
     will error out.
+  * Add ability to reorder repos, if you want mr to act on a given repo first
+    or last.
 
- -- Joey Hess <joeyh@debian.org>  Sun, 21 Oct 2007 13:58:30 -0400
+ -- Joey Hess <joeyh@debian.org>  Sun, 21 Oct 2007 16:50:53 -0400
 
 mr (0.5) unstable; urgency=low
 
diff --git a/mr b/mr
index 89f3281f1137cda05469f33afd05b7df82008a39..0bded236e0e782a267a1d6e2abe5672503197912 100755 (executable)
--- a/mr
+++ b/mr
@@ -231,6 +231,17 @@ been at least 12 hours since the last update.
   skip = test $(whoami) != joey
   skip = [ "$1" = update ] && ! hours_since "$1" 12
 
+=item order
+
+The "order" parameter can be used to override the default ordering of
+repositories. The default order value is 10. Use smaller values to make
+repositories be processed earlier, and larger values to make repositories
+be processed later.
+
+Note that if a repository is located in a subdirectory of another
+repository, ordering it to be processed earlier is not recommended, as this
+can cause confusion during checkouts.
+
 =item chain
 
 If the "chain" parameter is set and its command returns true, then B<mr>
@@ -400,34 +411,55 @@ elsif ($action eq 'register') {
        exec($command) || die "exec: $!";
 }
 
+# an ordered list of repos
+my @list;
+foreach my $topdir (sort keys %config) {
+       foreach my $subdir (sort keys %{$config{$topdir}}) {
+               push @list, {
+                       topdir => $topdir,
+                       subdir => $subdir,
+                       order => $config{$topdir}{$subdir}{order},
+               };
+       }
+}
+@list = sort {
+               $a->{order}  <=> $b->{order}
+                            ||
+               $a->{topdir} cmp $b->{topdir}
+                            ||
+               $a->{subdir} cmp $b->{subdir}
+       } @list;
+
 # work out what repos to act on
 my @repos;
 my $nochdir=0;
-foreach my $topdir (sort keys %config) {
-       foreach my $subdir (sort keys %{$config{$topdir}}) {
+foreach my $repo (@list) {
+       my $topdir=$repo->{topdir};
+       my $subdir=$repo->{subdir};
+
+       next if $subdir eq 'DEFAULT';
+       my $dir=($subdir =~/^\//) ? $subdir : $topdir.$subdir;
+       my $d=$directory;
+       $dir.="/" unless $dir=~/\/$/;
+       $d.="/" unless $d=~/\/$/;
+       next if $no_recurse && $d ne $dir;
+       next if $dir ne $d && $dir !~ /^\Q$d\E/;
+       push @repos, [$dir, $topdir, $subdir];
+}
+if (! @repos) {
+       # fallback to find a leaf repo
+       foreach my $repo (@list) {
+               my $topdir=$repo->{topdir};
+               my $subdir=$repo->{subdir};
+               
                next if $subdir eq 'DEFAULT';
                my $dir=($subdir =~/^\//) ? $subdir : $topdir.$subdir;
                my $d=$directory;
                $dir.="/" unless $dir=~/\/$/;
                $d.="/" unless $d=~/\/$/;
-               next if $no_recurse && $d ne $dir;
-               next if $dir ne $d && $dir !~ /^\Q$d\E/;
-               push @repos, [$dir, $topdir, $subdir];
-       }
-}
-if (! @repos) {
-       # fallback to find a leaf repo
-       LEAF: foreach my $topdir (reverse sort keys %config) {
-               foreach my $subdir (reverse sort keys %{$config{$topdir}}) {
-                       next if $subdir eq 'DEFAULT';
-                       my $dir=($subdir =~/^\//) ? $subdir : $topdir.$subdir;
-                       my $d=$directory;
-                       $dir.="/" unless $dir=~/\/$/;
-                       $d.="/" unless $d=~/\/$/;
-                       if ($d=~/^\Q$dir\E/) {
-                               push @repos, [$dir, $topdir, $subdir];
-                               last LEAF;
-                       }
+               if ($d=~/^\Q$dir\E/) {
+                       push @repos, [$dir, $topdir, $subdir];
+                       last;
                }
        }
        $nochdir=1;
@@ -893,6 +925,7 @@ ci = commit
 ls = list
 
 [DEFAULT]
+order = 10
 lib =
        error() {
                echo "mr: $@" >&2
index f8ec25c2d30c6dfd85f39ab0d9233f73e84a0d27..e5699d8dda8fc8279ecf9dea4025f8e353f6ebff 100644 (file)
@@ -104,6 +104,16 @@ update = svn update && svnfix
 checkout = git clone ssh://git.kitenet.net/srv/git/kitenet.net/joey/private/mail
 skip = ! private
 
+# I don't keep my music in revision control, but mr can be taught to use
+# unison to synchronise it.
+[sound]
+checkout = unison -batch sound
+update = unison -batch sound
+commit = unison sound
+skip = ! wantmedia
+# Update this last of all.
+order = 100
+
 # Example of how to remember to delete a repo, when one mrconfig file is
 # used on multiple systems. If you're feeling brave, use rm -rf $MR_REPO
 # instead. This approach can also be used for renames.