From: Joey Hess Date: Fri, 26 Oct 2007 01:58:41 +0000 (-0400) Subject: add X-Git-Url: https://git.madduck.net/code/myrepos.git/commitdiff_plain/321717820389d5f9a28a6546caa06bccd7e2923e?ds=sidebyside add --- diff --git a/mrconfig.git-fake-bare b/mrconfig.git-fake-bare new file mode 100644 index 0000000..83f2202 --- /dev/null +++ b/mrconfig.git-fake-bare @@ -0,0 +1,56 @@ +# An example of how to add a new revision control system type to mr. +# git fake bare repositories have a detached workspace. This file adds +# support for them, separate from the normal git support. + +# To make mr use this file, add a line like this inside the [DEFAULT] +# section of your ~/.mrconfig +#include = cat /path/to/mrconfig.git-fake-bare + +git_fake_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)" = false + +git_fake_bare_update = + # 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" + +git_fake_bare_status = git status "$@" || true + +git_fake_bare_commit = error "commit does not work for fake bare git repositories (yet)." + +git_fake_bare_diff = error "diff does not work for fake bare git repositories (yet)." + +git_fake_bare_log = git log "$@" + +git_fake_bare_register = + url="$(LANG=C GIT_CONFIG=config git-config --get remote.origin.url)" || true + if [ -z "$url" ]; then + error "cannot determine git url" + fi + worktree="$(git-config --get core.worktree)" || true + if [ -z "$worktree" ]; then + error "git worktree is not set" + fi + worktree="${worktree%%/}/" + if [ ! -d "$worktree" ]; then + error "git worktree $worktree does not exist" + fi + mr -c "$MR_CONFIG" config "`pwd`" \ + lib="GIT_WORK_TREE=$work_tree; export GIT_WORK_TREE" + echo "Registering git url: $url in $MR_CONFIG (with worktree $worktree)" + mr -c "$MR_CONFIG" config "`pwd`" \ + checkout=" \ + git clone --no-checkout $url $MR_REPO && \ + cd $MR_REPO && \ + git read-tree HEAD && \ + git checkout-index -a --prefix='$work_tree' || true; \ + git config core.worktree '$worktree' && \ + mv .git/* . && \ + rmdir .git"