X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/592a084c6487b9d5a4992c1aad3817ceb9fa0465..57a3d4a0411f40ebfd0b44799873ffca87449b55:/mrconfig.complex diff --git a/mrconfig.complex b/mrconfig.complex index 2d566c3..b96c5bf 100644 --- a/mrconfig.complex +++ b/mrconfig.complex @@ -4,119 +4,134 @@ # although slightly cut down. [DEFAULT] -# Teach mr how to run svn cleanup. -cleanup = if [ -d "$MR_REPO"/.svn ]; then svn cleanup ; fi -# And how to run git gc and push. -gc = if [ -d "$MR_REPO"/.git ]; then git gc; fi -push = if [ -d "$MR_REPO"/.git ]; then git push; fi -# And how to list tags for git and svn. -tag = - if [ -d "$MR_REPO"/.git ]; then - git tag -l - elsif [ -d "$MR_REPO"/.svn ]; then - url=$(LANG=C svn info . | grep -i ^URL: | cut -d ' ' -f 2) - svn ls "$(echo '$url' | sed -e 's/trunk/tags/')" - else - error "unknown repo type" - fi -# 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) -# - wantmedia checks whether I probably want various large media files -# here. -# - private are hosts I trust private data to +# 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_tags = git tag -l +svn_tags = 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 +# 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". # - 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 - } - kite() { - test "$(hostname)" = wren + on joey@gnu } -[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 + +[Maildir] +# Dummy target to create Maildir. Doesn't run offlineimap since I have that +# cronned on machines where I want it. +update = : +skip = ! full +checkout = mkdir Maildir Maildir/cur Maildir/new Maildir/tmp; chmod 700 Maildir +status = : + +[mail] +checkout = git clone ssh://joey@git.kitenet.net/srv/git/joey/private/mail +# I use mairix to index my mail archive; keep its index up-to-date. +fixups = if [ "$(which mairix)" ]; then ionice -c 3 mairix -Q; fi +skip = ! mylaptop + +[tmp] +# This is a dummy target, all it does is run fixups at the end of +# an update. +fixups = $HOME/bin/fixups +checkout = mkdir -p $HOME/tmp +status = : +order = 25 + +[.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 -[src/linux-2.6] +[.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