# An example config file for the mr(1) command. # # This is fairly close to the config file used by the author # although slightly cut down. [DEFAULT] # 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 "$(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 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 # - 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 lib = hostname="$(hostname)" whoami="$(whoami)" anon() { ( GIT_CONFIG=$HOME/.git/config git config remote.origin.url || cat .git/remotes/origin ) | grep -q 'git://' } full() { test "$whoami" = joey && ! anon } 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() { on joey@wren joey@kodama joey@dragon joey@dodo joey@turtle \ joey@blurbird joey@slug } mylaptop() { on kodama } # 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 [.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 || ([ "$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 = 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 commit -a && git push kite push = git push kite skip = ! mylaptop [html/www.debian.org] # Still in CVS..urk! 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 || ! full