diff options
-rwxr-xr-x | t/t1510-repo-setup.sh | 5019 |
1 files changed, 618 insertions, 4401 deletions
diff --git a/t/t1510-repo-setup.sh b/t/t1510-repo-setup.sh index f42f206547..4f8f9760a5 100755 --- a/t/t1510-repo-setup.sh +++ b/t/t1510-repo-setup.sh @@ -37,6 +37,8 @@ A few rules for repo setup: " . ./test-lib.sh +here=$(pwd) + test_repo () { ( cd "$1" && @@ -57,4483 +59,698 @@ test_repo () { ) } -# Bit 0 = GIT_WORK_TREE -# Bit 1 = GIT_DIR -# Bit 2 = core.worktree -# Bit 3 = .git is a file -# Bit 4 = bare repo -# Case# = encoding of the above 5 bits - -# -# Case #0 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a directory -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# - worktree is .git's parent directory -# - cwd is at worktree root dir -# - prefix is calculated -# - git_dir is set to ".git" -# - cwd can't be outside worktree - -test_expect_success '#0: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 0 0/sub && - (cd 0 && git init) && - here=$(pwd) -' - -test_expect_success '#0: at root' ' - cat >0/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/0 -setup: cwd: $here/0 -setup: prefix: (null) -EOF - test_repo 0 -' - -test_expect_success '#0: in subdir' ' - cat >0/sub/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/0 -setup: cwd: $here/0 -setup: prefix: sub/ -EOF - test_repo 0/sub -' - -# -# case #1 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a directory -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# GIT_WORK_TREE is ignored -> #0 - -test_expect_success '#1: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 1 1/sub 1.wt 1.wt/sub 1/wt 1/wt/sub && - cd 1 && - git init && - GIT_WORK_TREE=non-existent && - export GIT_WORK_TREE && - cd .. -' - -test_expect_success '#1: at root' ' - cat >1/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/1 -setup: cwd: $here/1 -setup: prefix: (null) -EOF - test_repo 1 -' - -test_expect_success '#1: in subdir' ' - cat >1/sub/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/1 -setup: cwd: $here/1 -setup: prefix: sub/ -EOF - test_repo 1/sub -' - -# -# case #2 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is not set -# - .git is a directory -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# - worktree is at original cwd -# - cwd is unchanged -# - prefix is NULL -# - git_dir is set to $GIT_DIR -# - cwd can't be outside worktree - -test_expect_success '#2: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 2 2/sub && - cd 2 && git init && cd .. -' - -test_expect_success '#2: at root' ' - cat >2/expected <<EOF && -setup: git_dir: $here/2/.git -setup: worktree: $here/2 -setup: cwd: $here/2 -setup: prefix: (null) -EOF - test_repo 2 "$here/2/.git" -' - -test_expect_success '#2: in subdir' ' - cat >2/sub/expected <<EOF && -setup: git_dir: $here/2/.git -setup: worktree: $here/2/sub -setup: cwd: $here/2/sub -setup: prefix: (null) -EOF - test_repo 2/sub "$here/2/.git" -' - -test_expect_success '#2: relative GIT_DIR at root' ' - cat >2/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/2 -setup: cwd: $here/2 -setup: prefix: (null) -EOF - test_repo 2 .git -' - -test_expect_success '#2: relative GIT_DIR in subdir' ' - cat >2/sub/expected <<EOF && -setup: git_dir: ../.git -setup: worktree: $here/2/sub -setup: cwd: $here/2/sub -setup: prefix: (null) -EOF - test_repo 2/sub ../.git -' - -# -# case #3 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is set -# - core.worktree is not set -# - .git is a directory -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# - worktree is set to $GIT_WORK_TREE -# - cwd is at worktree root -# - prefix is calculated -# - git_dir is set to $GIT_DIR -# - cwd can be outside worktree - -test_expect_success '#3: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 3 3/sub 3/sub/sub 3.wt 3.wt/sub 3/wt 3/wt/sub && - cd 3 && git init && cd .. -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=root at root' ' - cat >3/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/3 -setup: cwd: $here/3 -setup: prefix: (null) -EOF - test_repo 3 .git "$here/3" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' ' - cat >3/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/3 -setup: cwd: $here/3 -setup: prefix: (null) -EOF - test_repo 3 .git . -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=root at root' ' - cat >3/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3 -setup: cwd: $here/3 -setup: prefix: (null) -EOF - test_repo 3 "$here/3/.git" "$here/3" -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=root(rel) at root' ' - cat >3/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3 -setup: cwd: $here/3 -setup: prefix: (null) -EOF - test_repo 3 "$here/3/.git" . -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORKTREE=root in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3 -setup: cwd: $here/3 -setup: prefix: sub/sub/ -EOF - test_repo 3/sub/sub ../../.git "$here/3" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3 -setup: cwd: $here/3 -setup: prefix: sub/sub/ -EOF - test_repo 3/sub/sub ../../.git ../.. -' - -test_expect_success '#3: GIT_DIR, GIT_WORKTREE=root in subdir' ' - cat >3/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3 -setup: cwd: $here/3 -setup: prefix: sub/ -EOF - test_repo 3/sub "$here/3/.git" "$here/3" -' - -test_expect_success '#3: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3 -setup: cwd: $here/3 -setup: prefix: sub/sub/ -EOF - test_repo 3/sub/sub "$here/3/.git" ../.. -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=wt at root' ' - cat >3/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/3/wt -setup: cwd: $here/3 -setup: prefix: (null) -EOF - test_repo 3 .git "$here/3/wt" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' ' - cat >3/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/3/wt -setup: cwd: $here/3 -setup: prefix: (null) -EOF - test_repo 3 .git wt -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' ' - cat >3/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3/wt -setup: cwd: $here/3 -setup: prefix: (null) -EOF - test_repo 3 "$here/3/.git" wt -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=wt at root' ' - cat >3/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3/wt -setup: cwd: $here/3 -setup: prefix: (null) -EOF - test_repo 3 "$here/3/.git" "$here/3/wt" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/3/wt -setup: cwd: $here/3/sub/sub -setup: prefix: (null) -EOF - test_repo 3/sub/sub ../../.git "$here/3/wt" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/3/wt -setup: cwd: $here/3/sub/sub -setup: prefix: (null) -EOF - test_repo 3/sub/sub ../../.git ../../wt -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3/wt -setup: cwd: $here/3/sub/sub -setup: prefix: (null) -EOF - test_repo 3/sub/sub "$here/3/.git" ../../wt -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=wt in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here/3/wt -setup: cwd: $here/3/sub/sub -setup: prefix: (null) -EOF - test_repo 3/sub/sub "$here/3/.git" "$here/3/wt" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=.. at root' ' - cat >3/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 3/ -EOF - test_repo 3 .git "$here" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' ' - cat >3/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 3/ -EOF - test_repo 3 .git .. -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=..(rel) at root' ' - cat >3/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 3/ -EOF - test_repo 3 "$here/3/.git" .. -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=.. at root' ' - cat >3/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 3/ -EOF - test_repo 3 "$here/3/.git" "$here" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 3/sub/sub/ -EOF - test_repo 3/sub/sub ../../.git "$here" -' - -test_expect_success '#3: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 3/sub/sub/ -EOF - test_repo 3/sub/sub ../../.git ../../.. -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 3/sub/sub/ -EOF - test_repo 3/sub/sub "$here/3/.git" ../../../ -' - -test_expect_success '#3: GIT_DIR, GIT_WORK_TREE=.. in subdir' ' - cat >3/sub/sub/expected <<EOF && -setup: git_dir: $here/3/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 3/sub/sub/ -EOF - test_repo 3/sub/sub "$here/3/.git" "$here" -' - -# -# case #4 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a directory -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# core.worktree is ignored -> #0 - -test_expect_success '#4: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 4 4/sub && - cd 4 && - git init && - git config core.worktree non-existent && - cd .. -' - -test_expect_success '#4: at root' ' - cat >4/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/4 -setup: cwd: $here/4 -setup: prefix: (null) -EOF - test_repo 4 -' - -test_expect_success '#4: in subdir' ' - cat >4/sub/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/4 -setup: cwd: $here/4 -setup: prefix: sub/ -EOF - test_repo 4/sub -' - -# -# case #5 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a directory -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# GIT_WORK_TREE/core.worktree are ignored -> #0 +maybe_config () { + file=$1 var=$2 value=$3 && + if test "$value" != unset + then + git config --file="$file" "$var" "$value" + fi +} -test_expect_success '#5: setup' ' +setup_repo () { + name=$1 worktreecfg=$2 gitfile=$3 barecfg=$4 && sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 5 5/sub && - cd 5 && - git init && - git config core.worktree non-existent && - GIT_WORK_TREE=non-existent-too && - export GIT_WORK_TREE && - cd .. -' -test_expect_success '#5: at root' ' - cat >5/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/5 -setup: cwd: $here/5 -setup: prefix: (null) -EOF - test_repo 5 -' + git init "$name" && + maybe_config "$name/.git/config" core.worktree "$worktreecfg" && + maybe_config "$name/.git/config" core.bare "$barecfg" && + mkdir -p "$name/sub/sub" && -test_expect_success '#5: in subdir' ' - cat >5/sub/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/5 -setup: cwd: $here/5 -setup: prefix: sub/ -EOF - test_repo 5/sub -' + if test "${gitfile:+set}" + then + mv "$name/.git" "$name.git" && + echo "gitdir: ../$name.git" >"$name/.git" + fi +} -# -# case #6 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a directory -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# - worktree is at core.worktree -# - cwd is at worktree root -# - prefix is calculated -# - git_dir is at $GIT_DIR -# - cwd can be outside worktree +maybe_set () { + var=$1 value=$2 && + if test "$value" != unset + then + eval "$var=\$value" && + export $var + fi +} -test_expect_success '#6: setup' ' +setup_env () { + worktreenv=$1 gitdirenv=$2 && sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 6 6/sub 6/sub/sub 6.wt 6.wt/sub 6/wt 6/wt/sub && - cd 6 && git init && cd .. -' - -test_expect_success '#6: GIT_DIR(rel), core.worktree=.. at root' ' - cat >6/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/6 -setup: cwd: $here/6 -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree "$here/6" && - test_repo 6 .git -' - -test_expect_success '#6: GIT_DIR(rel), core.worktree=..(rel) at root' ' - cat >6/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/6 -setup: cwd: $here/6 -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree .. && - test_repo 6 .git -' - -test_expect_success '#6: GIT_DIR, core.worktree=.. at root' ' - cat >6/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6 -setup: cwd: $here/6 -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree "$here/6" && - test_repo 6 "$here/6/.git" -' - -test_expect_success '#6: GIT_DIR, core.worktree=..(rel) at root' ' - cat >6/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6 -setup: cwd: $here/6 -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree .. && - test_repo 6 "$here/6/.git" -' - -test_expect_success '#6: GIT_DIR(rel), core.worktree=.. in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6 -setup: cwd: $here/6 -setup: prefix: sub/sub/ -EOF - git config --file="$here/6/.git/config" core.worktree "$here/6" && - test_repo 6/sub/sub ../../.git -' - -test_expect_success '#6: GIT_DIR(rel), core.worktree=..(rel) in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6 -setup: cwd: $here/6 -setup: prefix: sub/sub/ -EOF - git config --file="$here/6/.git/config" core.worktree .. && - test_repo 6/sub/sub ../../.git -' - -test_expect_success '#6: GIT_DIR, core.worktree=.. in subdir' ' - cat >6/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6 -setup: cwd: $here/6 -setup: prefix: sub/ -EOF - git config --file="$here/6/.git/config" core.worktree "$here/6" && - test_repo 6/sub "$here/6/.git" -' - -test_expect_success '#6: GIT_DIR, core.worktree=..(rel) in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6 -setup: cwd: $here/6 -setup: prefix: sub/sub/ -EOF - git config --file="$here/6/.git/config" core.worktree .. && - test_repo 6/sub/sub "$here/6/.git" -' - -test_expect_success '#6: GIT_DIR(rel), core.worktree=../wt at root' ' - cat >6/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/6/wt -setup: cwd: $here/6 -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree "$here/6/wt" && - test_repo 6 .git -' - -test_expect_success '#6: GIT_DIR(rel), core.worktree=../wt(rel) at root' ' - cat >6/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/6/wt -setup: cwd: $here/6 -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree ../wt && - test_repo 6 .git -' - -test_expect_success '#6: GIT_DIR, core.worktree=../wt(rel) at root' ' - cat >6/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6/wt -setup: cwd: $here/6 -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree ../wt && - test_repo 6 "$here/6/.git" -' - -test_expect_success '#6: GIT_DIR, core.worktree=../wt at root' ' - cat >6/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6/wt -setup: cwd: $here/6 -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree "$here/6/wt" && - test_repo 6 "$here/6/.git" -' - -test_expect_success '#6: GIT_DIR(rel), core.worktree=../wt in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/6/wt -setup: cwd: $here/6/sub/sub -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree "$here/6/wt" && - test_repo 6/sub/sub ../../.git -' - -test_expect_success '#6: GIT_DIR(rel), core.worktree=../wt(rel) in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/6/wt -setup: cwd: $here/6/sub/sub -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree ../wt && - test_repo 6/sub/sub ../../.git -' - -test_expect_success '#6: GIT_DIR, core.worktree=../wt(rel) in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6/wt -setup: cwd: $here/6/sub/sub -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree ../wt && - test_repo 6/sub/sub "$here/6/.git" -' + maybe_set GIT_DIR "$gitdirenv" && + maybe_set GIT_WORK_TREE "$worktreeenv" +} -test_expect_success '#6: GIT_DIR, core.worktree=../wt in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here/6/wt -setup: cwd: $here/6/sub/sub -setup: prefix: (null) -EOF - git config --file="$here/6/.git/config" core.worktree "$here/6/wt" && - test_repo 6/sub/sub "$here/6/.git" -' +expect () { + cat >"$1/expected" <<-EOF + setup: git_dir: $2 + setup: worktree: $3 + setup: cwd: $4 + setup: prefix: $5 + EOF +} -test_expect_success '#6: GIT_DIR(rel), core.worktree=../.. at root' ' - cat >6/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 6/ -EOF - git config --file="$here/6/.git/config" core.worktree "$here" && - test_repo 6 .git -' +try_case () { + name=$1 worktreeenv=$2 gitdirenv=$3 && + setup_env "$worktreeenv" "$gitdirenv" && + expect "$name" "$4" "$5" "$6" "$7" && + test_repo "$name" +} -test_expect_success '#6: GIT_DIR(rel), core.worktree=../..(rel) at root' ' - cat >6/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 6/ -EOF - git config --file="$here/6/.git/config" core.worktree ../../ && - test_repo 6 .git -' +run_wt_tests () { + N=$1 gitfile=$2 + + absgit="$here/$N/.git" + dotgit=.git + dotdotgit=../../.git + + if test "$gitfile" + then + absgit="$here/$N.git" + dotgit=$absgit dotdotgit=$absgit + fi + + test_expect_success "#$N: explicit GIT_WORK_TREE and GIT_DIR at toplevel" ' + try_case $N "$here/$N" .git \ + "$dotgit" "$here/$N" "$here/$N" "(null)" && + try_case $N . .git \ + "$dotgit" "$here/$N" "$here/$N" "(null)" && + try_case $N "$here/$N" "$here/$N/.git" \ + "$absgit" "$here/$N" "$here/$N" "(null)" && + try_case $N . "$here/$N/.git" \ + "$absgit" "$here/$N" "$here/$N" "(null)" + ' + + test_expect_success "#$N: explicit GIT_WORK_TREE and GIT_DIR in subdir" ' + try_case $N/sub/sub "$here/$N" ../../.git \ + "$absgit" "$here/$N" "$here/$N" sub/sub/ && + try_case $N/sub/sub ../.. ../../.git \ + "$absgit" "$here/$N" "$here/$N" sub/sub/ && + try_case $N/sub/sub "$here/$N" "$here/$N/.git" \ + "$absgit" "$here/$N" "$here/$N" sub/sub/ && + try_case $N/sub/sub ../.. "$here/$N/.git" \ + "$absgit" "$here/$N" "$here/$N" sub/sub/ + ' + + test_expect_success "#$N: explicit GIT_WORK_TREE from parent of worktree" ' + try_case $N "$here/$N/wt" .git \ + "$dotgit" "$here/$N/wt" "$here/$N" "(null)" && + try_case $N wt .git \ + "$dotgit" "$here/$N/wt" "$here/$N" "(null)" && + try_case $N wt "$here/$N/.git" \ + "$absgit" "$here/$N/wt" "$here/$N" "(null)" && + try_case $N "$here/$N/wt" "$here/$N/.git" \ + "$absgit" "$here/$N/wt" "$here/$N" "(null)" + ' + + test_expect_success "#$N: explicit GIT_WORK_TREE from nephew of worktree" ' + try_case $N/sub/sub "$here/$N/wt" ../../.git \ + "$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" && + try_case $N/sub/sub ../../wt ../../.git \ + "$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" && + try_case $N/sub/sub ../../wt "$here/$N/.git" \ + "$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" && + try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \ + "$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" + ' + + test_expect_success "#$N: chdir_to_toplevel uses worktree, not git dir" ' + try_case $N "$here" .git \ + "$absgit" "$here" "$here" $N/ && + try_case $N .. .git \ + "$absgit" "$here" "$here" $N/ && + try_case $N .. "$here/$N/.git" \ + "$absgit" "$here" "$here" $N/ && + try_case $N "$here" "$here/$N/.git" \ + "$absgit" "$here" "$here" $N/ + ' + + test_expect_success "#$N: chdir_to_toplevel uses worktree (from subdir)" ' + try_case $N/sub/sub "$here" ../../.git \ + "$absgit" "$here" "$here" $N/sub/sub/ && + try_case $N/sub/sub ../../.. ../../.git \ + "$absgit" "$here" "$here" $N/sub/sub/ && + try_case $N/sub/sub ../../../ "$here/$N/.git" \ + "$absgit" "$here" "$here" $N/sub/sub/ && + try_case $N/sub/sub "$here" "$here/$N/.git" \ + "$absgit" "$here" "$here" $N/sub/sub/ + ' +} -test_expect_success '#6: GIT_DIR, core.worktree=../..(rel) at root' ' - cat >6/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 6/ -EOF - git config --file="$here/6/.git/config" core.worktree ../../ && - test_repo 6 "$here/6/.git" -' +# try_repo #c GIT_WORK_TREE GIT_DIR core.worktree .gitfile? core.bare \ +# (git dir) (work tree) (cwd) (prefix) \ <-- at toplevel +# (git dir) (work tree) (cwd) (prefix) <-- from subdir +try_repo () { + name=$1 worktreeenv=$2 gitdirenv=$3 && + setup_repo "$name" "$4" "$5" "$6" && + shift 6 && + try_case "$name" "$worktreeenv" "$gitdirenv" \ + "$1" "$2" "$3" "$4" && + shift 4 && + case "$gitdirenv" in + /* | ?:/* | unset) ;; + *) + gitdirenv=../$gitdirenv ;; + esac && + try_case "$name/sub" "$worktreeenv" "$gitdirenv" \ + "$1" "$2" "$3" "$4" +} -test_expect_success '#6: GIT_DIR, core.worktree=../.. at root' ' - cat >6/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 6/ -EOF - git config --file="$here/6/.git/config" core.worktree "$here" && - test_repo 6 "$here/6/.git" -' +# Bit 0 = GIT_WORK_TREE +# Bit 1 = GIT_DIR +# Bit 2 = core.worktree +# Bit 3 = .git is a file +# Bit 4 = bare repo +# Case# = encoding of the above 5 bits -test_expect_success '#6: GIT_DIR(rel), core.worktree=../.. in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 6/sub/sub/ -EOF - git config --file="$here/6/.git/config" core.worktree "$here" && - test_repo 6/sub/sub ../../.git +test_expect_success '#0: nonbare repo, no explicit configuration' ' + try_repo 0 unset unset unset "" unset \ + .git "$here/0" "$here/0" "(null)" \ + .git "$here/0" "$here/0" sub/ ' -test_expect_success '#6: GIT_DIR(rel), core.worktree=../..(rel) in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 6/sub/sub/ -EOF - git config --file="$here/6/.git/config" core.worktree ../.. && - test_repo 6/sub/sub ../../.git +test_expect_success '#1: GIT_WORK_TREE without explicit GIT_DIR is ignored' ' + try_repo 1 non-existent unset unset "" unset \ + .git "$here/1" "$here/1" "(null)" \ + .git "$here/1" "$here/1" sub/ ' -test_expect_success '#6: GIT_DIR, core.worktree=../..(rel) in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 6/sub/sub/ -EOF - git config --file="$here/6/.git/config" core.worktree ../.. && - test_repo 6/sub/sub "$here/6/.git" +test_expect_success '#2: worktree defaults to cwd with explicit GIT_DIR' ' + try_repo 2 unset "$here/2/.git" unset "" unset \ + "$here/2/.git" "$here/2" "$here/2" "(null)" \ + "$here/2/.git" "$here/2/sub" "$here/2/sub" "(null)" ' -test_expect_success '#6: GIT_DIR, core.worktree=../.. in subdir' ' - cat >6/sub/sub/expected <<EOF && -setup: git_dir: $here/6/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 6/sub/sub/ -EOF - git config --file="$here/6/.git/config" core.worktree "$here" && - test_repo 6/sub/sub "$here/6/.git" +test_expect_success '#2b: relative GIT_DIR' ' + try_repo 2b unset ".git" unset "" unset \ + ".git" "$here/2b" "$here/2b" "(null)" \ + "../.git" "$here/2b/sub" "$here/2b/sub" "(null)" ' -# -# case #7 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a directory -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# core.worktree is overridden by GIT_WORK_TREE -> #3 - +test_expect_success '#3: setup' ' + setup_repo 3 unset "" unset && + mkdir -p 3/sub/sub 3/wt/sub +' +run_wt_tests 3 + +test_expect_success '#4: core.worktree without GIT_DIR set is ignored' ' + try_repo 4 unset unset non-existent "" unset \ + .git "$here/4" "$here/4" "(null)" \ + .git "$here/4" "$here/4" sub/ +' + +test_expect_success '#5: core.worktree + GIT_WORK_TREE is still ignored' ' + # or: you cannot intimidate away the lack of GIT_DIR setting + try_repo 5 non-existent-too unset non-existent "" unset \ + .git "$here/5" "$here/5" "(null)" \ + .git "$here/5" "$here/5" sub/ +' + +test_expect_success '#6: setting GIT_DIR brings core.worktree to life' ' + setup_repo 6 "$here/6" "" unset && + try_case 6 unset .git \ + .git "$here/6" "$here/6" "(null)" && + try_case 6 unset "$here/6/.git" \ + "$here/6/.git" "$here/6" "$here/6" "(null)" && + try_case 6/sub/sub unset ../../.git \ + "$here/6/.git" "$here/6" "$here/6" sub/sub/ && + try_case 6/sub/sub unset "$here/6/.git" \ + "$here/6/.git" "$here/6" "$here/6" sub/sub/ +' + +test_expect_success '#6b: GIT_DIR set, core.worktree relative' ' + setup_repo 6b .. "" unset && + try_case 6b unset .git \ + .git "$here/6b" "$here/6b" "(null)" && + try_case 6b unset "$here/6b/.git" \ + "$here/6b/.git" "$here/6b" "$here/6b" "(null)" && + try_case 6b/sub/sub unset ../../.git \ + "$here/6b/.git" "$here/6b" "$here/6b" sub/sub/ && + try_case 6b/sub/sub unset "$here/6b/.git" \ + "$here/6b/.git" "$here/6b" "$here/6b" sub/sub/ +' + +test_expect_success '#6c: GIT_DIR set, core.worktree=../wt (absolute)' ' + setup_repo 6c "$here/6c/wt" "" unset && + mkdir -p 6c/wt/sub && + + try_case 6c unset .git \ + .git "$here/6c/wt" "$here/6c" "(null)" && + try_case 6c unset "$here/6c/.git" \ + "$here/6c/.git" "$here/6c/wt" "$here/6c" "(null)" && + try_case 6c/sub/sub unset ../../.git \ + ../../.git "$here/6c/wt" "$here/6c/sub/sub" "(null)" && + try_case 6c/sub/sub unset "$here/6c/.git" \ + "$here/6c/.git" "$here/6c/wt" "$here/6c/sub/sub" "(null)" +' + +test_expect_success '#6d: GIT_DIR set, core.worktree=../wt (relative)' ' + setup_repo 6d "$here/6d/wt" "" unset && + mkdir -p 6d/wt/sub && + + try_case 6d unset .git \ + .git "$here/6d/wt" "$here/6d" "(null)" && + try_case 6d unset "$here/6d/.git" \ + "$here/6d/.git" "$here/6d/wt" "$here/6d" "(null)" && + try_case 6d/sub/sub unset ../../.git \ + ../../.git "$here/6d/wt" "$here/6d/sub/sub" "(null)" && + try_case 6d/sub/sub unset "$here/6d/.git" \ + "$here/6d/.git" "$here/6d/wt" "$here/6d/sub/sub" "(null)" +' + +test_expect_success '#6e: GIT_DIR set, core.worktree=../.. (absolute)' ' + setup_repo 6e "$here" "" unset && + try_case 6e unset .git \ + "$here/6e/.git" "$here" "$here" 6e/ && + try_case 6e unset "$here/6e/.git" \ + "$here/6e/.git" "$here" "$here" 6e/ && + try_case 6e/sub/sub unset ../../.git \ + "$here/6e/.git" "$here" "$here" 6e/sub/sub/ && + try_case 6e/sub/sub unset "$here/6e/.git" \ + "$here/6e/.git" "$here" "$here" 6e/sub/sub/ +' + +test_expect_success '#6f: GIT_DIR set, core.worktree=../.. (relative)' ' + setup_repo 6f ../../ "" unset && + try_case 6f unset .git \ + "$here/6f/.git" "$here" "$here" 6f/ && + try_case 6f unset "$here/6f/.git" \ + "$here/6f/.git" "$here" "$here" 6f/ && + try_case 6f/sub/sub unset ../../.git \ + "$here/6f/.git" "$here" "$here" 6f/sub/sub/ && + try_case 6f/sub/sub unset "$here/6f/.git" \ + "$here/6f/.git" "$here" "$here" 6f/sub/sub/ +' + +# case #7: GIT_WORK_TREE overrides core.worktree. test_expect_success '#7: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 7 7/sub 7/sub/sub 7.wt 7.wt/sub 7/wt 7/wt/sub && - cd 7 && - git init && - git config core.worktree non-existent && - cd .. + setup_repo 7 non-existent "" unset && + mkdir -p 7/sub/sub 7/wt/sub ' +run_wt_tests 7 -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=root at root' ' - cat >7/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/7 -setup: cwd: $here/7 -setup: prefix: (null) -EOF - test_repo 7 .git "$here/7" +test_expect_success '#8: gitfile, easy case' ' + try_repo 8 unset unset unset gitfile unset \ + "$here/8.git" "$here/8" "$here/8" "(null)" \ + "$here/8.git" "$here/8" "$here/8" sub/ ' -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' ' - cat >7/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/7 -setup: cwd: $here/7 -setup: prefix: (null) -EOF - test_repo 7 .git . +test_expect_success '#9: GIT_WORK_TREE ignored even with gitfile' ' + try_repo 9 non-existent unset unset gitfile unset \ + "$here/9.git" "$here/9" "$here/9" "(null)" \ + "$here/9.git" "$here/9" "$here/9" sub/ ' -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=root at root' ' - cat >7/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7 -setup: cwd: $here/7 -setup: prefix: (null) -EOF - test_repo 7 "$here/7/.git" "$here/7" +test_expect_success '#10: GIT_DIR can point to gitfile' ' + try_repo 10 unset "$here/10/.git" unset gitfile unset \ + "$here/10.git" "$here/10" "$here/10" "(null)" \ + "$here/10.git" "$here/10/sub" "$here/10/sub" "(null)" ' -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=root(rel) at root' ' - cat >7/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7 -setup: cwd: $here/7 -setup: prefix: (null) -EOF - test_repo 7 "$here/7/.git" . +test_expect_success '#10b: relative GIT_DIR can point to gitfile' ' + try_repo 10b unset .git unset gitfile unset \ + "$here/10b.git" "$here/10b" "$here/10b" "(null)" \ + "$here/10b.git" "$here/10b/sub" "$here/10b/sub" "(null)" ' -test_expect_success '#7: GIT_DIR(rel), GIT_WORKTREE=root in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7 -setup: cwd: $here/7 -setup: prefix: sub/sub/ -EOF - test_repo 7/sub/sub ../../.git "$here/7" -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7 -setup: cwd: $here/7 -setup: prefix: sub/sub/ -EOF - test_repo 7/sub/sub ../../.git ../.. -' - -test_expect_success '#7: GIT_DIR, GIT_WORKTREE=root in subdir' ' - cat >7/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7 -setup: cwd: $here/7 -setup: prefix: sub/ -EOF - test_repo 7/sub "$here/7/.git" "$here/7" -' - -test_expect_success '#7: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7 -setup: cwd: $here/7 -setup: prefix: sub/sub/ -EOF - test_repo 7/sub/sub "$here/7/.git" ../.. -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=wt at root' ' - cat >7/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/7/wt -setup: cwd: $here/7 -setup: prefix: (null) -EOF - test_repo 7 .git "$here/7/wt" -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' ' - cat >7/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/7/wt -setup: cwd: $here/7 -setup: prefix: (null) -EOF - test_repo 7 .git wt -' - -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' ' - cat >7/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7/wt -setup: cwd: $here/7 -setup: prefix: (null) -EOF - test_repo 7 "$here/7/.git" wt -' - -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=wt at root' ' - cat >7/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7/wt -setup: cwd: $here/7 -setup: prefix: (null) -EOF - test_repo 7 "$here/7/.git" "$here/7/wt" -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/7/wt -setup: cwd: $here/7/sub/sub -setup: prefix: (null) -EOF - test_repo 7/sub/sub ../../.git "$here/7/wt" -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/7/wt -setup: cwd: $here/7/sub/sub -setup: prefix: (null) -EOF - test_repo 7/sub/sub ../../.git ../../wt -' - -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7/wt -setup: cwd: $here/7/sub/sub -setup: prefix: (null) -EOF - test_repo 7/sub/sub "$here/7/.git" ../../wt -' - -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=wt in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here/7/wt -setup: cwd: $here/7/sub/sub -setup: prefix: (null) -EOF - test_repo 7/sub/sub "$here/7/.git" "$here/7/wt" -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=.. at root' ' - cat >7/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 7/ -EOF - test_repo 7 .git "$here" -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' ' - cat >7/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 7/ -EOF - test_repo 7 .git .. -' - -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=..(rel) at root' ' - cat >7/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 7/ -EOF - test_repo 7 "$here/7/.git" .. -' - -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=.. at root' ' - cat >7/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 7/ -EOF - test_repo 7 "$here/7/.git" "$here" -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 7/sub/sub/ -EOF - test_repo 7/sub/sub ../../.git "$here" -' - -test_expect_success '#7: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 7/sub/sub/ -EOF - test_repo 7/sub/sub ../../.git ../../.. -' - -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 7/sub/sub/ -EOF - test_repo 7/sub/sub "$here/7/.git" ../../../ -' - -test_expect_success '#7: GIT_DIR, GIT_WORK_TREE=.. in subdir' ' - cat >7/sub/sub/expected <<EOF && -setup: git_dir: $here/7/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 7/sub/sub/ -EOF - test_repo 7/sub/sub "$here/7/.git" "$here" -' - -# -# case #8 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a file -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# #0 except that git_dir is set by .git file - -test_expect_success '#8: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 8 8/sub && - cd 8 && - git init && - mv .git ../8.git && - echo gitdir: ../8.git >.git && - cd .. -' - -test_expect_success '#8: at root' ' - cat >8/expected <<EOF && -setup: git_dir: $here/8.git -setup: worktree: $here/8 -setup: cwd: $here/8 -setup: prefix: (null) -EOF - test_repo 8 -' - -test_expect_success '#8: in subdir' ' - cat >8/sub/expected <<EOF && -setup: git_dir: $here/8.git -setup: worktree: $here/8 -setup: cwd: $here/8 -setup: prefix: sub/ -EOF - test_repo 8/sub -' - -# -# case #9 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a file -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# #1 except that git_dir is set by .git file - -test_expect_success '#9: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 9 9/sub 9.wt 9.wt/sub 9/wt 9/wt/sub && - cd 9 && - git init && - mv .git ../9.git && - echo gitdir: ../9.git >.git && - GIT_WORK_TREE=non-existent && - export GIT_WORK_TREE && - cd .. -' - -test_expect_success '#9: at root' ' - cat >9/expected <<EOF && -setup: git_dir: $here/9.git -setup: worktree: $here/9 -setup: cwd: $here/9 -setup: prefix: (null) -EOF - test_repo 9 -' - -test_expect_success '#9: in subdir' ' - cat >9/sub/expected <<EOF && -setup: git_dir: $here/9.git -setup: worktree: $here/9 -setup: cwd: $here/9 -setup: prefix: sub/ -EOF - test_repo 9/sub -' - -# -# case #10 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is not set -# - .git is a file -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# #2 except that git_dir is set by .git file - -test_expect_success '#10: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 10 10/sub && - cd 10 && - git init && - mv .git ../10.git && - echo gitdir: ../10.git >.git && - cd .. -' - -test_expect_success '#10: at root' ' - cat >10/expected <<EOF && -setup: git_dir: $here/10.git -setup: worktree: $here/10 -setup: cwd: $here/10 -setup: prefix: (null) -EOF - test_repo 10 "$here/10/.git" -' - -test_expect_success '#10: in subdir' ' - cat >10/sub/expected <<EOF && -setup: git_dir: $here/10.git -setup: worktree: $here/10/sub -setup: cwd: $here/10/sub -setup: prefix: (null) -EOF - test_repo 10/sub "$here/10/.git" -' - -test_expect_success '#10: relative GIT_DIR at root' ' - cat >10/expected <<EOF && -setup: git_dir: $here/10.git -setup: worktree: $here/10 -setup: cwd: $here/10 -setup: prefix: (null) -EOF - test_repo 10 .git -' - -test_expect_success '#10: relative GIT_DIR in subdir' ' - cat >10/sub/expected <<EOF && -setup: git_dir: $here/10.git -setup: worktree: $here/10/sub -setup: cwd: $here/10/sub -setup: prefix: (null) -EOF - test_repo 10/sub ../.git -' - -# -# case #11 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is set -# - core.worktree is not set -# - .git is a file -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# #3 except that git_dir is set by .git file - +# case #11: GIT_WORK_TREE works, gitfile case. test_expect_success '#11: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 11 11/sub 11/sub/sub 11.wt 11.wt/sub 11/wt 11/wt/sub && - cd 11 && - git init && - mv .git ../11.git && - echo gitdir: ../11.git >.git && - cd .. -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=root at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11 -setup: cwd: $here/11 -setup: prefix: (null) -EOF - test_repo 11 .git "$here/11" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11 -setup: cwd: $here/11 -setup: prefix: (null) -EOF - test_repo 11 .git . -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=root at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11 -setup: cwd: $here/11 -setup: prefix: (null) -EOF - test_repo 11 "$here/11/.git" "$here/11" -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=root(rel) at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11 -setup: cwd: $here/11 -setup: prefix: (null) -EOF - test_repo 11 "$here/11/.git" . -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORKTREE=root in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11 -setup: cwd: $here/11 -setup: prefix: sub/sub/ -EOF - test_repo 11/sub/sub ../../.git "$here/11" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11 -setup: cwd: $here/11 -setup: prefix: sub/sub/ -EOF - test_repo 11/sub/sub ../../.git ../.. -' - -test_expect_success '#11: GIT_DIR, GIT_WORKTREE=root in subdir' ' - cat >11/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11 -setup: cwd: $here/11 -setup: prefix: sub/ -EOF - test_repo 11/sub "$here/11/.git" "$here/11" -' - -test_expect_success '#11: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11 -setup: cwd: $here/11 -setup: prefix: sub/sub/ -EOF - test_repo 11/sub/sub "$here/11/.git" ../.. -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=wt at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11/wt -setup: cwd: $here/11 -setup: prefix: (null) -EOF - test_repo 11 .git "$here/11/wt" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11/wt -setup: cwd: $here/11 -setup: prefix: (null) -EOF - test_repo 11 .git wt -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11/wt -setup: cwd: $here/11 -setup: prefix: (null) -EOF - test_repo 11 "$here/11/.git" wt -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=wt at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11/wt -setup: cwd: $here/11 -setup: prefix: (null) -EOF - test_repo 11 "$here/11/.git" "$here/11/wt" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11/wt -setup: cwd: $here/11/sub/sub -setup: prefix: (null) -EOF - test_repo 11/sub/sub ../../.git "$here/11/wt" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11/wt -setup: cwd: $here/11/sub/sub -setup: prefix: (null) -EOF - test_repo 11/sub/sub ../../.git ../../wt -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11/wt -setup: cwd: $here/11/sub/sub -setup: prefix: (null) -EOF - test_repo 11/sub/sub "$here/11/.git" ../../wt -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=wt in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here/11/wt -setup: cwd: $here/11/sub/sub -setup: prefix: (null) -EOF - test_repo 11/sub/sub "$here/11/.git" "$here/11/wt" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=.. at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 11/ -EOF - test_repo 11 .git "$here" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 11/ -EOF - test_repo 11 .git .. -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=..(rel) at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 11/ -EOF - test_repo 11 "$here/11/.git" .. -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=.. at root' ' - cat >11/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 11/ -EOF - test_repo 11 "$here/11/.git" "$here" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 11/sub/sub/ -EOF - test_repo 11/sub/sub ../../.git "$here" -' - -test_expect_success '#11: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 11/sub/sub/ -EOF - test_repo 11/sub/sub ../../.git ../../.. -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 11/sub/sub/ -EOF - test_repo 11/sub/sub "$here/11/.git" ../../../ -' - -test_expect_success '#11: GIT_DIR, GIT_WORK_TREE=.. in subdir' ' - cat >11/sub/sub/expected <<EOF && -setup: git_dir: $here/11.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 11/sub/sub/ -EOF - test_repo 11/sub/sub "$here/11/.git" "$here" -' - -# -# case #12 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a file -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# #4 except that git_dir is set by .git file - - -test_expect_success '#12: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 12 12/sub 12/sub/sub 12.wt 12.wt/sub 12/wt 12/wt/sub && - cd 12 && - git init && - git config core.worktree non-existent && - mv .git ../12.git && - echo gitdir: ../12.git >.git && - cd .. -' - -test_expect_success '#12: at root' ' - cat >12/expected <<EOF && -setup: git_dir: $here/12.git -setup: worktree: $here/12 -setup: cwd: $here/12 -setup: prefix: (null) -EOF - test_repo 12 -' - -test_expect_success '#12: in subdir' ' - cat >12/sub/expected <<EOF && -setup: git_dir: $here/12.git -setup: worktree: $here/12 -setup: cwd: $here/12 -setup: prefix: sub/ -EOF - test_repo 12/sub -' - -# -# case #13 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a file -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# #5 except that git_dir is set by .git file - -test_expect_success '#13: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 13 13/sub 13/sub/sub 13.wt 13.wt/sub 13/wt 13/wt/sub && - cd 13 && - git init && - git config core.worktree non-existent && - GIT_WORK_TREE=non-existent-too && - export GIT_WORK_TREE && - mv .git ../13.git && - echo gitdir: ../13.git >.git && - cd .. -' - -test_expect_success '#13: at root' ' - cat >13/expected <<EOF && -setup: git_dir: $here/13.git -setup: worktree: $here/13 -setup: cwd: $here/13 -setup: prefix: (null) -EOF - test_repo 13 -' - -test_expect_success '#13: in subdir' ' - cat >13/sub/expected <<EOF && -setup: git_dir: $here/13.git -setup: worktree: $here/13 -setup: cwd: $here/13 -setup: prefix: sub/ -EOF - test_repo 13/sub -' - -# -# case #14 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a file -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# #6 except that git_dir is set by .git file - -test_expect_success '#14: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 14 14/sub 14/sub/sub 14.wt 14.wt/sub 14/wt 14/wt/sub && - cd 14 && - git init && - mv .git ../14.git && - echo gitdir: ../14.git >.git && - cd .. -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=../14 at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14 -setup: cwd: $here/14 -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree "$here/14" && - test_repo 14 .git -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=../14(rel) at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14 -setup: cwd: $here/14 -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree ../14 && - test_repo 14 .git -' - -test_expect_success '#14: GIT_DIR, core.worktree=../14 at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14 -setup: cwd: $here/14 -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree "$here/14" && - test_repo 14 "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR, core.worktree=../14(rel) at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14 -setup: cwd: $here/14 -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree ../14 && - test_repo 14 "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=../14 in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14 -setup: cwd: $here/14 -setup: prefix: sub/sub/ -EOF - git config --file="$here/14.git/config" core.worktree "$here/14" && - test_repo 14/sub/sub ../../.git -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=../14(rel) in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14 -setup: cwd: $here/14 -setup: prefix: sub/sub/ -EOF - git config --file="$here/14.git/config" core.worktree ../14 && - test_repo 14/sub/sub ../../.git -' - -test_expect_success '#14: GIT_DIR, core.worktree=../14 in subdir' ' - cat >14/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14 -setup: cwd: $here/14 -setup: prefix: sub/ -EOF - git config --file="$here/14.git/config" core.worktree "$here/14" && - test_repo 14/sub "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR, core.worktree=../14(rel) in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14 -setup: cwd: $here/14 -setup: prefix: sub/sub/ -EOF - git config --file="$here/14.git/config" core.worktree ../14 && - test_repo 14/sub/sub "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=../14/wt at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14/wt -setup: cwd: $here/14 -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree "$here/14/wt" && - test_repo 14 .git -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=../14/wt(rel) at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14/wt -setup: cwd: $here/14 -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree ../14/wt && - test_repo 14 .git -' - -test_expect_success '#14: GIT_DIR, core.worktree=../14/wt(rel) at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14/wt -setup: cwd: $here/14 -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree ../14/wt && - test_repo 14 "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR, core.worktree=../14/wt at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14/wt -setup: cwd: $here/14 -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree "$here/14/wt" && - test_repo 14 "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=../14/wt in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14/wt -setup: cwd: $here/14/sub/sub -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree "$here/14/wt" && - test_repo 14/sub/sub ../../.git -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=../14/wt(rel) in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14/wt -setup: cwd: $here/14/sub/sub -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree ../14/wt && - test_repo 14/sub/sub ../../.git -' - -test_expect_success '#14: GIT_DIR, core.worktree=../14/wt(rel) in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14/wt -setup: cwd: $here/14/sub/sub -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree ../14/wt && - test_repo 14/sub/sub "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR, core.worktree=../14/wt in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here/14/wt -setup: cwd: $here/14/sub/sub -setup: prefix: (null) -EOF - git config --file="$here/14.git/config" core.worktree "$here/14/wt" && - test_repo 14/sub/sub "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=.. at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 14/ -EOF - git config --file="$here/14.git/config" core.worktree "$here" && - test_repo 14 .git -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=..(rel) at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 14/ -EOF - git config --file="$here/14.git/config" core.worktree .. && - test_repo 14 .git -' - -test_expect_success '#14: GIT_DIR, core.worktree=..(rel) at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 14/ -EOF - git config --file="$here/14.git/config" core.worktree .. && - test_repo 14 "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR, core.worktree=.. at root' ' - cat >14/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 14/ -EOF - git config --file="$here/14.git/config" core.worktree "$here" && - test_repo 14 "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=.. in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 14/sub/sub/ -EOF - git config --file="$here/14.git/config" core.worktree "$here" && - test_repo 14/sub/sub ../../.git -' - -test_expect_success '#14: GIT_DIR(rel), core.worktree=..(rel) in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 14/sub/sub/ -EOF - git config --file="$here/14.git/config" core.worktree .. && - test_repo 14/sub/sub ../../.git -' - -test_expect_success '#14: GIT_DIR, core.worktree=..(rel) in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 14/sub/sub/ -EOF - git config --file="$here/14.git/config" core.worktree .. && - test_repo 14/sub/sub "$here/14/.git" -' - -test_expect_success '#14: GIT_DIR, core.worktree=.. in subdir' ' - cat >14/sub/sub/expected <<EOF && -setup: git_dir: $here/14.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 14/sub/sub/ -EOF - git config --file="$here/14.git/config" core.worktree "$here" && - test_repo 14/sub/sub "$here/14/.git" -' - -# -# case #15 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a file -# - core.bare is not set, cwd is outside .git -# -# Output: -# -# #7 except that git_dir is set by .git file - + setup_repo 11 unset gitfile unset && + mkdir -p 11/sub/sub 11/wt/sub +' +run_wt_tests 11 gitfile + +test_expect_success '#12: core.worktree with gitfile is still ignored' ' + try_repo 12 unset unset non-existent gitfile unset \ + "$here/12.git" "$here/12" "$here/12" "(null)" \ + "$here/12.git" "$here/12" "$here/12" sub/ +' + +test_expect_success '#13: core.worktree+GIT_WORK_TREE ignored (with gitfile)' ' + # or: you cannot intimidate away the lack of GIT_DIR setting + try_repo 13 non-existent-too unset non-existent gitfile unset \ + "$here/13.git" "$here/13" "$here/13" "(null)" \ + "$here/13.git" "$here/13" "$here/13" sub/ +' + +# case #14. +# If this were more table-driven, it could share code with case #6. + +test_expect_success '#14: core.worktree with GIT_DIR pointing to gitfile' ' + setup_repo 14 "$here/14" gitfile unset && + try_case 14 unset .git \ + "$here/14.git" "$here/14" "$here/14" "(null)" && + try_case 14 unset "$here/14/.git" \ + "$here/14.git" "$here/14" "$here/14" "(null)" && + try_case 14/sub/sub unset ../../.git \ + "$here/14.git" "$here/14" "$here/14" sub/sub/ && + try_case 14/sub/sub unset "$here/14/.git" \ + "$here/14.git" "$here/14" "$here/14" sub/sub/ && + + setup_repo 14c "$here/14c/wt" gitfile unset && + mkdir -p 14c/wt/sub && + + try_case 14c unset .git \ + "$here/14c.git" "$here/14c/wt" "$here/14c" "(null)" && + try_case 14c unset "$here/14c/.git" \ + "$here/14c.git" "$here/14c/wt" "$here/14c" "(null)" && + try_case 14c/sub/sub unset ../../.git \ + "$here/14c.git" "$here/14c/wt" "$here/14c/sub/sub" "(null)" && + try_case 14c/sub/sub unset "$here/14c/.git" \ + "$here/14c.git" "$here/14c/wt" "$here/14c/sub/sub" "(null)" && + + setup_repo 14d "$here/14d/wt" gitfile unset && + mkdir -p 14d/wt/sub && + + try_case 14d unset .git \ + "$here/14d.git" "$here/14d/wt" "$here/14d" "(null)" && + try_case 14d unset "$here/14d/.git" \ + "$here/14d.git" "$here/14d/wt" "$here/14d" "(null)" && + try_case 14d/sub/sub unset ../../.git \ + "$here/14d.git" "$here/14d/wt" "$here/14d/sub/sub" "(null)" && + try_case 14d/sub/sub unset "$here/14d/.git" \ + "$here/14d.git" "$here/14d/wt" "$here/14d/sub/sub" "(null)" && + + setup_repo 14e "$here" gitfile unset && + try_case 14e unset .git \ + "$here/14e.git" "$here" "$here" 14e/ && + try_case 14e unset "$here/14e/.git" \ + "$here/14e.git" "$here" "$here" 14e/ && + try_case 14e/sub/sub unset ../../.git \ + "$here/14e.git" "$here" "$here" 14e/sub/sub/ && + try_case 14e/sub/sub unset "$here/14e/.git" \ + "$here/14e.git" "$here" "$here" 14e/sub/sub/ +' + +test_expect_success '#14b: core.worktree is relative to actual git dir' ' + setup_repo 14b ../14b gitfile unset && + try_case 14b unset .git \ + "$here/14b.git" "$here/14b" "$here/14b" "(null)" && + try_case 14b unset "$here/14b/.git" \ + "$here/14b.git" "$here/14b" "$here/14b" "(null)" && + try_case 14b/sub/sub unset ../../.git \ + "$here/14b.git" "$here/14b" "$here/14b" sub/sub/ && + try_case 14b/sub/sub unset "$here/14b/.git" \ + "$here/14b.git" "$here/14b" "$here/14b" sub/sub/ && + + setup_repo 14f ../ gitfile unset && + try_case 14f unset .git \ + "$here/14f.git" "$here" "$here" 14f/ && + try_case 14f unset "$here/14f/.git" \ + "$here/14f.git" "$here" "$here" 14f/ && + try_case 14f/sub/sub unset ../../.git \ + "$here/14f.git" "$here" "$here" 14f/sub/sub/ && + try_case 14f/sub/sub unset "$here/14f/.git" \ + "$here/14f.git" "$here" "$here" 14f/sub/sub/ +' + +# case #15: GIT_WORK_TREE overrides core.worktree (gitfile case). test_expect_success '#15: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 15 15/sub 15/sub/sub 15.wt 15.wt/sub 15/wt 15/wt/sub && - cd 15 && - git init && - git config core.worktree non-existent && - mv .git ../15.git && - echo gitdir: ../15.git >.git && - cd .. -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=root at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15 -setup: cwd: $here/15 -setup: prefix: (null) -EOF - test_repo 15 .git "$here/15" -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15 -setup: cwd: $here/15 -setup: prefix: (null) -EOF - test_repo 15 .git . -' - -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=root at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15 -setup: cwd: $here/15 -setup: prefix: (null) -EOF - test_repo 15 "$here/15/.git" "$here/15" -' - -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=root(rel) at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15 -setup: cwd: $here/15 -setup: prefix: (null) -EOF - test_repo 15 "$here/15/.git" . -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORKTREE=root in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15 -setup: cwd: $here/15 -setup: prefix: sub/sub/ -EOF - test_repo 15/sub/sub ../../.git "$here/15" -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15 -setup: cwd: $here/15 -setup: prefix: sub/sub/ -EOF - test_repo 15/sub/sub ../../.git ../.. -' - -test_expect_success '#15: GIT_DIR, GIT_WORKTREE=root in subdir' ' - cat >15/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15 -setup: cwd: $here/15 -setup: prefix: sub/ -EOF - test_repo 15/sub "$here/15/.git" "$here/15" -' - -test_expect_success '#15: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15 -setup: cwd: $here/15 -setup: prefix: sub/sub/ -EOF - test_repo 15/sub/sub "$here/15/.git" ../.. -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=wt at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15/wt -setup: cwd: $here/15 -setup: prefix: (null) -EOF - test_repo 15 .git "$here/15/wt" -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15/wt -setup: cwd: $here/15 -setup: prefix: (null) -EOF - test_repo 15 .git wt -' - -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15/wt -setup: cwd: $here/15 -setup: prefix: (null) -EOF - test_repo 15 "$here/15/.git" wt -' - -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=wt at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15/wt -setup: cwd: $here/15 -setup: prefix: (null) -EOF - test_repo 15 "$here/15/.git" "$here/15/wt" -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15/wt -setup: cwd: $here/15/sub/sub -setup: prefix: (null) -EOF - test_repo 15/sub/sub ../../.git "$here/15/wt" -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15/wt -setup: cwd: $here/15/sub/sub -setup: prefix: (null) -EOF - test_repo 15/sub/sub ../../.git ../../wt -' - -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15/wt -setup: cwd: $here/15/sub/sub -setup: prefix: (null) -EOF - test_repo 15/sub/sub "$here/15/.git" ../../wt -' - -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=wt in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here/15/wt -setup: cwd: $here/15/sub/sub -setup: prefix: (null) -EOF - test_repo 15/sub/sub "$here/15/.git" "$here/15/wt" -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=.. at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 15/ -EOF - test_repo 15 .git "$here" -' - -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 15/ -EOF - test_repo 15 .git .. -' - -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=..(rel) at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 15/ -EOF - test_repo 15 "$here/15/.git" .. + setup_repo 15 non-existent gitfile unset && + mkdir -p 15/sub/sub 15/wt/sub ' +run_wt_tests 15 gitfile -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=.. at root' ' - cat >15/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 15/ -EOF - test_repo 15 "$here/15/.git" "$here" -' +test_expect_success '#16a: implicitly bare repo (cwd inside .git dir)' ' + setup_repo 16a unset "" unset && + mkdir -p 16a/.git/wt/sub && -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 15/sub/sub/ -EOF - test_repo 15/sub/sub ../../.git "$here" + try_case 16a/.git unset unset \ + . "(null)" "$here/16a/.git" "(null)" && + try_case 16a/.git/wt unset unset \ + "$here/16a/.git" "(null)" "$here/16a/.git/wt" "(null)" && + try_case 16a/.git/wt/sub unset unset \ + "$here/16a/.git" "(null)" "$here/16a/.git/wt/sub" "(null)" ' -test_expect_success '#15: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 15/sub/sub/ -EOF - test_repo 15/sub/sub ../../.git ../../.. -' +test_expect_success '#16b: bare .git (cwd inside .git dir)' ' + setup_repo 16b unset "" true && + mkdir -p 16b/.git/wt/sub && -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 15/sub/sub/ -EOF - test_repo 15/sub/sub "$here/15/.git" ../../../ + try_case 16b/.git unset unset \ + . "(null)" "$here/16b/.git" "(null)" && + try_case 16b/.git/wt unset unset \ + "$here/16b/.git" "(null)" "$here/16b/.git/wt" "(null)" && + try_case 16b/.git/wt/sub unset unset \ + "$here/16b/.git" "(null)" "$here/16b/.git/wt/sub" "(null)" ' -test_expect_success '#15: GIT_DIR, GIT_WORK_TREE=.. in subdir' ' - cat >15/sub/sub/expected <<EOF && -setup: git_dir: $here/15.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 15/sub/sub/ -EOF - test_repo 15/sub/sub "$here/15/.git" "$here" +test_expect_success '#16c: bare .git has no worktree' ' + try_repo 16c unset unset unset "" true \ + .git "(null)" "$here/16c" "(null)" \ + "$here/16c/.git" "(null)" "$here/16c/sub" "(null)" ' -# -# case #16.1 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a directory -# - cwd is inside .git -# -# Output: -# -# - no worktree -# - cwd is unchanged -# - prefix is NULL -# - git_dir is set -# - cwd can't be outside worktree - -test_expect_success '#16.1: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 16 16/sub && - cd 16 && - git init && - mkdir .git/wt .git/wt/sub && - cd .. -' +test_expect_success '#17: GIT_WORK_TREE without explicit GIT_DIR is ignored (bare case)' ' + # Just like #16. + setup_repo 17a unset "" true && + setup_repo 17b unset "" true && + mkdir -p 17a/.git/wt/sub && + mkdir -p 17b/.git/wt/sub && -test_expect_success '#16.1: at .git' ' - cat >16/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: (null) -setup: cwd: $here/16/.git -setup: prefix: (null) -EOF - test_repo 16/.git -' + try_case 17a/.git non-existent unset \ + . "(null)" "$here/17a/.git" "(null)" && + try_case 17a/.git/wt non-existent unset \ + "$here/17a/.git" "(null)" "$here/17a/.git/wt" "(null)" && + try_case 17a/.git/wt/sub non-existent unset \ + "$here/17a/.git" "(null)" "$here/17a/.git/wt/sub" "(null)" && -test_expect_success '#16.1: in .git/wt' ' - cat >16/.git/wt/expected <<EOF && -setup: git_dir: $here/16/.git -setup: worktree: (null) -setup: cwd: $here/16/.git/wt -setup: prefix: (null) -EOF - test_repo 16/.git/wt -' + try_case 17b/.git non-existent unset \ + . "(null)" "$here/17b/.git" "(null)" && + try_case 17b/.git/wt non-existent unset \ + "$here/17b/.git" "(null)" "$here/17b/.git/wt" "(null)" && + try_case 17b/.git/wt/sub non-existent unset \ + "$here/17b/.git" "(null)" "$here/17b/.git/wt/sub" "(null)" && -test_expect_success '#16.1: in .git/wt/sub' ' - cat >16/.git/wt/sub/expected <<EOF && -setup: git_dir: $here/16/.git -setup: worktree: (null) -setup: cwd: $here/16/.git/wt/sub -setup: prefix: (null) -EOF - test_repo 16/.git/wt/sub + try_repo 17c non-existent unset unset "" true \ + .git "(null)" "$here/17c" "(null)" \ + "$here/17c/.git" "(null)" "$here/17c/sub" "(null)" ' -# -# case #16.2 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a directory -# - core.bare is set -# -# Output: -# -# - no worktree -# - cwd is unchanged -# - prefix is NULL -# - git_dir is set -# - cwd can't be outside worktree - -test_expect_success '#16.2: setup' ' - git config --file="$here/16/.git/config" core.bare true +test_expect_success '#18: bare .git named by GIT_DIR has no worktree' ' + try_repo 18 unset .git unset "" true \ + .git "(null)" "$here/18" "(null)" \ + ../.git "(null)" "$here/18/sub" "(null)" && + try_repo 18b unset "$here/18b/.git" unset "" true \ + "$here/18b/.git" "(null)" "$here/18b" "(null)" \ + "$here/18b/.git" "(null)" "$here/18b/sub" "(null)" ' -test_expect_success '#16.2: at .git' ' - cat >16/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: (null) -setup: cwd: $here/16/.git -setup: prefix: (null) -EOF - test_repo 16/.git -' - -test_expect_success '#16.2: in .git/wt' ' - cat >16/.git/wt/expected <<EOF && -setup: git_dir: $here/16/.git -setup: worktree: (null) -setup: cwd: $here/16/.git/wt -setup: prefix: (null) -EOF - test_repo 16/.git/wt -' - -test_expect_success '#16.2: in .git/wt/sub' ' - cat >16/.git/wt/sub/expected <<EOF && -setup: git_dir: $here/16/.git -setup: worktree: (null) -setup: cwd: $here/16/.git/wt/sub -setup: prefix: (null) -EOF - test_repo 16/.git/wt/sub -' - -test_expect_success '#16.2: at root' ' - cat >16/expected <<EOF && -setup: git_dir: .git -setup: worktree: (null) -setup: cwd: $here/16 -setup: prefix: (null) -EOF - test_repo 16 -' - -test_expect_success '#16.2: in subdir' ' - cat >16/sub/expected <<EOF && -setup: git_dir: $here/16/.git -setup: worktree: (null) -setup: cwd: $here/16/sub -setup: prefix: (null) -EOF - test_repo 16/sub -' - -# -# case #17.1 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a directory -# - cwd is inside .git -# -# Output: -# -# GIT_WORK_TREE is ignored -> #16.1 (with warnings perhaps) - -test_expect_success '#17.1: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 17 17/sub && - cd 17 && - git init && - mkdir .git/wt .git/wt/sub && - GIT_WORK_TREE=non-existent && - export GIT_WORK_TREE && - cd .. -' - -test_expect_success '#17.1: at .git' ' - cat >17/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: (null) -setup: cwd: $here/17/.git -setup: prefix: (null) -EOF - test_repo 17/.git -' - -test_expect_success '#17.1: in .git/wt' ' - cat >17/.git/wt/expected <<EOF && -setup: git_dir: $here/17/.git -setup: worktree: (null) -setup: cwd: $here/17/.git/wt -setup: prefix: (null) -EOF - test_repo 17/.git/wt -' - -test_expect_success '#17.1: in .git/wt/sub' ' - cat >17/.git/wt/sub/expected <<EOF && -setup: git_dir: $here/17/.git -setup: worktree: (null) -setup: cwd: $here/17/.git/wt/sub -setup: prefix: (null) -EOF - test_repo 17/.git/wt/sub -' - -# -# case #17.2 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a directory -# - core.bare is set -# -# Output: -# -# GIT_WORK_TREE is ignored -> #16.2 (with warnings perhaps) - -test_expect_success '#17.2: setup' ' - git config --file="$here/17/.git/config" core.bare true -' - -test_expect_success '#17.2: at .git' ' - cat >17/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: (null) -setup: cwd: $here/17/.git -setup: prefix: (null) -EOF - test_repo 17/.git -' - -test_expect_success '#17.2: in .git/wt' ' - cat >17/.git/wt/expected <<EOF && -setup: git_dir: $here/17/.git -setup: worktree: (null) -setup: cwd: $here/17/.git/wt -setup: prefix: (null) -EOF - test_repo 17/.git/wt -' - -test_expect_success '#17.2: in .git/wt/sub' ' - cat >17/.git/wt/sub/expected <<EOF && -setup: git_dir: $here/17/.git -setup: worktree: (null) -setup: cwd: $here/17/.git/wt/sub -setup: prefix: (null) -EOF - test_repo 17/.git/wt/sub -' - -test_expect_success '#17.2: at root' ' - cat >17/expected <<EOF && -setup: git_dir: .git -setup: worktree: (null) -setup: cwd: $here/17 -setup: prefix: (null) -EOF - test_repo 17 -' - -test_expect_success '#17.2: in subdir' ' - cat >17/sub/expected <<EOF && -setup: git_dir: $here/17/.git -setup: worktree: (null) -setup: cwd: $here/17/sub -setup: prefix: (null) -EOF - test_repo 17/sub -' - -# -# case #18 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is not set -# - .git is a directory -# - core.bare is set -# -# Output: -# -# - no worktree (rule #8) -# - cwd is unchanged -# - prefix is NULL -# - git_dir is set to $GIT_DIR -# - cwd can't be outside worktree - -test_expect_success '#18: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 18 18/sub && - cd 18 && - git init && - mkdir .git/wt .git/wt/sub && - git config core.bare true && - cd .. -' - -test_expect_success '#18: (rel) at root' ' - cat >18/expected <<EOF && -setup: git_dir: .git -setup: worktree: (null) -setup: cwd: $here/18 -setup: prefix: (null) -EOF - test_repo 18 .git -' - -test_expect_success '#18: at root' ' - cat >18/expected <<EOF && -setup: git_dir: $here/18/.git -setup: worktree: (null) -setup: cwd: $here/18 -setup: prefix: (null) -EOF - test_repo 18 "$here/18/.git" -' - -test_expect_success '#18: (rel) in subdir' ' - cat >18/sub/expected <<EOF && -setup: git_dir: ../.git -setup: worktree: (null) -setup: cwd: $here/18/sub -setup: prefix: (null) -EOF - test_repo 18/sub ../.git -' - -test_expect_success '#18: in subdir' ' - cat >18/sub/expected <<EOF && -setup: git_dir: $here/18/.git -setup: worktree: (null) -setup: cwd: $here/18/sub -setup: prefix: (null) -EOF - test_repo 18/sub "$here/18/.git" -' - -# -# case #19 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is set -# - .git is a directory -# - core.worktree is not set -# - core.bare is set -# -# Output: -# -# bare repo is overridden by GIT_WORK_TREE -> #3 - +# Case #19: GIT_DIR + GIT_WORK_TREE suppresses bareness. test_expect_success '#19: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 19 19/sub 19/sub/sub 19.wt 19.wt/sub 19/wt 19/wt/sub && - cd 19 && - git init && - git config core.bare true && - cd .. -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=root at root' ' - cat >19/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/19 -setup: cwd: $here/19 -setup: prefix: (null) -EOF - test_repo 19 .git "$here/19" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' ' - cat >19/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/19 -setup: cwd: $here/19 -setup: prefix: (null) -EOF - test_repo 19 .git . -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=root at root' ' - cat >19/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19 -setup: cwd: $here/19 -setup: prefix: (null) -EOF - test_repo 19 "$here/19/.git" "$here/19" -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=root(rel) at root' ' - cat >19/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19 -setup: cwd: $here/19 -setup: prefix: (null) -EOF - test_repo 19 "$here/19/.git" . -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORKTREE=root in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19 -setup: cwd: $here/19 -setup: prefix: sub/sub/ -EOF - test_repo 19/sub/sub ../../.git "$here/19" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19 -setup: cwd: $here/19 -setup: prefix: sub/sub/ -EOF - test_repo 19/sub/sub ../../.git ../.. -' - -test_expect_success '#19: GIT_DIR, GIT_WORKTREE=root in subdir' ' - cat >19/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19 -setup: cwd: $here/19 -setup: prefix: sub/ -EOF - test_repo 19/sub "$here/19/.git" "$here/19" -' - -test_expect_success '#19: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19 -setup: cwd: $here/19 -setup: prefix: sub/sub/ -EOF - test_repo 19/sub/sub "$here/19/.git" ../.. -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=wt at root' ' - cat >19/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/19/wt -setup: cwd: $here/19 -setup: prefix: (null) -EOF - test_repo 19 .git "$here/19/wt" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' ' - cat >19/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/19/wt -setup: cwd: $here/19 -setup: prefix: (null) -EOF - test_repo 19 .git wt -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' ' - cat >19/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19/wt -setup: cwd: $here/19 -setup: prefix: (null) -EOF - test_repo 19 "$here/19/.git" wt -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=wt at root' ' - cat >19/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19/wt -setup: cwd: $here/19 -setup: prefix: (null) -EOF - test_repo 19 "$here/19/.git" "$here/19/wt" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/19/wt -setup: cwd: $here/19/sub/sub -setup: prefix: (null) -EOF - test_repo 19/sub/sub ../../.git "$here/19/wt" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/19/wt -setup: cwd: $here/19/sub/sub -setup: prefix: (null) -EOF - test_repo 19/sub/sub ../../.git ../../wt -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19/wt -setup: cwd: $here/19/sub/sub -setup: prefix: (null) -EOF - test_repo 19/sub/sub "$here/19/.git" ../../wt -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=wt in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here/19/wt -setup: cwd: $here/19/sub/sub -setup: prefix: (null) -EOF - test_repo 19/sub/sub "$here/19/.git" "$here/19/wt" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=.. at root' ' - cat >19/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 19/ -EOF - test_repo 19 .git "$here" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' ' - cat >19/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 19/ -EOF - test_repo 19 .git .. -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=..(rel) at root' ' - cat >19/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 19/ -EOF - test_repo 19 "$here/19/.git" .. -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=.. at root' ' - cat >19/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 19/ -EOF - test_repo 19 "$here/19/.git" "$here" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 19/sub/sub/ -EOF - test_repo 19/sub/sub ../../.git "$here" -' - -test_expect_success '#19: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 19/sub/sub/ -EOF - test_repo 19/sub/sub ../../.git ../../.. -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 19/sub/sub/ -EOF - test_repo 19/sub/sub "$here/19/.git" ../../../ -' - -test_expect_success '#19: GIT_DIR, GIT_WORK_TREE=.. in subdir' ' - cat >19/sub/sub/expected <<EOF && -setup: git_dir: $here/19/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 19/sub/sub/ -EOF - test_repo 19/sub/sub "$here/19/.git" "$here" -' - -# -# case #20.1 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a directory -# - cwd is inside .git -# -# Output: -# -# core.worktree is ignored -> #16.1 - -test_expect_success '#20.1: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 20 20/sub && - cd 20 && - git init && - git config core.worktree non-existent && - mkdir .git/wt .git/wt/sub && - cd .. -' - -test_expect_success '#20.1: at .git' ' - cat >20/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: (null) -setup: cwd: $here/20/.git -setup: prefix: (null) -EOF - test_repo 20/.git -' - -test_expect_success '#20.1: in .git/wt' ' - cat >20/.git/wt/expected <<EOF && -setup: git_dir: $here/20/.git -setup: worktree: (null) -setup: cwd: $here/20/.git/wt -setup: prefix: (null) -EOF - test_repo 20/.git/wt -' - -test_expect_success '#20.1: in .git/wt/sub' ' - cat >20/.git/wt/sub/expected <<EOF && -setup: git_dir: $here/20/.git -setup: worktree: (null) -setup: cwd: $here/20/.git/wt/sub -setup: prefix: (null) -EOF - test_repo 20/.git/wt/sub -' - -# -# case #20.2 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a directory -# - core.bare is set -# -# Output: -# -# core.worktree is ignored -> #16.2 - -test_expect_success '#20.2: setup' ' - git config --file="$here/20/.git/config" core.bare true -' - -test_expect_success '#20.2: at .git' ' - cat >20/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: (null) -setup: cwd: $here/20/.git -setup: prefix: (null) -EOF - test_repo 20/.git -' - -test_expect_success '#20.2: in .git/wt' ' - cat >20/.git/wt/expected <<EOF && -setup: git_dir: $here/20/.git -setup: worktree: (null) -setup: cwd: $here/20/.git/wt -setup: prefix: (null) -EOF - test_repo 20/.git/wt -' - -test_expect_success '#20.2: in .git/wt/sub' ' - cat >20/.git/wt/sub/expected <<EOF && -setup: git_dir: $here/20/.git -setup: worktree: (null) -setup: cwd: $here/20/.git/wt/sub -setup: prefix: (null) -EOF - test_repo 20/.git/wt/sub -' - -test_expect_success '#20.2: at root' ' - cat >20/expected <<EOF && -setup: git_dir: .git -setup: worktree: (null) -setup: cwd: $here/20 -setup: prefix: (null) -EOF - test_repo 20 -' - -test_expect_success '#20.2: in subdir' ' - cat >20/sub/expected <<EOF && -setup: git_dir: $here/20/.git -setup: worktree: (null) -setup: cwd: $here/20/sub -setup: prefix: (null) -EOF - test_repo 20/sub -' - -# -# case #21.1 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a directory -# - cwd is inside .git -# -# Output: -# -# GIT_WORK_TREE/core.worktree are ignored -> #20.1 - -test_expect_success '#21.1: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 21 21/sub && - cd 21 && - git init && - git config core.worktree non-existent && - GIT_WORK_TREE=non-existent-too && - export GIT_WORK_TREE && - mkdir .git/wt .git/wt/sub && - cd .. -' - -test_expect_success '#21.1: at .git' ' - cat >21/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: (null) -setup: cwd: $here/21/.git -setup: prefix: (null) -EOF - test_repo 21/.git -' - -test_expect_success '#21.1: in .git/wt' ' - cat >21/.git/wt/expected <<EOF && -setup: git_dir: $here/21/.git -setup: worktree: (null) -setup: cwd: $here/21/.git/wt -setup: prefix: (null) -EOF - test_repo 21/.git/wt -' - -test_expect_success '#21.1: in .git/wt/sub' ' - cat >21/.git/wt/sub/expected <<EOF && -setup: git_dir: $here/21/.git -setup: worktree: (null) -setup: cwd: $here/21/.git/wt/sub -setup: prefix: (null) -EOF - test_repo 21/.git/wt/sub -' - -# -# case #21.2 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a directory -# - core.bare is set -# -# Output: -# -# GIT_WORK_TREE/core.worktree are ignored -> #20.2 - -test_expect_success '#21.2: setup' ' - git config --file="$here/21/.git/config" core.bare true -' - -test_expect_success '#21.2: at .git' ' - cat >21/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: (null) -setup: cwd: $here/21/.git -setup: prefix: (null) -EOF - test_repo 21/.git -' - -test_expect_success '#21.2: in .git/wt' ' - cat >21/.git/wt/expected <<EOF && -setup: git_dir: $here/21/.git -setup: worktree: (null) -setup: cwd: $here/21/.git/wt -setup: prefix: (null) -EOF - test_repo 21/.git/wt -' - -test_expect_success '#21.2: in .git/wt/sub' ' - cat >21/.git/wt/sub/expected <<EOF && -setup: git_dir: $here/21/.git -setup: worktree: (null) -setup: cwd: $here/21/.git/wt/sub -setup: prefix: (null) -EOF - test_repo 21/.git/wt/sub -' - -test_expect_success '#21.2: at root' ' - cat >21/expected <<EOF && -setup: git_dir: .git -setup: worktree: (null) -setup: cwd: $here/21 -setup: prefix: (null) -EOF - test_repo 21 -' - -test_expect_success '#21.2: in subdir' ' - cat >21/sub/expected <<EOF && -setup: git_dir: $here/21/.git -setup: worktree: (null) -setup: cwd: $here/21/sub -setup: prefix: (null) -EOF - test_repo 21/sub -' - -# -# case #22.1 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a directory -# - cwd is inside .git -# -# Output: -# -# bare attribute is ignored -# -# - worktree is at core.worktree -# - cwd is at worktree root -# - prefix is calculated -# - git_dir is at $GIT_DIR -# - cwd can be outside worktree - -test_expect_success '#22.1: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 22 && - cd 22 && - git init && - mkdir .git/sub .git/wt .git/wt/sub && - cd .. -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=. at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: $here/22/.git -setup: cwd: $here/22/.git -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22/.git" && - test_repo 22/.git . -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=.(rel) at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: $here/22/.git -setup: cwd: $here/22/.git -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree . && - test_repo 22/.git . -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=. at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git -setup: cwd: $here/22/.git -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22/.git" && - test_repo 22/.git "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=.(rel) at root' ' - cat >22/.git/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git -setup: cwd: $here/22/.git -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree . && - test_repo 22/.git "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=. in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git -setup: cwd: $here/22/.git -setup: prefix: sub/ -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22/.git" && - test_repo 22/.git/sub .. -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=.(rel) in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git -setup: cwd: $here/22/.git -setup: prefix: sub/ -EOF - git config --file="$here/22/.git/config" core.worktree . && - test_repo 22/.git/sub/ .. -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=. in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git -setup: cwd: $here/22/.git -setup: prefix: sub/ -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22/.git" && - test_repo 22/.git/sub "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=.(rel) in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git -setup: cwd: $here/22/.git -setup: prefix: sub/ -EOF - git config --file="$here/22/.git/config" core.worktree . && - test_repo 22/.git/sub "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=wt at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: $here/22/.git/wt -setup: cwd: $here/22/.git -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22/.git/wt" && - test_repo 22/.git . -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=wt(rel) at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: . -setup: worktree: $here/22/.git/wt -setup: cwd: $here/22/.git -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree wt && - test_repo 22/.git . -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=wt(rel) at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git/wt -setup: cwd: $here/22/.git -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree wt && - test_repo 22/.git "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=wt at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git/wt -setup: cwd: $here/22/.git -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22/.git/wt" && - test_repo 22/.git "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=wt in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: .. -setup: worktree: $here/22/.git/wt -setup: cwd: $here/22/.git/sub -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22/.git/wt" && - test_repo 22/.git/sub .. -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=wt(rel) in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: .. -setup: worktree: $here/22/.git/wt -setup: cwd: $here/22/.git/sub -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree wt && - test_repo 22/.git/sub .. -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=wt(rel) in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git/wt -setup: cwd: $here/22/.git/sub -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree wt && - test_repo 22/.git/sub "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=wt in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22/.git/wt -setup: cwd: $here/22/.git/sub -setup: prefix: (null) -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22/.git/wt" && - test_repo 22/.git/sub "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=.. at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22 -setup: cwd: $here/22 -setup: prefix: .git/ -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22" && - test_repo 22/.git . -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=..(rel) at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22 -setup: cwd: $here/22 -setup: prefix: .git/ -EOF - git config --file="$here/22/.git/config" core.worktree .. && - test_repo 22/.git . -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=..(rel) at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22 -setup: cwd: $here/22 -setup: prefix: .git/ -EOF - git config --file="$here/22/.git/config" core.worktree .. && - test_repo 22/.git "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=.. at .git' ' - cat >22/.git/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22 -setup: cwd: $here/22 -setup: prefix: .git/ -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22" && - test_repo 22/.git "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=.. in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22 -setup: cwd: $here/22 -setup: prefix: .git/sub/ -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22" && - test_repo 22/.git/sub .. -' - -test_expect_success '#22.1: GIT_DIR(rel), core.worktree=..(rel) in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22 -setup: cwd: $here/22 -setup: prefix: .git/sub/ -EOF - git config --file="$here/22/.git/config" core.worktree .. && - test_repo 22/.git/sub .. -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=..(rel) in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22 -setup: cwd: $here/22 -setup: prefix: .git/sub/ -EOF - git config --file="$here/22/.git/config" core.worktree .. && - test_repo 22/.git/sub "$here/22/.git" -' - -test_expect_success '#22.1: GIT_DIR, core.worktree=.. in .git/sub' ' - cat >22/.git/sub/expected <<EOF && -setup: git_dir: $here/22/.git -setup: worktree: $here/22 -setup: cwd: $here/22 -setup: prefix: .git/sub/ -EOF - git config --file="$here/22/.git/config" core.worktree "$here/22" && - test_repo 22/.git/sub "$here/22/.git" -' - -# -# case #22.2 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a directory -# - core.bare is set -# -# Output: -# -# core.worktree and core.bare conflict, won't fly. - -test_expect_success '#22.2: setup' ' - git config --file="$here/22/.git/config" core.bare true -' - -test_expect_success '#22.2: at .git' ' + setup_repo 19 unset "" true && + mkdir -p 19/sub/sub 19/wt/sub +' +run_wt_tests 19 + +test_expect_success '#20a: core.worktree without GIT_DIR ignored (inside .git)' ' + # Just like case #16a. + setup_repo 20a non-existent "" unset && + mkdir -p 20a/.git/wt/sub && + try_case 20a/.git unset unset \ + . "(null)" "$here/20a/.git" "(null)" && + try_case 20a/.git/wt unset unset \ + "$here/20a/.git" "(null)" "$here/20a/.git/wt" "(null)" && + try_case 20a/.git/wt/sub unset unset \ + "$here/20a/.git" "(null)" "$here/20a/.git/wt/sub" "(null)" +' + +test_expect_success '#20b/c: core.worktree without GIT_DIR ignored (bare repository)' ' + # Just like case #16b/c. + setup_repo 20b non-existent "" true && + mkdir -p 20b/.git/wt/sub && + try_case 20b/.git unset unset \ + . "(null)" "$here/20b/.git" "(null)" && + try_case 20b/.git/wt unset unset \ + "$here/20b/.git" "(null)" "$here/20b/.git/wt" "(null)" && + try_case 20b/.git/wt/sub unset unset \ + "$here/20b/.git" "(null)" "$here/20b/.git/wt/sub" "(null)" && + try_repo 20c unset unset non-existent "" true \ + .git "(null)" "$here/20c" "(null)" \ + "$here/20c/.git" "(null)" "$here/20c/sub" "(null)" +' + +test_expect_success '#21: core.worktree+GIT_WORK_TREE without GIT_DIR ignored (bare cases)' ' + setup_repo 21a non-existent "" unset && + mkdir -p 21a/.git/wt/sub && + try_case 21a/.git non-existent-too unset \ + . "(null)" "$here/21a/.git" "(null)" && + try_case 21a/.git/wt non-existent-too unset \ + "$here/21a/.git" "(null)" "$here/21a/.git/wt" "(null)" && + try_case 21a/.git/wt/sub non-existent-too unset \ + "$here/21a/.git" "(null)" "$here/21a/.git/wt/sub" "(null)" && + + setup_repo 21b non-existent "" true && + mkdir -p 21b/.git/wt/sub && + try_case 21b/.git non-existent-too unset \ + . "(null)" "$here/21b/.git" "(null)" && + try_case 21b/.git/wt non-existent-too unset \ + "$here/21b/.git" "(null)" "$here/21b/.git/wt" "(null)" && + try_case 21b/.git/wt/sub non-existent-too unset \ + "$here/21b/.git" "(null)" "$here/21b/.git/wt/sub" "(null)" && + + try_repo 21c non-existent-too unset non-existent "" true \ + .git "(null)" "$here/21c" "(null)" \ + "$here/21c/.git" "(null)" "$here/21c/sub" "(null)" +' + +test_expect_success '#22a: core.worktree = GIT_DIR = .git dir' ' + # like case #6. + + setup_repo 22a "$here/22a/.git" "" unset && + setup_repo 22ab . "" unset + mkdir -p 22a/.git/sub 22a/sub && + mkdir -p 22ab/.git/sub 22ab/sub && + try_case 22a/.git unset . \ + . "$here/22a/.git" "$here/22a/.git" "(null)" && + try_case 22a/.git unset "$here/22a/.git" \ + "$here/22a/.git" "$here/22a/.git" "$here/22a/.git" "(null)" && + try_case 22a/.git/sub unset .. \ + "$here/22a/.git" "$here/22a/.git" "$here/22a/.git" sub/ && + try_case 22a/.git/sub unset "$here/22a/.git" \ + "$here/22a/.git" "$here/22a/.git" "$here/22a/.git" sub/ && + + try_case 22ab/.git unset . \ + . "$here/22ab/.git" "$here/22ab/.git" "(null)" && + try_case 22ab/.git unset "$here/22ab/.git" \ + "$here/22ab/.git" "$here/22ab/.git" "$here/22ab/.git" "(null)" && + try_case 22ab/.git/sub unset .. \ + "$here/22ab/.git" "$here/22ab/.git" "$here/22ab/.git" sub/ && + try_case 22ab/.git unset "$here/22ab/.git" \ + "$here/22ab/.git" "$here/22ab/.git" "$here/22ab/.git" "(null)" +' + +test_expect_success '#22b: core.worktree child of .git, GIT_DIR=.git' ' + setup_repo 22b "$here/22b/.git/wt" "" unset && + setup_repo 22bb wt "" unset && + mkdir -p 22b/.git/sub 22b/sub 22b/.git/wt/sub 22b/wt/sub && + mkdir -p 22bb/.git/sub 22bb/sub 22bb/.git/wt 22bb/wt && + + try_case 22b/.git unset . \ + . "$here/22b/.git/wt" "$here/22b/.git" "(null)" && + try_case 22b/.git unset "$here/22b/.git" \ + "$here/22b/.git" "$here/22b/.git/wt" "$here/22b/.git" "(null)" && + try_case 22b/.git/sub unset .. \ + .. "$here/22b/.git/wt" "$here/22b/.git/sub" "(null)" && + try_case 22b/.git/sub unset "$here/22b/.git" \ + "$here/22b/.git" "$here/22b/.git/wt" "$here/22b/.git/sub" "(null)" && + + try_case 22bb/.git unset . \ + . "$here/22bb/.git/wt" "$here/22bb/.git" "(null)" && + try_case 22bb/.git unset "$here/22bb/.git" \ + "$here/22bb/.git" "$here/22bb/.git/wt" "$here/22bb/.git" "(null)" && + try_case 22bb/.git/sub unset .. \ + .. "$here/22bb/.git/wt" "$here/22bb/.git/sub" "(null)" && + try_case 22bb/.git/sub unset "$here/22bb/.git" \ + "$here/22bb/.git" "$here/22bb/.git/wt" "$here/22bb/.git/sub" "(null)" +' + +test_expect_success '#22c: core.worktree = .git/.., GIT_DIR=.git' ' + setup_repo 22c "$here/22c" "" unset && + setup_repo 22cb .. "" unset && + mkdir -p 22c/.git/sub 22c/sub && + mkdir -p 22cb/.git/sub 22cb/sub && + + try_case 22c/.git unset . \ + "$here/22c/.git" "$here/22c" "$here/22c" .git/ && + try_case 22c/.git unset "$here/22c/.git" \ + "$here/22c/.git" "$here/22c" "$here/22c" .git/ && + try_case 22c/.git/sub unset .. \ + "$here/22c/.git" "$here/22c" "$here/22c" .git/sub/ && + try_case 22c/.git/sub unset "$here/22c/.git" \ + "$here/22c/.git" "$here/22c" "$here/22c" .git/sub/ && + + try_case 22cb/.git unset . \ + "$here/22cb/.git" "$here/22cb" "$here/22cb" .git/ && + try_case 22cb/.git unset "$here/22cb/.git" \ + "$here/22cb/.git" "$here/22cb" "$here/22cb" .git/ && + try_case 22cb/.git/sub unset .. \ + "$here/22cb/.git" "$here/22cb" "$here/22cb" .git/sub/ && + try_case 22cb/.git/sub unset "$here/22cb/.git" \ + "$here/22cb/.git" "$here/22cb" "$here/22cb" .git/sub/ +' + +test_expect_success '#22.2: core.worktree and core.bare conflict' ' + setup_repo 22 "$here/22" "" true && ( - cd 22/.git && - GIT_DIR=. && - export GIT_DIR && - test_must_fail git symbolic-ref HEAD 2>result && - grep "core.bare and core.worktree do not make sense" result - ) -' - -test_expect_success '#22.2: at root' ' + cd 22/.git && + GIT_DIR=. && + export GIT_DIR && + test_must_fail git symbolic-ref HEAD 2>result + ) && ( - cd 22 && - GIT_DIR=.git && - export GIT_DIR && - test_must_fail git symbolic-ref HEAD 2>result && - grep "core.bare and core.worktree do not make sense" result - ) + cd 22 && + GIT_DIR=.git && + export GIT_DIR && + test_must_fail git symbolic-ref HEAD 2>result + ) && + grep "core.bare and core.worktree" 22/.git/result && + grep "core.bare and core.worktree" 22/result ' -# -# case #23 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a directory -# - core.bare is set -# -# Output: -# -# core.worktree is overridden by GIT_WORK_TREE -> #19 - +# Case #23: GIT_DIR + GIT_WORK_TREE(+core.worktree) suppresses bareness. test_expect_success '#23: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 23 23/sub 23/sub/sub 23.wt 23.wt/sub 23/wt 23/wt/sub && - cd 23 && - git init && - git config core.bare true && - git config core.worktree non-existent && - cd .. -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=root at root' ' - cat >23/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/23 -setup: cwd: $here/23 -setup: prefix: (null) -EOF - test_repo 23 .git "$here/23" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' ' - cat >23/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/23 -setup: cwd: $here/23 -setup: prefix: (null) -EOF - test_repo 23 .git . -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=root at root' ' - cat >23/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23 -setup: cwd: $here/23 -setup: prefix: (null) -EOF - test_repo 23 "$here/23/.git" "$here/23" -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=root(rel) at root' ' - cat >23/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23 -setup: cwd: $here/23 -setup: prefix: (null) -EOF - test_repo 23 "$here/23/.git" . -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORKTREE=root in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23 -setup: cwd: $here/23 -setup: prefix: sub/sub/ -EOF - test_repo 23/sub/sub ../../.git "$here/23" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23 -setup: cwd: $here/23 -setup: prefix: sub/sub/ -EOF - test_repo 23/sub/sub ../../.git ../.. -' - -test_expect_success '#23: GIT_DIR, GIT_WORKTREE=root in subdir' ' - cat >23/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23 -setup: cwd: $here/23 -setup: prefix: sub/ -EOF - test_repo 23/sub "$here/23/.git" "$here/23" -' - -test_expect_success '#23: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23 -setup: cwd: $here/23 -setup: prefix: sub/sub/ -EOF - test_repo 23/sub/sub "$here/23/.git" ../.. -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=wt at root' ' - cat >23/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/23/wt -setup: cwd: $here/23 -setup: prefix: (null) -EOF - test_repo 23 .git "$here/23/wt" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' ' - cat >23/expected <<EOF && -setup: git_dir: .git -setup: worktree: $here/23/wt -setup: cwd: $here/23 -setup: prefix: (null) -EOF - test_repo 23 .git wt -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' ' - cat >23/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23/wt -setup: cwd: $here/23 -setup: prefix: (null) -EOF - test_repo 23 "$here/23/.git" wt -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=wt at root' ' - cat >23/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23/wt -setup: cwd: $here/23 -setup: prefix: (null) -EOF - test_repo 23 "$here/23/.git" "$here/23/wt" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/23/wt -setup: cwd: $here/23/sub/sub -setup: prefix: (null) -EOF - test_repo 23/sub/sub ../../.git "$here/23/wt" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: ../../.git -setup: worktree: $here/23/wt -setup: cwd: $here/23/sub/sub -setup: prefix: (null) -EOF - test_repo 23/sub/sub ../../.git ../../wt -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23/wt -setup: cwd: $here/23/sub/sub -setup: prefix: (null) -EOF - test_repo 23/sub/sub "$here/23/.git" ../../wt -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=wt in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here/23/wt -setup: cwd: $here/23/sub/sub -setup: prefix: (null) -EOF - test_repo 23/sub/sub "$here/23/.git" "$here/23/wt" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=.. at root' ' - cat >23/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 23/ -EOF - test_repo 23 .git "$here" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' ' - cat >23/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 23/ -EOF - test_repo 23 .git .. -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=..(rel) at root' ' - cat >23/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 23/ -EOF - test_repo 23 "$here/23/.git" .. -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=.. at root' ' - cat >23/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 23/ -EOF - test_repo 23 "$here/23/.git" "$here" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 23/sub/sub/ -EOF - test_repo 23/sub/sub ../../.git "$here" -' - -test_expect_success '#23: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 23/sub/sub/ -EOF - test_repo 23/sub/sub ../../.git ../../.. -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 23/sub/sub/ -EOF - test_repo 23/sub/sub "$here/23/.git" ../../../ -' - -test_expect_success '#23: GIT_DIR, GIT_WORK_TREE=.. in subdir' ' - cat >23/sub/sub/expected <<EOF && -setup: git_dir: $here/23/.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 23/sub/sub/ -EOF - test_repo 23/sub/sub "$here/23/.git" "$here" -' - -# -# case #24 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a file -# - core.bare is set -# -# Output: -# -# #16.2 except git_dir is set according to .git file - -test_expect_success '#24: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 24 24/sub && - cd 24 && - git init && - git config core.bare true && - mv .git ../24.git && - echo gitdir: ../24.git >.git && - cd .. -' - -test_expect_success '#24: at root' ' - cat >24/expected <<EOF && -setup: git_dir: $here/24.git -setup: worktree: (null) -setup: cwd: $here/24 -setup: prefix: (null) -EOF - test_repo 24 + setup_repo 23 non-existent "" true && + mkdir -p 23/sub/sub 23/wt/sub ' +run_wt_tests 23 -test_expect_success '#24: in subdir' ' - cat >24/sub/expected <<EOF && -setup: git_dir: $here/24.git -setup: worktree: (null) -setup: cwd: $here/24/sub -setup: prefix: (null) -EOF - test_repo 24/sub -' - -# -# case #25 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is not set -# - .git is a file -# - core.bare is set -# -# Output: -# -# #17.2 except git_dir is set according to .git file - -test_expect_success '#25: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 25 25/sub && - cd 25 && - git init && - git config core.bare true && - GIT_WORK_TREE=non-existent && - export GIT_WORK_TREE && - mv .git ../25.git && - echo gitdir: ../25.git >.git && - cd .. -' - -test_expect_success '#25: at root' ' - cat >25/expected <<EOF && -setup: git_dir: $here/25.git -setup: worktree: (null) -setup: cwd: $here/25 -setup: prefix: (null) -EOF - test_repo 25 -' - -test_expect_success '#25: in subdir' ' - cat >25/sub/expected <<EOF && -setup: git_dir: $here/25.git -setup: worktree: (null) -setup: cwd: $here/25/sub -setup: prefix: (null) -EOF - test_repo 25/sub -' - -# -# case #26 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is not set -# - .git is a file -# - core.bare is set -# -# Output: -# -# #18 except git_dir is set according to .git file - -test_expect_success '#26: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 26 26/sub && - cd 26 && - git init && - git config core.bare true && - mv .git ../26.git && - echo gitdir: ../26.git >.git && - cd .. +test_expect_success '#24: bare repo has no worktree (gitfile case)' ' + try_repo 24 unset unset unset gitfile true \ + "$here/24.git" "(null)" "$here/24" "(null)" \ + "$here/24.git" "(null)" "$here/24/sub" "(null)" ' -test_expect_success '#26: (rel) at root' ' - cat >26/expected <<EOF && -setup: git_dir: $here/26.git -setup: worktree: (null) -setup: cwd: $here/26 -setup: prefix: (null) -EOF - test_repo 26 .git +test_expect_success '#25: GIT_WORK_TREE ignored if GIT_DIR unset (bare gitfile case)' ' + try_repo 25 non-existent unset unset gitfile true \ + "$here/25.git" "(null)" "$here/25" "(null)" \ + "$here/25.git" "(null)" "$here/25/sub" "(null)" ' -test_expect_success '#26: at root' ' - cat >26/expected <<EOF && -setup: git_dir: $here/26.git -setup: worktree: (null) -setup: cwd: $here/26 -setup: prefix: (null) -EOF - test_repo 26 "$here/26/.git" +test_expect_success '#26: bare repo has no worktree (GIT_DIR -> gitfile case)' ' + try_repo 26 unset "$here/26/.git" unset gitfile true \ + "$here/26.git" "(null)" "$here/26" "(null)" \ + "$here/26.git" "(null)" "$here/26/sub" "(null)" && + try_repo 26b unset .git unset gitfile true \ + "$here/26b.git" "(null)" "$here/26b" "(null)" \ + "$here/26b.git" "(null)" "$here/26b/sub" "(null)" ' -test_expect_success '#26: (rel) in subdir' ' - cat >26/sub/expected <<EOF && -setup: git_dir: $here/26.git -setup: worktree: (null) -setup: cwd: $here/26/sub -setup: prefix: (null) -EOF - test_repo 26/sub ../.git -' - -test_expect_success '#26: in subdir' ' - cat >26/sub/expected <<EOF && -setup: git_dir: $here/26.git -setup: worktree: (null) -setup: cwd: $here/26/sub -setup: prefix: (null) -EOF - test_repo 26/sub "$here/26/.git" -' - -# -# case #27 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is set -# - .git is a file -# - core.worktree is not set -# - core.bare is set -# -# Output: -# -# #19 except git_dir is set according to .git file - +# Case #27: GIT_DIR + GIT_WORK_TREE suppresses bareness (with gitfile). test_expect_success '#27: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 27 27/sub 27/sub/sub 27.wt 27.wt/sub 27/wt 27/wt/sub && - cd 27 && - git init && - git config core.bare true && - mv .git ../27.git && - echo gitdir: ../27.git >.git && - cd .. -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=root at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27 -setup: cwd: $here/27 -setup: prefix: (null) -EOF - test_repo 27 .git "$here/27" -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27 -setup: cwd: $here/27 -setup: prefix: (null) -EOF - test_repo 27 .git . -' - -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=root at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27 -setup: cwd: $here/27 -setup: prefix: (null) -EOF - test_repo 27 "$here/27/.git" "$here/27" -' - -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=root(rel) at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27 -setup: cwd: $here/27 -setup: prefix: (null) -EOF - test_repo 27 "$here/27/.git" . -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORKTREE=root in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27 -setup: cwd: $here/27 -setup: prefix: sub/sub/ -EOF - test_repo 27/sub/sub ../../.git "$here/27" -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27 -setup: cwd: $here/27 -setup: prefix: sub/sub/ -EOF - test_repo 27/sub/sub ../../.git ../.. -' - -test_expect_success '#27: GIT_DIR, GIT_WORKTREE=root in subdir' ' - cat >27/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27 -setup: cwd: $here/27 -setup: prefix: sub/ -EOF - test_repo 27/sub "$here/27/.git" "$here/27" -' - -test_expect_success '#27: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27 -setup: cwd: $here/27 -setup: prefix: sub/sub/ -EOF - test_repo 27/sub/sub "$here/27/.git" ../.. -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=wt at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27/wt -setup: cwd: $here/27 -setup: prefix: (null) -EOF - test_repo 27 .git "$here/27/wt" + setup_repo 27 unset gitfile true && + mkdir -p 27/sub/sub 27/wt/sub ' +run_wt_tests 27 gitfile -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27/wt -setup: cwd: $here/27 -setup: prefix: (null) -EOF - test_repo 27 .git wt +test_expect_success '#28: core.worktree ignored if GIT_DIR unset (bare gitfile case)' ' + try_repo 28 unset unset non-existent gitfile true \ + "$here/28.git" "(null)" "$here/28" "(null)" \ + "$here/28.git" "(null)" "$here/28/sub" "(null)" ' -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27/wt -setup: cwd: $here/27 -setup: prefix: (null) -EOF - test_repo 27 "$here/27/.git" wt +test_expect_success '#29: GIT_WORK_TREE+core.worktree ignored if GIT_DIR unset (bare gitfile case)' ' + try_repo 29 non-existent-too unset non-existent gitfile true \ + "$here/29.git" "(null)" "$here/29" "(null)" \ + "$here/29.git" "(null)" "$here/29/sub" "(null)" ' -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=wt at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27/wt -setup: cwd: $here/27 -setup: prefix: (null) -EOF - test_repo 27 "$here/27/.git" "$here/27/wt" -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27/wt -setup: cwd: $here/27/sub/sub -setup: prefix: (null) -EOF - test_repo 27/sub/sub ../../.git "$here/27/wt" -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27/wt -setup: cwd: $here/27/sub/sub -setup: prefix: (null) -EOF - test_repo 27/sub/sub ../../.git ../../wt -' - -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27/wt -setup: cwd: $here/27/sub/sub -setup: prefix: (null) -EOF - test_repo 27/sub/sub "$here/27/.git" ../../wt -' - -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=wt in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here/27/wt -setup: cwd: $here/27/sub/sub -setup: prefix: (null) -EOF - test_repo 27/sub/sub "$here/27/.git" "$here/27/wt" -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=.. at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 27/ -EOF - test_repo 27 .git "$here" -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 27/ -EOF - test_repo 27 .git .. -' - -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=..(rel) at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 27/ -EOF - test_repo 27 "$here/27/.git" .. -' - -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=.. at root' ' - cat >27/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 27/ -EOF - test_repo 27 "$here/27/.git" "$here" -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 27/sub/sub/ -EOF - test_repo 27/sub/sub ../../.git "$here" -' - -test_expect_success '#27: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 27/sub/sub/ -EOF - test_repo 27/sub/sub ../../.git ../../.. -' - -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 27/sub/sub/ -EOF - test_repo 27/sub/sub "$here/27/.git" ../../../ -' - -test_expect_success '#27: GIT_DIR, GIT_WORK_TREE=.. in subdir' ' - cat >27/sub/sub/expected <<EOF && -setup: git_dir: $here/27.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 27/sub/sub/ -EOF - test_repo 27/sub/sub "$here/27/.git" "$here" -' - -# -# case #28 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a file -# - core.bare is set -# -# Output: -# -# core.worktree is ignored -> #24 - -test_expect_success '#28: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 28 28/sub && - cd 28 && - git init && - git config core.bare true && - git config core.worktree non-existent && - mv .git ../28.git && - echo gitdir: ../28.git >.git && - cd .. -' - -test_expect_success '#28: at root' ' - cat >28/expected <<EOF && -setup: git_dir: $here/28.git -setup: worktree: (null) -setup: cwd: $here/28 -setup: prefix: (null) -EOF - test_repo 28 -' - -test_expect_success '#28: in subdir' ' - cat >28/sub/expected <<EOF && -setup: git_dir: $here/28.git -setup: worktree: (null) -setup: cwd: $here/28/sub -setup: prefix: (null) -EOF - test_repo 28/sub -' - -# -# case #29 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is not set -# - core.worktree is set -# - .git is a file -# - core.bare is set -# -# Output: -# -# GIT_WORK_TREE/core.worktree are ignored -> #28 - -test_expect_success '#29: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 29 29/sub && - cd 29 && - git init && - git config core.bare true && - GIT_WORK_TREE=non-existent && - export GIT_WORK_TREE && - mv .git ../29.git && - echo gitdir: ../29.git >.git && - cd .. -' - -test_expect_success '#29: at root' ' - cat >29/expected <<EOF && -setup: git_dir: $here/29.git -setup: worktree: (null) -setup: cwd: $here/29 -setup: prefix: (null) -EOF - test_repo 29 -' - -test_expect_success '#29: in subdir' ' - cat >29/sub/expected <<EOF && -setup: git_dir: $here/29.git -setup: worktree: (null) -setup: cwd: $here/29/sub -setup: prefix: (null) -EOF - test_repo 29/sub -' - -# -# case #30 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is not set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a file -# - core.bare is set -# -# Output: -# -# core.worktree and core.bare conflict, won't fly. - -test_expect_success '#30: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 30 && - cd 30 && - git init && - git config core.bare true && - git config core.worktree non-existent && - mv .git ../30.git && - echo gitdir: ../30.git >.git && - cd .. -' - -test_expect_success '#30: at root' ' +test_expect_success '#30: core.worktree and core.bare conflict (gitfile version)' ' + # Just like case #22. + setup_repo 30 "$here/30" gitfile true && ( - cd 30 && - GIT_DIR=.git && - export GIT_DIR && - test_must_fail git symbolic-ref HEAD 2>result && - grep "core.bare and core.worktree do not make sense" result - ) + cd 30 && + GIT_DIR=.git && + export GIT_DIR && + test_must_fail git symbolic-ref HEAD 2>result + ) && + grep "core.bare and core.worktree" 30/result ' -# -# case #31 -# -############################################################ -# -# Input: -# -# - GIT_WORK_TREE is set -# - GIT_DIR is set -# - core.worktree is set -# - .git is a file -# - core.bare is set -# -# Output: -# -# #23 except git_dir is set according to .git file - +# Case #31: GIT_DIR + GIT_WORK_TREE(+core.worktree) suppresses +# bareness (gitfile version). test_expect_success '#31: setup' ' - sane_unset GIT_DIR GIT_WORK_TREE && - mkdir 31 31/sub 31/sub/sub 31.wt 31.wt/sub 31/wt 31/wt/sub && - cd 31 && - git init && - git config core.bare true && - git config core.worktree non-existent && - mv .git ../31.git && - echo gitdir: ../31.git >.git && - cd .. -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=root at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31 -setup: cwd: $here/31 -setup: prefix: (null) -EOF - test_repo 31 .git "$here/31" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31 -setup: cwd: $here/31 -setup: prefix: (null) -EOF - test_repo 31 .git . -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=root at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31 -setup: cwd: $here/31 -setup: prefix: (null) -EOF - test_repo 31 "$here/31/.git" "$here/31" -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=root(rel) at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31 -setup: cwd: $here/31 -setup: prefix: (null) -EOF - test_repo 31 "$here/31/.git" . -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORKTREE=root in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31 -setup: cwd: $here/31 -setup: prefix: sub/sub/ -EOF - test_repo 31/sub/sub ../../.git "$here/31" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31 -setup: cwd: $here/31 -setup: prefix: sub/sub/ -EOF - test_repo 31/sub/sub ../../.git ../.. -' - -test_expect_success '#31: GIT_DIR, GIT_WORKTREE=root in subdir' ' - cat >31/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31 -setup: cwd: $here/31 -setup: prefix: sub/ -EOF - test_repo 31/sub "$here/31/.git" "$here/31" -' - -test_expect_success '#31: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31 -setup: cwd: $here/31 -setup: prefix: sub/sub/ -EOF - test_repo 31/sub/sub "$here/31/.git" ../.. -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=wt at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31/wt -setup: cwd: $here/31 -setup: prefix: (null) -EOF - test_repo 31 .git "$here/31/wt" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31/wt -setup: cwd: $here/31 -setup: prefix: (null) -EOF - test_repo 31 .git wt -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31/wt -setup: cwd: $here/31 -setup: prefix: (null) -EOF - test_repo 31 "$here/31/.git" wt -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=wt at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31/wt -setup: cwd: $here/31 -setup: prefix: (null) -EOF - test_repo 31 "$here/31/.git" "$here/31/wt" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31/wt -setup: cwd: $here/31/sub/sub -setup: prefix: (null) -EOF - test_repo 31/sub/sub ../../.git "$here/31/wt" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31/wt -setup: cwd: $here/31/sub/sub -setup: prefix: (null) -EOF - test_repo 31/sub/sub ../../.git ../../wt -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31/wt -setup: cwd: $here/31/sub/sub -setup: prefix: (null) -EOF - test_repo 31/sub/sub "$here/31/.git" ../../wt -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=wt in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here/31/wt -setup: cwd: $here/31/sub/sub -setup: prefix: (null) -EOF - test_repo 31/sub/sub "$here/31/.git" "$here/31/wt" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=.. at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 31/ -EOF - test_repo 31 .git "$here" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 31/ -EOF - test_repo 31 .git .. -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=..(rel) at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 31/ -EOF - test_repo 31 "$here/31/.git" .. -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=.. at root' ' - cat >31/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 31/ -EOF - test_repo 31 "$here/31/.git" "$here" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 31/sub/sub/ -EOF - test_repo 31/sub/sub ../../.git "$here" -' - -test_expect_success '#31: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 31/sub/sub/ -EOF - test_repo 31/sub/sub ../../.git ../../.. -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 31/sub/sub/ -EOF - test_repo 31/sub/sub "$here/31/.git" ../../../ -' - -test_expect_success '#31: GIT_DIR, GIT_WORK_TREE=.. in subdir' ' - cat >31/sub/sub/expected <<EOF && -setup: git_dir: $here/31.git -setup: worktree: $here -setup: cwd: $here -setup: prefix: 31/sub/sub/ -EOF - test_repo 31/sub/sub "$here/31/.git" "$here" + setup_repo 31 non-existent gitfile true && + mkdir -p 31/sub/sub 31/wt/sub ' +run_wt_tests 31 gitfile test_done |