]> git.madduck.net Git - code/myrepos.git/blobdiff - mrconfig.complex

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

mr bootstrap: Fix cross-device rename failure. Closes: #557962
[code/myrepos.git] / mrconfig.complex
index c59c8fe46b69aa88f0c0c8434f4a459a06510bd5..47cf9791067b354eb989984af08e4af6dafed3b4 100644 (file)
 # although slightly cut down.
 
 [DEFAULT]
 # 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"/.svn ]; then
-               git tag
-       elsif [ -d "$MR_REPO"/.git ]; 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.
+# 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_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/')"
+# 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
 # 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
 # - 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
 # - 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
                                return 0
-                       ;;
-                       esac
-               fi
+                       fi
+               done
                return 1
        }
                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
 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") -lt 12 ])
+skip = ! mylaptop || ([ "$1" = update ] && ! hours_since "$1" 12)
+push = error "as if!"
 
 
-[src/dpkg]
+[/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.
 # 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
        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!
 
 [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)"
 # 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
-
-# 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