diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn index 89ebff5a161a60eb8a1b2857259392a7addf1133..56df4ed26e74cdbb7a4109056b8415570843d846 100644 --- a/doc/vcsh.1.ronn +++ b/doc/vcsh.1.ronn @@ -184,6 +184,15 @@ Interesting knobs you can turn: Defaults to <exact>. +* <$VCSH_VCSH_WORKTREE>: + Can be <absolute>, or <relative>. + + <absolute> will set an absolute path; defaulting to <$HOME>. + + <relative> will set a path relative to <$GIT_DIR>. + + Defaults to <absolute>. + Less interesting knobs you could turn: * <$VCSH_DEBUG>: diff --git a/vcsh b/vcsh index 60fcd99f17ee0b0d0ef5523567daf5a3cb34d1ed..d1283e4e3e8bc3bc9bbf9ba4962ca8ec4fd5ee81 100755 --- a/vcsh +++ b/vcsh @@ -81,6 +81,11 @@ fi [ -z "$VCSH_HOOK_D" ] && VCSH_HOOK_D="$XDG_CONFIG_HOME/vcsh/hooks-enabled" [ -z "$VCSH_BASE" ] && VCSH_BASE="$HOME" [ -z "$VCSH_GITIGNORE" ] && VCSH_GITIGNORE='exact' +[ -z "$VCSH_WORKTREE" ] && VCSH_WORKTREE='absolute' + +if [ ! "x$VCSH_WORKTREE" = 'xabsolute' ] && [ ! "x$VCSH_WORKTREE" = 'xrelative' ]; then + fatal "'\$VCSH_WORKTREE' must equal 'absolute', or 'relative'" 1 +fi help() { @@ -313,8 +318,13 @@ upgrade() { # because otherwise Git complains "fatal: core.bare and core.worktree # do not make sense" git config core.bare false - # in core.worktree, keep a relative reference to the base directory - git config core.worktree $(cd $GIT_DIR && GIT_WORK_TREE="$VCSH_BASE" git rev-parse --show-cdup) + # core.worktree may be absolute or relative to $GIT_DIR, depending on + # user preference + if [ ! "x$VCSH_WORKTREE" = 'xabsolute' ]; then + git config core.worktree $(cd $GIT_DIR && GIT_WORK_TREE="$VCSH_BASE" git rev-parse --show-cdup) + elif [ ! "x$VCSH_WORKTREE" = 'xrelative' ]; then + git config core.worktree "$VCSH_BASE" + fi [ ! "x$VCSH_GITIGNORE" = 'xnone' ] && git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME" git config vcsh.vcsh 'true' use