X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/f025519645efdd153b5de8957565915837771d51..57a63d4062e8853488d218b84e56dc6d8060678d:/mrconfig.complex

diff --git a/mrconfig.complex b/mrconfig.complex
index c0a1484..47cf979 100644
--- a/mrconfig.complex
+++ b/mrconfig.complex
@@ -9,10 +9,11 @@ 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 "$@"
 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/')"
+# I prefer to git-svn rebase to fetch
+git_svn_update = git svn rebase
+# 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 below.
@@ -20,48 +21,50 @@ quietupdate = mr -s -n update 3>&1 1>/dev/null 2>&3 | egrep -v '(storing tag|tag
 #   $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 = 
+	hostname="$(hostname)"
+	whoami="$(whoami)"
 	anon() {
-		expr $(GIT_CONFIG=$HOME/.git/config git config remote.origin.url) : 'git://' >/dev/null
+		( GIT_CONFIG=$HOME/.git/config git config remote.origin.url || cat .git/remotes/origin ) | grep -q 'git://'
 	}
 	full() {
-		test "$(whoami)" = joey
+		test "$whoami" = joey && ! anon
 	}
-	wantmedia() {
-		if [ "$(whoami)" = joey ]; then
-			case "$(hostname)" in
-				kodama|dragon|dodo)
-					return 0
-			;;
-			esac
-		fi
+	on() {
+		for host in $@; do
+			if [ "${host%@*}" != "${host#*@}" ]; then
+				if [ "$whoami" != "${host%@*}" ]; then
+					continue
+				fi
+				host="${host#*@}"
+			fi
+			if [ "$hostname" = "$host" ]; then
+				return 0
+			fi
+		done
 		return 1
 	}
+	wantmedia() {
+		on joey@kodama joey@dragon joey@dodo joey@turtle
+	}
 	private() {
-		if [ "$(whoami)" = joey ]; then
-			case "$(hostname)" in
-			wren|kodama|dragon|dodo|bluebird|slug)
-				return 0
-			;;
-			esac
-		fi
-		return 1
+		on joey@wren joey@kodama joey@dragon joey@dodo joey@turtle \
+			joey@blurbird joey@slug
 	}
 	mylaptop() {
-		test "$(hostname)" = kodama
-	}
-	kite() {
-		test "$(hostname)" = wren
+		on kodama
 	}
 
 # The root of my home directory.
 []
+order = 1
 checkout =
 	if anon; then
 		git clone git://git.kitenet.net/joey/home joey
@@ -69,6 +72,14 @@ checkout =
 		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]
@@ -78,6 +89,7 @@ status = :
 order = 25
 
 [.etc]
+order = 2
 checkout = 
 	if anon; then
 		git clone git://git.kitenet.net/joey/home-etc .etc
@@ -104,6 +116,11 @@ checkout = git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linu
 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
+
 [dpkg]
 # A merge of the upstream dpkg git repo and my own personal branch.
 checkout =