-register = \
- if [ -z "$1" ]; then \
- error "repository directory not specified" \
- fi \
- cd "$1" \
- basedir="$(basename $(pwd))" \
- if [ -d .svn ]; then \
- url=$(svn info . | \
- grep -i ^URL: | cut -d ' ' -f 2) \
- if [ -z "$url" ]; then \
- error "cannot determine svn url" \
- fi \
- echo "Registering svn url: $url" \
- mr config "$(pwd)" checkout="svn co $url $basedir" \
- elif [ -d .git ]; then \
- url=$(git-config --get remote.origin.url) \
- if [ -z "$url" ]; then \
- error "cannot determine git url" \
- fi \
- echo "Registering git url: $url" \
- mr config "$(pwd)" checkout="git clone $url $basedir" \
- else \
- error "unable to register this repo type" \
+ basedir="$(basename $(pwd))"
+ if [ -d .svn ]; then
+ url=$(LANG=C svn info . | grep -i ^URL: | cut -d ' ' -f 2)
+ if [ -z "$url" ]; then
+ error "cannot determine svn url"
+ fi
+ echo "Registering svn url: $url in $MR_CONFIG"
+ mr -c "$MR_CONFIG" config "$(pwd)" checkout="svn co $url $basedir"
+ elif [ -d .git ] || [ "${basedir%.git}" != "$basedir" ]; then
+ GIT_CONFIG=.git/config
+ [ ! -f $GIT_CONFIG ] && GIT_CONFIG=config
+ export GIT_CONFIG
+ url="$(LANG=C git-config --get remote.origin.url)"
+ if [ -z "$url" ]; then
+ error "cannot determine git url"
+ fi
+ if [ $GIT_CONFIG = config ]; then
+ # this seems like a bare repo as it has no worktree.
+ # mr needs a worktree and cannot work with bare
+ # repositories, so ensure that it's "fake bare" and
+ # has a worktree configured.
+ case "$(git-config --get core.bare)" in
+ true) error "cannot register a bare git repository";;
+ esac
+ GIT_WORK_TREE="$(git-config --get core.worktree)" || :
+ case "$GIT_WORK_TREE" in
+ '') error "cannot register a fake bare git repository without core.worktree";;
+ *)
+ if [ ! -d "$GIT_WORK_TREE" ]; then
+ error "git worktree $GIT_WORK_TREE does not exist"
+ fi;;
+ esac
+ suffix=" (with worktree $GIT_WORK_TREE)"
+ mr -c "$MR_CONFIG" config "$(pwd)" \
+ lib="GIT_WORK_TREE=$GIT_WORK_TREE; export GIT_WORK_TREE"
+ unset GIT_WORK_TREE
+ fi
+ echo "Registering git url: $url in $MR_CONFIG${suffix:-}"
+ unset GIT_CONFIG
+ mr -c "$MR_CONFIG" config "$(pwd)" checkout="git clone $url $basedir"
+ elif [ -d .bzr ]; then
+ url=$(cat .bzr/branch/parent)
+ if [ -z "$url" ]; then
+ error "cannot determine bzr url"
+ fi
+ echo "Registering bzr url: $url in $MR_CONFIG"
+ mr -c "$MR_CONFIG" config "$(pwd)" checkout="bzr clone $url $basedir"
+ elif [ -d CVS ]; then
+ repo=$(cat CVS/Repository)
+ root=$(cat CVS/Root)
+ if [ -z "$root" ]; then
+ error "cannot determine cvs root"
+ fi
+ echo "Registering cvs repository $repo at root $root"
+ mr -c "$MR_CONFIG" config "$(pwd)" \
+ checkout="cvs -d '$root' co -d $basedir $repo"
+ elif [ -d .hg ]; then
+ url=$(hg showconfig paths.default)
+ echo "Registering mercurial repo url: $url in $MR_CONFIG"
+ mr -c "$MR_CONFIG" config "$(pwd)" \
+ checkout="hg clone $url $basedir"
+ elif [ -d _darcs ]; then
+ url=$(cat _darcs/prefs/defaultrepo)
+ echo "Registering darcs repository $url in $MR_CONFIG"
+ mr -c "$MR_CONFIG" config "$(pwd)" \
+ checkout="darcs get $url $basedir"
+ else
+ error "unable to register this repo type"