1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
# 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_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
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
}
mylaptop() {
on joey@gnu
}
# 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
[.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
|