+diff =
+ if [ -d "$MR_REPO"/.svn ]; then
+ svn diff "$@"
+ elif [ -d "$MR_REPO"/.git ]; then
+ git diff "$@"
+ elif [ "${MR_REPO%.git/}" != "$MR_REPO" ]; then
+ error "commit does not work for fake bare git repositories (yet)."
+ elif [ -d "$MR_REPO"/.bzr ]; then
+ bzr diff "$@"
+ elif [ -d "$MR_REPO"/CVS ]; then
+ cvs diff "$@"
+ elif [ -d "$MR_REPO"/.hg ]; then
+ hg diff "$@"
+ elif [ -d "$MR_REPO"/_darcs ]; then
+ darcs diff "$@"
+ else
+ error "unknown repo type"
+ fi
+log =
+ if [ -d "$MR_REPO"/.svn ]; then
+ svn log"$@"
+ elif [ -d "$MR_REPO"/.git ] || [ "${MR_REPO%.git/}" != "$MR_REPO" ]; then
+ git log "$@"
+ elif [ -d "$MR_REPO"/.bzr ]; then
+ bzr log "$@"
+ elif [ -d "$MR_REPO"/CVS ]; then
+ cvs log "$@"
+ elif [ -d "$MR_REPO"/.hg ]; then
+ hg log "$@"
+ elif [ -d "$MR_REPO"/_darcs ]; then
+ darcs changes "$@"
+ else
+ error "unknown repo type"
+ fi
+register =
+ if [ -n "$1" ]; then
+ cd "$1"
+ fi
+ 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"
+ fi
+help =
+ if [ ! -e "$MR_PATH" ]; then
+ error "cannot find program path"
+ fi
+ (pod2man -c mr "$MR_PATH" | man -l -) || error "pod2man or man failed"
+list = true
+config =
+
+ed = echo "A horse is a horse, of course, of course.."
+T = echo "I pity the fool."
+right = echo "Not found."
+#}}}
+
+# vim:sw=8:sts=0:ts=8:noet