X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/08e80ec74eafb9b4407d42c5334026bcffcfd839..aad156122a343b2bb7532e3275aa0fc8877ea0c8:/mrconfig.complex?ds=inline

diff --git a/mrconfig.complex b/mrconfig.complex
index 7499b44..8eef5eb 100644
--- a/mrconfig.complex
+++ b/mrconfig.complex
@@ -4,111 +4,141 @@
 # although slightly cut down.
 
 [DEFAULT]
-#include = cat $HOME/src/mr/mrconfig.git-fake-bare
+# Include all available libs.
+include = cat /usr/share/mr/* 2>/dev/null || true
 # Teach mr to run a few git and svn specific commands.
 svn_cleanup = svn cleanup "$@"
 git_gc = git gc "$@"
 git_push = git push "$@"
+svn_push = :
 git_tag = git tag -l
-svn_tag = svn ls "$(LANG=C svn info . | grep -i ^URL: | cut -d ' ' -f 2 | sed -e 's/trunk/tags/')"
-# This hack is here because git-pull stupidly outputs tag info to stderr.
+svn_tag = svn ls "$(LC_ALL=C svn info . | grep -i ^URL: | cut -d ' ' -f 2 | sed -e 's/trunk/tags/')"
+# This hack is here because git pull stupidly outputs tag info to stderr.
 # Shut it up but let real errors through, for use in cron.
 quietupdate = mr -s -n update 3>&1 1>/dev/null 2>&3 | egrep -v '(storing tag|tag: )' || true
-# Tests used in the skips below.
-# - wantsrc checks whether I probably want a full source checkout (quite
-#   large)
+# Tests used below.
+# - anon checks whether this is an anonymous checkout, by testing what url
+#   $HOME uses
+# - full checks whether I probably want a full checkout (quite large),
+#   if not, the checkout is minimal
+# - on checks whether the given host basename is one of the listed
+#   values. A value can also have a username in it, ie "joey@dodo".
 # - wantmedia checks whether I probably want various large media files
-#   here.
+#   here
 # - private are hosts I trust private data to
 # - mylaptop only succeeds if it's on my main development laptop, which 
 #   gets lots of extra cruft
-# - kite only succeeds on kite
-lib =
-	wantsrc() {
-		test "$(whoami)" = joey
+lib = 
+	hostname="$(hostname)"
+	whoami="$(whoami)"
+	anon() {
+		( GIT_CONFIG=$HOME/.git/config git config remote.origin.url || cat .git/remotes/origin ) | grep -q 'git://'
 	}
-	wantmedia() {
-		if [ "$(whoami)" = joey ]; then
-			case "$(hostname)" in
-				kodama|dragon|dodo)
-					return 0
-			;;
-			esac
-		fi
-		return 1
+	full() {
+		test "$whoami" = joey && ! anon
 	}
-	private() {
-		if [ "$(whoami)" = joey ]; then
-			case "$(hostname)" in
-			wren|kodama|dragon|dodo|bluebird)
+	on() {
+		for host in $@; do
+			if [ "${host%@*}" != "${host#*@}" ]; then
+				if [ "$whoami" != "${host%@*}" ]; then
+					continue
+				fi
+				host="${host#*@}"
+			fi
+			if [ "$hostname" = "$host" ]; then
 				return 0
-			;;
-			esac
-		fi
+			fi
+		done
 		return 1
 	}
-	mylaptop() {
-		test "$(hostname)" = kodama
+	wantmedia() {
+		on joey@kodama joey@dragon joey@dodo joey@turtle
+	}
+	private() {
+		on joey@wren joey@kodama joey@dragon joey@dodo joey@turtle \
+			joey@blurbird joey@slug
 	}
-	kite() {
-		test "$(hostname)" = wren
+	mylaptop() {
+		on kodama
 	}
 
-[src/mr]
-checkout = git clone ssh://git.kitenet.net/srv/git/kitenet.net/mr
-skip = ! wantsrc
+# The root of my home directory.
+[]
+order = 1
+checkout =
+	if anon; then
+		git clone git://git.kitenet.net/joey/home joey
+	else
+		git clone ssh://git.kitenet.net/srv/git/kitenet.net/joey/home joey
+	fi
+
+# Dummy target to create Maildir. Doesn't run offlineimap since I have that
+# cronned on machines where I want it.
+[Maildir]
+update = :
+skip = ! full
+checkout = mkdir Maildir Maildir/cur Maildir/new Maildir/tmp; chmod 700 Maildir
+status = :
+
+# This is a dummy target, all it does is run fixups at the end of
+# an update.
+[tmp]
+update = fixups
+checkout = fixups
+status = :
+order = 25
 
-[src/linux-2.6]
+[.etc]
+order = 2
+checkout = 
+	if anon; then
+		git clone git://git.kitenet.net/joey/home-etc .etc
+	else
+		git clone ssh://git.kitenet.net/srv/git/kitenet.net/joey/home-etc .etc
+	fi
+
+[.cron]
+checkout =
+	if anon; then
+		git clone git://git.kitenet.net/joey/cron .cron
+	else
+		git clone ssh://git.kitenet.net/srv/git/kitenet.net/joey/cron .cron
+	fi
+
+[packages/perl]
+order = 30
+checkout = svn co svn+ssh://joeyh@svn.debian.org/svn/pkg-perl/trunk perl
+skip = ! mylaptop || ([ "$1" = update ] && ! hours_since "$1" 12)
+
+[linux-2.6]
+order = 20
 checkout = git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
-skip = ! mylaptop || ! wantsrc ||
-	([ "$1" = update ] && ! hours_since "$1" 12)
+skip = ! mylaptop || ([ "$1" = update ] && ! hours_since "$1" 12)
+push = error "as if!"
+
+[/etc]
+# I use etckeeper to keep /etc in git. But it only works if I'm root, 
+# and if it's not already in etc, skip it.
+skip = ! test -d /etc/.git || ! test "$(whoami)" = root
 
-[src/dpkg]
+[dpkg]
 # A merge of the upstream dpkg git repo and my own personal branch.
-checkout =
+checkout = 
 	git clone git://git.debian.org/git/dpkg/dpkg.git &&
 	cd dpkg &&
 	git remote add kite ssh://git.kitenet.net/srv/git/kitenet.net/dpkg &&
 	git fetch kite &&
 	git checkout -b sourcev3 kite/sourcev3
 update = git pull origin master && git pull kite sourcev3
-commit = git push kite
-skip = ! wantsrc
+commit = git commit -a && git push kite
+push = git push kite
+skip = ! mylaptop
 
 [html/www.debian.org]
 # Still in CVS..urk!
-checkout =
-	CVSROOT=:ext:joeyh@cvs.debian.org:/cvs/webwml
-	cvs co -d www.debian.org webwml
+checkout = cvs -d ':ext:joeyh@cvs.debian.org:/cvs/webwml' co -d www.debian.org webwml
 # cvs sucks sufficiently that I prefer to run these commands by hand,
 # and only rarely
 update = echo "skipping cvs update (too slow)"
 status = echo "skipping cvs status (too ugly)"
-skip = ! mylaptop || ! wantsrc
-
-# My home directory, which I keep in svn.
-[]
-checkout = svn co svn+ssh://svn.kitenet.net/srv/svn/joey/trunk/home-$(hostname) joey
-# run svnfix after each update
-update = svn update && svnfix
-
-[mail]
-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.
-[foo]
-update = error "$MR_REPO is no longer used and should be deleted"
-skip = ! test -d "$MR_REPO"
+skip = ! mylaptop || ! full