-update =
- case "$(get_repo_type "$MR_REPO")" in
- svn) svn update "$@";;
- git)
- # all this is because of a bug in git-fetch, which requires GIT_DIR set
- local git_dir_override; git_dir_override=.git
- case "$(get_git_repo_type "$MR_REPO")" in
- fake-bare) git_dir_override="$MR_REPO";;
- esac
- args="$@"
- [ -z "$args" ] && args="-t origin master"
- eval GIT_DIR="$git_dir_override" git pull "$args"
- ;;
- bzr) bzr merge "$@";;
- CVS) cvs update "$@";;
- hg) hg pull "$@" && hg update "$@";;
- darcs) darcs pull -a "$@";;
- *) error "unknown repo type";;
- esac
-
-status =
- case "$(get_repo_type "$MR_REPO")" in
- svn) svn status "$@";;
- git) git status "$@" || :;;
- bzr) bzr status "$@";;
- CVS) cvs status "$@";;
- hg) hg status "$@";;
- darcs) darcs whatsnew -ls "$@";;
- *) error "unknown repo type";;
- esac
-
-commit =
- case "$(get_repo_type "$MR_REPO")" in
- svn) svn commit "$@";;
- git)
- case "$(get_git_repo_type "$MR_REPO")" in
- bare) error "cannot commit to bare git repositories";;
- fake-bare) error "commit does not work for fake bare git repositories (yet).";;
- esac
- git commit -a "$@" && git push --all
- ;;
- bzr) bzr commit "$@" && bzr push;;
- CVS) cvs commit "$@";;
- hg) hg commit -m "$@" && hg push;;
- darcs) darcs commit -a -m "$@" && darcs push -a;;
- *) error "unknown repo type";;
- esac
-
-diff =
- case "$(get_repo_type "$MR_REPO")" in
- svn) svn diff "$@";;
- git)
- case "$(get_git_repo_type "$MR_REPO")" in
- bare) error "cannot diff in bare git repositories";;
- fake-bare) error "diff does not work for fake bare git repositories (yet).";;
- esac
- git diff "$@"
- ;;
- bzr) bzr diff "$@";;
- CVS) cvs diff "$@";;
- hg) hg diff "$@";;
- darcs) darcs diff "$@";;
- *) error "unknown repo type";;
- esac
-
-log =
- case "$(get_repo_type "$MR_REPO")" in
- svn) svn log"$@";;
- git) git log "$@";;
- bzr) bzr log "$@";;
- CVS) cvs log "$@";;
- hg) hg log "$@";;
- darcs) darcs changes "$@";;
- *) error "unknown repo type";;
- esac
-
-register =
- if [ -n "$1" ]; then
- cd "$1"
+svn_test = test -d "$MR_REPO"/.svn
+git_test = test -d "$MR_REPO"/.git
+bzr_test = test -d "$MR_REPO"/.bzr
+cvs_test = test -d "$MR_REPO"/CVS
+hg_test = test -d "$MR_REPO"/.hg
+darcs_test = test -d "$MR_REPO"/_darcs
+git_bare_test =
+ test -d "$MR_REPO"/refs/heads && test -d "$MR_REPO"/refs/tags &&
+ test -d "$MR_REPO"/objects && test -f "$MR_REPO"/config &&
+ test "$(GIT_CONFIG="$MR_REPO"/config git-config --get core.bare)" = true
+
+svn_update = svn update "$@"
+git_update = if [ "$@" ]; then git pull "$@"; else git pull -t origin master; fi
+bzr_update = bzr merge "$@"
+cvs_update = cvs update "$@"
+hg_update = hg pull "$@" && hg update "$@"
+darcs_update = darcs pull -a "$@"
+
+svn_status = svn status "$@"
+git_status = git status "$@" || true
+bzr_status = bzr status "$@"
+cvs_status = cvs status "$@"
+hg_status = hg status "$@"
+darcs_status = darcs whatsnew -ls "$@"
+
+svn_commit = svn commit "$@"
+git_commit = git commit -a "$@" && git push --all
+bzr_commit = bzr commit "$@" && bzr push
+cvs_commit = cvs commit "$@"
+hg_commit = hg commit -m "$@" && hg push
+darcs_commit = darcs commit -a -m "$@" && darcs push -a
+
+svn_diff = svn diff "$@"
+git_diff = git diff "$@"
+bzr_diff = bzr diff "$@"
+cvs_diff = cvs diff "$@"
+hg_diff = hg diff "$@"
+darcs_diff = darcs diff "$@"
+
+svn_log = svn log "$@"
+git_log = git log "$@"
+bzr_log = bzr log "$@"
+cvs_log = cvs log "$@"
+hg_log = hg log "$@"
+darcs_log = darcs changes "$@"
+git_bare_log = git log "$@"
+
+svn_register =
+ url=$(LANG=C svn info . | grep -i ^URL: | cut -d ' ' -f 2)
+ if [ -z "$url" ]; then
+ error "cannot determine svn url"