A complete series after the WIP [1]. The rules are bent a bit, see 2/34.
178/376 test cases fail, but mostly because GIT_DIR=.git-file is
not supported. I'll send a bandage series shortly that will bring the
number of failed test cases to 20.
[1] 1287922310-14678-1-git-send-email-pclouds@gmail.com
Nguyễn Thái Ngọc Duy (34):
builtins: print setup info if repo is found
Add t1510 and basic rules that run repo setup
t1510: setup case #0
t1510: setup case #1
t1510: setup case #2
t1510: setup case #3
t1510: setup case #4
t1510: setup case #5
t1510: setup case #6
t1510: setup case #7
t1510: setup case #8
t1510: setup case #9
t1510: setup case #10
t1510: setup case #11
t1510: setup case #12
t1510: setup case #13
t1510: setup case #14
t1510: setup case #15
t1510: setup case #16
t1510: setup case #17
t1510: setup case #18
t1510: setup case #19
t1510: setup case #20
t1510: setup case #21
t1510: setup case #22
t1510: setup case #23
t1510: setup case #24
t1510: setup case #25
t1510: setup case #26
t1510: setup case #27
t1510: setup case #28
t1510: setup case #29
t1510: setup case #30
t1510: setup case #31
cache.h | 1 +
git.c | 36 +
t/t1510-repo-setup.sh | 4515 +++++++++++++++++++++++++++++++++++++++++++++++++
trace.c | 11 +
4 files changed, 4563 insertions(+), 0 deletions(-)
create mode 100755 t/t1510-repo-setup.sh
@@ -264,6 +287,19 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)use_pager=check_pager_config(p->cmd);if(use_pager==-1&&p->option&USE_PAGER)use_pager=1;++if((p->option&(RUN_SETUP|RUN_SETUP_GENTLY))&&+startup_info->have_repository&&/* get_git_dir() may set up repo, avoid that */+has_trace_fd()){+charcwd[PATH_MAX];+if(!getcwd(cwd,PATH_MAX))+die("Unable to get current working directory");++trace_printf("setup: git_dir: %s\n",quote_crnl(get_git_dir()));+trace_printf("setup: worktree: %s\n",quote_crnl(get_git_work_tree()));+trace_printf("setup: cwd: %s\n",quote_crnl(cwd));+trace_printf("setup: prefix: %s\n",quote_crnl(prefix));+}}commit_pager_choice();
@@ -103,4 +103,50 @@ EOFtest_repo0/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir11/sub1.wt1.wt/sub1/wt1/wt/sub&&+cd1&&+gitinit&&+exportGIT_WORK_TREE=non-existent&&+cd..+'++test_expect_failure'#1: at root''+cat>1/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/1+setup:cwd:$TRASH_DIRECTORY/1+setup:prefix:(null)+EOF+test_repo1+'++test_expect_failure'#1: in subdir''+cat>1/sub/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/1+setup:cwd:$TRASH_DIRECTORY/1+setup:prefix:sub/+EOF+test_repo1/sub+'+ test_done
@@ -0,0 +1,59 @@+#!/bin/sh++test_description='Tests of cwd/prefix/worktree/gitdir setup in all cases'++../test-lib.sh++#+# A few rules for repo setup:+#+# 1. GIT_DIR is relative to user's cwd. --git-dir is equivalent to+# GIT_DIR.+#+# 2. .git file is relative to git_dir. .git file is basically symlink+# in disguise. The directory where .git file points to will become+# new git_dir.+#+# 3. core.worktree is relative to git_dir.+#+# 4. GIT_WORK_TREE is relative to user's cwd. --work-tree is+# equivalent to GIT_WORK_TREE.+#+# 5. GIT_WORK_TREE/core.worktree is only effective if GIT_DIR is set+# Uneffective worktree settings should be warned.+#+# 6. Effective GIT_WORK_TREE overrides core.worktree and core.bare+#+# 7. Effective core.worktree conflicts with core.bare+#+# 8. If GIT_DIR is set but neither worktree nor bare setting is given,+# original cwd becomes worktree.+#+# 9. If .git discovery is done inside a repo, the repo becomes a bare+# repo. .git discovery is performed if GIT_DIR is not set.+#+# 10. If no worktree is available, cwd remains unchanged, prefix is+# NULL.+#+# 11. When user's cwd is outside worktree, cwd remains unchanged,+# prefix is NULL.+#++test_repo(){+(+if[-n"$1"];thencd"$1";fi&&+if[-ftrace];thenrmtrace;fi&&+GIT_TRACE="`pwd`/trace"gitsymbolic-refHEAD>/dev/null&&+grep'^setup: 'trace>result&&+test_cmpexpectedresult+)+}++# 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_done
@@ -56,4 +56,51 @@ test_repo() {# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir00/sub&&+cd0&&gitinit&&cd..+'++test_expect_success'#0: at root''+cat>0/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/0+setup:cwd:$TRASH_DIRECTORY/0+setup:prefix:(null)+EOF+test_repo0+'++test_expect_success'#0: in subdir''+cat>0/sub/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/0+setup:cwd:$TRASH_DIRECTORY/0+setup:prefix:sub/+EOF+test_repo0/sub+'+ test_done
@@ -149,4 +149,71 @@ EOFtest_repo1/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir22/sub&&+cd2&&gitinit&&cd..+'++test_expect_success'#2: at root''+cat>2/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/2/.git+setup:worktree:$TRASH_DIRECTORY/2+setup:cwd:$TRASH_DIRECTORY/2+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/2/.git"test_repo2+'++test_expect_success'#2: in subdir''+cat>2/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/2/.git+setup:worktree:$TRASH_DIRECTORY/2/sub+setup:cwd:$TRASH_DIRECTORY/2/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/2/.git"test_repo2/sub+'++test_expect_success'#2: relative GIT_DIR at root''+cat>2/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/2+setup:cwd:$TRASH_DIRECTORY/2+setup:prefix:(null)+EOF+GIT_DIR=.gittest_repo2+'++test_expect_success'#2: relative GIT_DIR in subdir''+cat>2/sub/expected<<EOF&&+setup:git_dir:../.git+setup:worktree:$TRASH_DIRECTORY/2/sub+setup:cwd:$TRASH_DIRECTORY/2/sub+setup:prefix:(null)+EOF+GIT_DIR=../.gittest_repo2/sub+'+ test_done
@@ -216,4 +216,271 @@ EOFGIT_DIR=../.gittest_repo2/sub'+#+# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir33/sub3/sub/sub3.wt3.wt/sub3/wt3/wt/sub&&+cd3&&gitinit&&cd..+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORK_TREE=root at root''+cat>3/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/3+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/3"test_repo3+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root''+cat>3/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/3+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=.test_repo3+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=root at root''+cat>3/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/3"test_repo3+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=root(rel) at root''+cat>3/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE=.test_repo3+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORKTREE=root in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/3"test_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../..test_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR, GIT_WORKTREE=root in subdir''+cat>3/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/3"test_repo3/sub+'++test_expect_success'#3: GIT_DIR, GIT_WORKTREE=root(rel) in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE=../..test_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORK_TREE=wt at root''+cat>3/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/3/wt+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/3/wt"test_repo3+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root''+cat>3/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/3/wt+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=wttest_repo3+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=wt(rel) at root''+cat>3/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3/wt+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE=wttest_repo3+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=wt at root''+cat>3/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3/wt+setup:cwd:$TRASH_DIRECTORY/3+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/3/wt"test_repo3+'++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:$TRASH_DIRECTORY/3/wt+setup:cwd:$TRASH_DIRECTORY/3/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/3/wt"test_repo3/sub/sub+'++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:$TRASH_DIRECTORY/3/wt+setup:cwd:$TRASH_DIRECTORY/3/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../wttest_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3/wt+setup:cwd:$TRASH_DIRECTORY/3/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE=../../wttest_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=wt in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY/3/wt+setup:cwd:$TRASH_DIRECTORY/3/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/3/wt"test_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORK_TREE=.. at root''+cat>3/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:3/+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo3+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root''+cat>3/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:3/+EOF+GIT_DIR=.gitGIT_WORK_TREE=..test_repo3+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=..(rel) at root''+cat>3/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:3/+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE=..test_repo3+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=.. at root''+cat>3/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:3/+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo3+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:3/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:3/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../..test_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:3/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE=../../../test_repo3/sub/sub+'++test_expect_success'#3: GIT_DIR, GIT_WORK_TREE=.. in subdir''+cat>3/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/3/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:3/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo3/sub/sub+'+ test_done
@@ -529,4 +529,51 @@ EOFtest_repo4/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++test_expect_success'#5: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir55/sub&&+cd5&&+gitinit&&+gitconfigcore.worktreenon-existent&&+exportGIT_WORK_TREE=non-existent-too&&+cd..+'++test_expect_failure'#5: at root''+cat>5/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/5+setup:cwd:$TRASH_DIRECTORY/5+setup:prefix:(null)+EOF+test_repo5+'++test_expect_failure'#5: in subdir''+cat>5/sub/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/5+setup:cwd:$TRASH_DIRECTORY/5+setup:prefix:sub/+EOF+test_repo5/sub+'+ test_done
@@ -483,4 +483,50 @@ EOFGIT_DIR="$TRASH_DIRECTORY/3/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo3/sub/sub'+#+# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir44/sub&&+cd4&&+gitinit&&+gitconfigcore.worktreenon-existent&&+cd..+'++test_expect_failure'#4: at root''+cat>4/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/4+setup:cwd:$TRASH_DIRECTORY/4+setup:prefix:(null)+EOF+test_repo4+'++test_expect_failure'#4: in subdir''+cat>4/sub/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/4+setup:cwd:$TRASH_DIRECTORY/4+setup:prefix:sub/+EOF+test_repo4/sub+'+ test_done
@@ -576,4 +576,295 @@ EOFtest_repo5/sub'+#+# 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++test_expect_success'#6: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir66/sub6/sub/sub6.wt6.wt/sub6/wt6/wt/sub&&+cd6&&gitinit&&cd..+'++test_expect_success'#6: GIT_DIR(rel), core.worktree=.. at root''+cat>6/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/6+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY/6"&&+GIT_DIR=.gittest_repo6+'++test_expect_success'#6: GIT_DIR(rel), core.worktree=..(rel) at root''+cat>6/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/6+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree..&&+GIT_DIR=.gittest_repo6+'++test_expect_success'#6: GIT_DIR, core.worktree=.. at root''+cat>6/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY/6"&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6+'++test_expect_success'#6: GIT_DIR, core.worktree=..(rel) at root''+cat>6/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree..&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6+'++test_expect_failure'#6: GIT_DIR(rel), core.worktree=.. in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY/6"&&+GIT_DIR=../../.gittest_repo6/sub/sub+'++test_expect_failure'#6: GIT_DIR(rel), core.worktree=..(rel) in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree..&&+GIT_DIR=../../.gittest_repo6/sub/sub+'++test_expect_success'#6: GIT_DIR, core.worktree=.. in subdir''+cat>6/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY/6"&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6/sub+'++test_expect_success'#6: GIT_DIR, core.worktree=..(rel) in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree..&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6/sub/sub+'++test_expect_success'#6: GIT_DIR(rel), core.worktree=../wt at root''+cat>6/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/6/wt+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY/6/wt"&&+GIT_DIR=.gittest_repo6+'++test_expect_success'#6: GIT_DIR(rel), core.worktree=../wt(rel) at root''+cat>6/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/6/wt+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree../wt&&+GIT_DIR=.gittest_repo6+'++test_expect_success'#6: GIT_DIR, core.worktree=../wt(rel) at root''+cat>6/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6/wt+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree../wt&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6+'++test_expect_success'#6: GIT_DIR, core.worktree=../wt at root''+cat>6/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6/wt+setup:cwd:$TRASH_DIRECTORY/6+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY/6/wt"&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6+'++test_expect_success'#6: GIT_DIR(rel), core.worktree=../wt in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:../../.git+setup:worktree:$TRASH_DIRECTORY/6/wt+setup:cwd:$TRASH_DIRECTORY/6/sub/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY/6/wt"&&+GIT_DIR=../../.gittest_repo6/sub/sub+'++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:$TRASH_DIRECTORY/6/wt+setup:cwd:$TRASH_DIRECTORY/6/sub/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree../wt&&+GIT_DIR=../../.gittest_repo6/sub/sub+'++test_expect_success'#6: GIT_DIR, core.worktree=../wt(rel) in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6/wt+setup:cwd:$TRASH_DIRECTORY/6/sub/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree../wt&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6/sub/sub+'++test_expect_success'#6: GIT_DIR, core.worktree=../wt in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY/6/wt+setup:cwd:$TRASH_DIRECTORY/6/sub/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY/6/wt"&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6/sub/sub+'++test_expect_success'#6: GIT_DIR(rel), core.worktree=../.. at root''+cat>6/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:6/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY"&&+GIT_DIR=.gittest_repo6+'++test_expect_success'#6: GIT_DIR(rel), core.worktree=../..(rel) at root''+cat>6/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:6/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree../../&&+GIT_DIR=.gittest_repo6+'++test_expect_success'#6: GIT_DIR, core.worktree=../..(rel) at root''+cat>6/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:6/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree../../&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6+'++test_expect_success'#6: GIT_DIR, core.worktree=../.. at root''+cat>6/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:6/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY"&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6+'++test_expect_failure'#6: GIT_DIR(rel), core.worktree=../.. in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:6/sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY"&&+GIT_DIR=../../.gittest_repo6/sub/sub+'++test_expect_failure'#6: GIT_DIR(rel), core.worktree=../..(rel) in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:6/sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree../..&&+GIT_DIR=../../.gittest_repo6/sub/sub+'++test_expect_success'#6: GIT_DIR, core.worktree=../..(rel) in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:6/sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree../..&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6/sub/sub+'++test_expect_success'#6: GIT_DIR, core.worktree=../.. in subdir''+cat>6/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/6/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:6/sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/6/.git/config"core.worktree"$TRASH_DIRECTORY"&&+GIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6/sub/sub+'+ test_done
@@ -1133,4 +1133,51 @@ EOFGIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo7/sub/sub'+#+# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir88/sub&&+cd8&&+gitinit&&+mv.git../8.git&&+echogitdir:../8.git>.git&&+cd..+'++test_expect_success'#8: at root''+cat>8/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/8.git+setup:worktree:$TRASH_DIRECTORY/8+setup:cwd:$TRASH_DIRECTORY/8+setup:prefix:(null)+EOF+test_repo8+'++test_expect_success'#8: in subdir''+cat>8/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/8.git+setup:worktree:$TRASH_DIRECTORY/8+setup:cwd:$TRASH_DIRECTORY/8+setup:prefix:sub/+EOF+test_repo8/sub+'+ test_done
@@ -1561,4 +1561,53 @@ EOFGIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo11/sub/sub'+#+# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1212/sub12/sub/sub12.wt12.wt/sub12/wt12/wt/sub&&+cd12&&+gitinit&&+gitconfigcore.worktreenon-existent&&+mv.git../12.git&&+echogitdir:../12.git>.git&&+cd..+'++test_expect_failure'#12: at root''+cat>12/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/12.git+setup:worktree:$TRASH_DIRECTORY/12+setup:cwd:$TRASH_DIRECTORY/12+setup:prefix:(null)+EOF+test_repo12+'++test_expect_failure'#12: in subdir''+cat>12/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/12.git+setup:worktree:$TRASH_DIRECTORY/12+setup:cwd:$TRASH_DIRECTORY/12+setup:prefix:sub/+EOF+test_repo12/sub+'+ test_done
@@ -1227,4 +1227,71 @@ EOFGIT_WORK_TREE=non-existenttest_repo9/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1010/sub&&+cd10&&+gitinit&&+mv.git../10.git&&+echogitdir:../10.git>.git&&+cd..+'++test_expect_failure'#10: at root''+cat>10/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/10.git+setup:worktree:$TRASH_DIRECTORY/10+setup:cwd:$TRASH_DIRECTORY/10+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/10/.git"test_repo10+'++test_expect_failure'#10: in subdir''+cat>10/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/10.git+setup:worktree:$TRASH_DIRECTORY/10/sub+setup:cwd:$TRASH_DIRECTORY/10/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/10/.git"test_repo10/sub+'++test_expect_failure'#10: relative GIT_DIR at root''+cat>10/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/10.git+setup:worktree:$TRASH_DIRECTORY/10+setup:cwd:$TRASH_DIRECTORY/10+setup:prefix:(null)+EOF+GIT_DIR=.gittest_repo10+'++test_expect_failure'#10: relative GIT_DIR in subdir''+cat>10/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/10.git+setup:worktree:$TRASH_DIRECTORY/10/sub+setup:cwd:$TRASH_DIRECTORY/10/sub+setup:prefix:(null)+EOF+GIT_DIR=../.gittest_repo10/sub+'+ test_done
@@ -867,4 +867,270 @@ EOFGIT_DIR="$TRASH_DIRECTORY/6/.git"test_repo6/sub/sub'+#+# 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'#7: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir77/sub7/sub/sub7.wt7.wt/sub7/wt7/wt/sub&&+cd7&&+gitinit&&+gitconfigcore.worktreenon-existent&&+cd..+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORK_TREE=root at root''+cat>7/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/7+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/7"test_repo7+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root''+cat>7/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/7+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=.test_repo7+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=root at root''+cat>7/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/7"test_repo7+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=root(rel) at root''+cat>7/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE=.test_repo7+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORKTREE=root in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/7"test_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../..test_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR, GIT_WORKTREE=root in subdir''+cat>7/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/7"test_repo7/sub+'++test_expect_success'#7: GIT_DIR, GIT_WORKTREE=root(rel) in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE=../..test_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORK_TREE=wt at root''+cat>7/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/7/wt+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/7/wt"test_repo7+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root''+cat>7/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/7/wt+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=wttest_repo7+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=wt(rel) at root''+cat>7/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7/wt+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE=wttest_repo7+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=wt at root''+cat>7/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7/wt+setup:cwd:$TRASH_DIRECTORY/7+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/7/wt"test_repo7+'++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:$TRASH_DIRECTORY/7/wt+setup:cwd:$TRASH_DIRECTORY/7/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/7/wt"test_repo7/sub/sub+'++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:$TRASH_DIRECTORY/7/wt+setup:cwd:$TRASH_DIRECTORY/7/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../wttest_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7/wt+setup:cwd:$TRASH_DIRECTORY/7/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE=../../wttest_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=wt in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY/7/wt+setup:cwd:$TRASH_DIRECTORY/7/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/7/wt"test_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORK_TREE=.. at root''+cat>7/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:7/+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo7+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root''+cat>7/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:7/+EOF+GIT_DIR=.gitGIT_WORK_TREE=..test_repo7+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=..(rel) at root''+cat>7/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:7/+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE=..test_repo7+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=.. at root''+cat>7/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:7/+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo7+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:7/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:7/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../..test_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:7/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE=../../../test_repo7/sub/sub+'++test_expect_success'#7: GIT_DIR, GIT_WORK_TREE=.. in subdir''+cat>7/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/7/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:7/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/7/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo7/sub/sub+'+ test_done
@@ -1294,4 +1294,271 @@ EOFGIT_DIR=../.gittest_repo10/sub'+#+# 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++test_expect_success'#11: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1111/sub11/sub/sub11.wt11.wt/sub11/wt11/wt/sub&&+cd11&&+gitinit&&+mv.git../11.git&&+echogitdir:../11.git>.git&&+cd..+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=root at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/11"test_repo11+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=.test_repo11+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=root at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/11"test_repo11+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=root(rel) at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE=.test_repo11+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORKTREE=root in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/11"test_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../..test_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR, GIT_WORKTREE=root in subdir''+cat>11/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/11"test_repo11/sub+'++test_expect_failure'#11: GIT_DIR, GIT_WORKTREE=root(rel) in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE=../..test_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=wt at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11/wt+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/11/wt"test_repo11+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11/wt+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=wttest_repo11+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=wt(rel) at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11/wt+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE=wttest_repo11+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=wt at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11/wt+setup:cwd:$TRASH_DIRECTORY/11+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/11/wt"test_repo11+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11/wt+setup:cwd:$TRASH_DIRECTORY/11/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/11/wt"test_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11/wt+setup:cwd:$TRASH_DIRECTORY/11/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../wttest_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11/wt+setup:cwd:$TRASH_DIRECTORY/11/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE=../../wttest_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=wt in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY/11/wt+setup:cwd:$TRASH_DIRECTORY/11/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/11/wt"test_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=.. at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:11/+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo11+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:11/+EOF+GIT_DIR=.gitGIT_WORK_TREE=..test_repo11+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=..(rel) at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:11/+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE=..test_repo11+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=.. at root''+cat>11/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:11/+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo11+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:11/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:11/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../..test_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:11/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE=../../../test_repo11/sub/sub+'++test_expect_failure'#11: GIT_DIR, GIT_WORK_TREE=.. in subdir''+cat>11/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/11.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:11/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/11/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo11/sub/sub+'+ test_done
@@ -1180,4 +1180,51 @@ EOFtest_repo8/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir99/sub9.wt9.wt/sub9/wt9/wt/sub&&+cd9&&+gitinit&&+mv.git../9.git&&+echogitdir:../9.git>.git&&+cd..+'++test_expect_failure'#9: at root''+cat>9/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/9.git+setup:worktree:$TRASH_DIRECTORY/9+setup:cwd:$TRASH_DIRECTORY/9+setup:prefix:(null)+EOF+GIT_WORK_TREE=non-existenttest_repo9+'++test_expect_failure'#9: in subdir''+cat>9/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/9.git+setup:worktree:$TRASH_DIRECTORY/9+setup:cwd:$TRASH_DIRECTORY/9+setup:prefix:sub/+EOF+GIT_WORK_TREE=non-existenttest_repo9/sub+'+ test_done
@@ -2481,4 +2481,75 @@ EOFtest_repo17/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1818/sub&&+cd18&&+gitinit&&+mkdir.git/wt.git/wt/sub&&+gitconfigcore.baretrue&&+cd..+'++test_expect_success'#18: (rel) at root''+cat>18/expected<<EOF&&+setup:git_dir:.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/18+setup:prefix:(null)+EOF+GIT_DIR=.gittest_repo18+'++test_expect_success'#18: at root''+cat>18/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/18/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/18+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/18/.git"test_repo18+'++test_expect_success'#18: (rel) in subdir''+cat>18/sub/expected<<EOF&&+setup:git_dir:../.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/18/sub+setup:prefix:(null)+EOF+GIT_DIR=../.gittest_repo18/sub+'++test_expect_success'#18: in subdir''+cat>18/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/18/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/18/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/18/.git"test_repo18/sub+'+ test_done
@@ -2552,4 +2552,270 @@ EOFGIT_DIR="$TRASH_DIRECTORY/18/.git"test_repo18/sub'+#+# 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++test_expect_success'#19: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1919/sub19/sub/sub19.wt19.wt/sub19/wt19/wt/sub&&+cd19&&+gitinit&&+gitconfigcore.baretrue&&+cd..+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORK_TREE=root at root''+cat>19/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/19+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/19"test_repo19+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root''+cat>19/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/19+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=.test_repo19+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=root at root''+cat>19/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/19"test_repo19+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=root(rel) at root''+cat>19/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE=.test_repo19+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORKTREE=root in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/19"test_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../..test_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR, GIT_WORKTREE=root in subdir''+cat>19/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/19"test_repo19/sub+'++test_expect_success'#19: GIT_DIR, GIT_WORKTREE=root(rel) in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE=../..test_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORK_TREE=wt at root''+cat>19/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/19/wt+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/19/wt"test_repo19+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root''+cat>19/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/19/wt+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=wttest_repo19+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=wt(rel) at root''+cat>19/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19/wt+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE=wttest_repo19+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=wt at root''+cat>19/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19/wt+setup:cwd:$TRASH_DIRECTORY/19+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/19/wt"test_repo19+'++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:$TRASH_DIRECTORY/19/wt+setup:cwd:$TRASH_DIRECTORY/19/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/19/wt"test_repo19/sub/sub+'++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:$TRASH_DIRECTORY/19/wt+setup:cwd:$TRASH_DIRECTORY/19/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../wttest_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19/wt+setup:cwd:$TRASH_DIRECTORY/19/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE=../../wttest_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=wt in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY/19/wt+setup:cwd:$TRASH_DIRECTORY/19/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/19/wt"test_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORK_TREE=.. at root''+cat>19/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:19/+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo19+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root''+cat>19/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:19/+EOF+GIT_DIR=.gitGIT_WORK_TREE=..test_repo19+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=..(rel) at root''+cat>19/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:19/+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE=..test_repo19+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=.. at root''+cat>19/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:19/+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo19+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:19/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:19/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../..test_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:19/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE=../../../test_repo19/sub/sub+'++test_expect_success'#19: GIT_DIR, GIT_WORK_TREE=.. in subdir''+cat>19/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/19/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:19/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo19/sub/sub+'+ test_done
@@ -2818,4 +2818,132 @@ EOFGIT_DIR="$TRASH_DIRECTORY/19/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo19/sub/sub'+#+# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2020/sub&&+cd20&&+gitinit&&+gitconfigcore.worktreenon-existent&&+mkdir.git/wt.git/wt/sub&&+cd..+'++test_expect_failure'#20.1: at .git''+cat>20/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/20/.git+setup:prefix:(null)+EOF+test_repo20/.git+'++test_expect_failure'#20.1: in .git/wt''+cat>20/.git/wt/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/20/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/20/.git/wt+setup:prefix:(null)+EOF+test_repo20/.git/wt+'++test_expect_failure'#20.1: in .git/wt/sub''+cat>20/.git/wt/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/20/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/20/.git/wt/sub+setup:prefix:(null)+EOF+test_repo20/.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''+gitconfig--file="$TRASH_DIRECTORY/20/.git/config"core.baretrue+'++test_expect_success'#20.2: at .git''+cat>20/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/20/.git+setup:prefix:(null)+EOF+test_repo20/.git+'++test_expect_success'#20.2: in .git/wt''+cat>20/.git/wt/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/20/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/20/.git/wt+setup:prefix:(null)+EOF+test_repo20/.git/wt+'++test_expect_success'#20.2: in .git/wt/sub''+cat>20/.git/wt/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/20/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/20/.git/wt/sub+setup:prefix:(null)+EOF+test_repo20/.git/wt/sub+'++test_expect_success'#20.2: at root''+cat>20/expected<<EOF&&+setup:git_dir:.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/20+setup:prefix:(null)+EOF+test_repo20+'++test_expect_failure'#20.2: in subdir''+cat>20/sub/expected<<EOF&&+setup:git_dir:../.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/20/sub+setup:prefix:(null)+EOF+test_repo20/sub+'+ test_done
@@ -2353,4 +2353,132 @@ EOFtest_repo16/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1717/sub&&+cd17&&+gitinit&&+mkdir.git/wt.git/wt/sub&&+exportGIT_WORK_TREE=non-existent&&+cd..+'++test_expect_failure'#17.1: at .git''+cat>17/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/17/.git+setup:prefix:(null)+EOF+test_repo17/.git+'++test_expect_failure'#17.1: in .git/wt''+cat>17/.git/wt/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/17/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/17/.git/wt+setup:prefix:(null)+EOF+test_repo17/.git/wt+'++test_expect_failure'#17.1: in .git/wt/sub''+cat>17/.git/wt/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/17/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/17/.git/wt/sub+setup:prefix:(null)+EOF+test_repo17/.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''+gitconfig--file="$TRASH_DIRECTORY/17/.git/config"core.baretrue+'++test_expect_failure'#17.2: at .git''+cat>17/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/17/.git+setup:prefix:(null)+EOF+test_repo17/.git+'++test_expect_failure'#17.2: in .git/wt''+cat>17/.git/wt/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/17/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/17/.git/wt+setup:prefix:(null)+EOF+test_repo17/.git/wt+'++test_expect_failure'#17.2: in .git/wt/sub''+cat>17/.git/wt/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/17/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/17/.git/wt/sub+setup:prefix:(null)+EOF+test_repo17/.git/wt/sub+'++test_expect_failure'#17.2: at root''+cat>17/expected<<EOF&&+setup:git_dir:.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/17+setup:prefix:(null)+EOF+test_repo17+'++test_expect_failure'#17.2: in subdir''+cat>17/sub/expected<<EOF&&+setup:git_dir:../.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/17/sub+setup:prefix:(null)+EOF+test_repo17/sub+'+ test_done
@@ -2218,4 +2218,139 @@ EOFGIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo15/sub/sub'+#+# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1616/sub&&+cd16&&+gitinit&&+mkdir.git/wt.git/wt/sub&&+cd..+'++test_expect_success'#16.1: at .git''+cat>16/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/16/.git+setup:prefix:(null)+EOF+test_repo16/.git+'++test_expect_success'#16.1: in .git/wt''+cat>16/.git/wt/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/16/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/16/.git/wt+setup:prefix:(null)+EOF+test_repo16/.git/wt+'++test_expect_success'#16.1: in .git/wt/sub''+cat>16/.git/wt/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/16/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/16/.git/wt/sub+setup:prefix:(null)+EOF+test_repo16/.git/wt/sub+'++#+# 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''+gitconfig--file="$TRASH_DIRECTORY/16/.git/config"core.baretrue+'++test_expect_success'#16.2: at .git''+cat>16/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/16/.git+setup:prefix:(null)+EOF+test_repo16/.git+'++test_expect_success'#16.2: in .git/wt''+cat>16/.git/wt/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/16/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/16/.git/wt+setup:prefix:(null)+EOF+test_repo16/.git/wt+'++test_expect_success'#16.2: in .git/wt/sub''+cat>16/.git/wt/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/16/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/16/.git/wt/sub+setup:prefix:(null)+EOF+test_repo16/.git/wt/sub+'++test_expect_success'#16.2: at root''+cat>16/expected<<EOF&&+setup:git_dir:.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/16+setup:prefix:(null)+EOF+test_repo16+'++test_expect_failure'#16.2: in subdir''+cat>16/sub/expected<<EOF&&+setup:git_dir:../.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/16/sub+setup:prefix:(null)+EOF+test_repo16/sub+'+ test_done
@@ -1659,4 +1659,295 @@ EOFtest_repo13/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1414/sub14/sub/sub14.wt14.wt/sub14/wt14/wt/sub&&+cd14&&+gitinit&&+mv.git../14.git&&+echogitdir:../14.git>.git&&+cd..+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=.. at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY/14"&&+GIT_DIR=.gittest_repo14+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=..(rel) at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree..&&+GIT_DIR=.gittest_repo14+'++test_expect_failure'#14: GIT_DIR, core.worktree=.. at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY/14"&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14+'++test_expect_failure'#14: GIT_DIR, core.worktree=..(rel) at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree..&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=.. in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY/14"&&+GIT_DIR=../../.gittest_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=..(rel) in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree..&&+GIT_DIR=../../.gittest_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR, core.worktree=.. in subdir''+cat>14/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY/14"&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14/sub+'++test_expect_failure'#14: GIT_DIR, core.worktree=..(rel) in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree..&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=../wt at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14/wt+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY/14/wt"&&+GIT_DIR=.gittest_repo14+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=../wt(rel) at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14/wt+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree../wt&&+GIT_DIR=.gittest_repo14+'++test_expect_failure'#14: GIT_DIR, core.worktree=../wt(rel) at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14/wt+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree../wt&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14+'++test_expect_failure'#14: GIT_DIR, core.worktree=../wt at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14/wt+setup:cwd:$TRASH_DIRECTORY/14+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY/14/wt"&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=../wt in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14/wt+setup:cwd:$TRASH_DIRECTORY/14/sub/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY/14/wt"&&+GIT_DIR=../../.gittest_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=../wt(rel) in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14/wt+setup:cwd:$TRASH_DIRECTORY/14/sub/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree../wt&&+GIT_DIR=../../.gittest_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR, core.worktree=../wt(rel) in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14/wt+setup:cwd:$TRASH_DIRECTORY/14/sub/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree../wt&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR, core.worktree=../wt in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY/14/wt+setup:cwd:$TRASH_DIRECTORY/14/sub/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY/14/wt"&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=../.. at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:14/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY"&&+GIT_DIR=.gittest_repo14+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=../..(rel) at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:14/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree../../&&+GIT_DIR=.gittest_repo14+'++test_expect_failure'#14: GIT_DIR, core.worktree=../..(rel) at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:14/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree../../&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14+'++test_expect_failure'#14: GIT_DIR, core.worktree=../.. at root''+cat>14/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:14/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY"&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=../.. in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:14/sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY"&&+GIT_DIR=../../.gittest_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR(rel), core.worktree=../..(rel) in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:14/sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree../..&&+GIT_DIR=../../.gittest_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR, core.worktree=../..(rel) in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:14/sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree../..&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14/sub/sub+'++test_expect_failure'#14: GIT_DIR, core.worktree=../.. in subdir''+cat>14/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/14.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:14/sub/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/14.git/config"core.worktree"$TRASH_DIRECTORY"&&+GIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14/sub/sub+'+ test_done
@@ -1950,4 +1950,272 @@ EOFGIT_DIR="$TRASH_DIRECTORY/14/.git"test_repo14/sub/sub'+#+# 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++test_expect_success'#15: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1515/sub15/sub/sub15.wt15.wt/sub15/wt15/wt/sub&&+cd15&&+gitinit&&+gitconfigcore.worktreenon-existent&&+mv.git../15.git&&+echogitdir:../15.git>.git&&+cd..+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=root at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/15"test_repo15+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=.test_repo15+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=root at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/15"test_repo15+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=root(rel) at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE=.test_repo15+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORKTREE=root in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/15"test_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../..test_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR, GIT_WORKTREE=root in subdir''+cat>15/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/15"test_repo15/sub+'++test_expect_failure'#15: GIT_DIR, GIT_WORKTREE=root(rel) in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE=../..test_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=wt at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15/wt+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/15/wt"test_repo15+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15/wt+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=wttest_repo15+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=wt(rel) at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15/wt+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE=wttest_repo15+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=wt at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15/wt+setup:cwd:$TRASH_DIRECTORY/15+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/15/wt"test_repo15+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15/wt+setup:cwd:$TRASH_DIRECTORY/15/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/15/wt"test_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15/wt+setup:cwd:$TRASH_DIRECTORY/15/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../wttest_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15/wt+setup:cwd:$TRASH_DIRECTORY/15/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE=../../wttest_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=wt in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY/15/wt+setup:cwd:$TRASH_DIRECTORY/15/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/15/wt"test_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=.. at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:15/+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo15+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:15/+EOF+GIT_DIR=.gitGIT_WORK_TREE=..test_repo15+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=..(rel) at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:15/+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE=..test_repo15+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=.. at root''+cat>15/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:15/+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo15+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:15/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:15/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../..test_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:15/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE=../../../test_repo15/sub/sub+'++test_expect_failure'#15: GIT_DIR, GIT_WORK_TREE=.. in subdir''+cat>15/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/15.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:15/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/15/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo15/sub/sub+'+ test_done
@@ -1610,4 +1610,53 @@ EOFtest_repo12/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir1313/sub13/sub/sub13.wt13.wt/sub13/wt13/wt/sub&&+cd13&&+gitinit&&+gitconfigcore.worktreenon-existent&&+exportGIT_WORK_TREE=non-existenttoo&&+mv.git../13.git&&+echogitdir:../13.git>.git&&+cd..+'++test_expect_failure'#13: at root''+cat>13/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/13.git+setup:worktree:$TRASH_DIRECTORY/13+setup:cwd:$TRASH_DIRECTORY/13+setup:prefix:(null)+EOF+test_repo13+'++test_expect_failure'#13: in subdir''+cat>13/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/13.git+setup:worktree:$TRASH_DIRECTORY/13+setup:cwd:$TRASH_DIRECTORY/13+setup:prefix:sub/+EOF+test_repo13/sub+'+ test_done
@@ -2946,4 +2946,133 @@ EOFtest_repo20/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2121/sub&&+cd21&&+gitinit&&+gitconfigcore.worktreenon-existent&&+exportGIT_WORK_TREE=non-existent-too&&+mkdir.git/wt.git/wt/sub&&+cd..+'++test_expect_failure'#21.1: at .git''+cat>21/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/21/.git+setup:prefix:(null)+EOF+test_repo21/.git+'++test_expect_failure'#21.1: in .git/wt''+cat>21/.git/wt/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/21/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/21/.git/wt+setup:prefix:(null)+EOF+test_repo21/.git/wt+'++test_expect_failure'#21.1: in .git/wt/sub''+cat>21/.git/wt/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/21/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/21/.git/wt/sub+setup:prefix:(null)+EOF+test_repo21/.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''+gitconfig--file="$TRASH_DIRECTORY/21/.git/config"core.baretrue+'++test_expect_failure'#21.2: at .git''+cat>21/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/21/.git+setup:prefix:(null)+EOF+test_repo21/.git+'++test_expect_failure'#21.2: in .git/wt''+cat>21/.git/wt/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/21/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/21/.git/wt+setup:prefix:(null)+EOF+test_repo21/.git/wt+'++test_expect_failure'#21.2: in .git/wt/sub''+cat>21/.git/wt/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/21/.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/21/.git/wt/sub+setup:prefix:(null)+EOF+test_repo21/.git/wt/sub+'++test_expect_failure'#21.2: at root''+cat>21/expected<<EOF&&+setup:git_dir:.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/21+setup:prefix:(null)+EOF+test_repo21+'++test_expect_failure'#21.2: in subdir''+cat>21/sub/expected<<EOF&&+setup:git_dir:../.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/21/sub+setup:prefix:(null)+EOF+test_repo21/sub+'+ test_done
@@ -3075,4 +3075,337 @@ EOFtest_repo21/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir22&&+cd22&&+gitinit&&+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:$TRASH_DIRECTORY/22/.git+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22/.git"&&+GIT_DIR=.test_repo22/.git+'++test_expect_success'#22.1: GIT_DIR(rel), core.worktree=.(rel) at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:$TRASH_DIRECTORY/22/.git+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree.&&+GIT_DIR=.test_repo22/.git+'++test_expect_success'#22.1: GIT_DIR, core.worktree=. at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22/.git"&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git+'++test_expect_success'#22.1: GIT_DIR, core.worktree=.(rel) at root''+cat>22/.git/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree.&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git+'++test_expect_failure'#22.1: GIT_DIR(rel), core.worktree=. in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22/.git"&&+GIT_DIR=..test_repo22/.git/sub+'++test_expect_failure'#22.1: GIT_DIR(rel), core.worktree=.(rel) in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree.&&+GIT_DIR=..test_repo22/.git/sub/+'++test_expect_success'#22.1: GIT_DIR, core.worktree=. in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22/.git"&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git/sub+'++test_expect_success'#22.1: GIT_DIR, core.worktree=.(rel) in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree.&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git/sub+'++test_expect_success'#22.1: GIT_DIR(rel), core.worktree=wt at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:.+setup:worktree:$TRASH_DIRECTORY/22/.git/wt+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22/.git/wt"&&+GIT_DIR=.test_repo22/.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:$TRASH_DIRECTORY/22/.git/wt+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktreewt&&+GIT_DIR=.test_repo22/.git+'++test_expect_success'#22.1: GIT_DIR, core.worktree=wt(rel) at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git/wt+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktreewt&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git+'++test_expect_success'#22.1: GIT_DIR, core.worktree=wt at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git/wt+setup:cwd:$TRASH_DIRECTORY/22/.git+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22/.git/wt"&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.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:$TRASH_DIRECTORY/22/.git/wt+setup:cwd:$TRASH_DIRECTORY/22/.git/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22/.git/wt"&&+GIT_DIR=..test_repo22/.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:$TRASH_DIRECTORY/22/.git/wt+setup:cwd:$TRASH_DIRECTORY/22/.git/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktreewt&&+GIT_DIR=..test_repo22/.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:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git/wt+setup:cwd:$TRASH_DIRECTORY/22/.git/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktreewt&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git/sub+'++test_expect_success'#22.1: GIT_DIR, core.worktree=wt in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22/.git/wt+setup:cwd:$TRASH_DIRECTORY/22/.git/sub+setup:prefix:(null)+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22/.git/wt"&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git/sub+'++test_expect_failure'#22.1: GIT_DIR(rel), core.worktree=.. at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22+setup:cwd:$TRASH_DIRECTORY/22+setup:prefix:.git/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22"&&+GIT_DIR=.test_repo22/.git+'++test_expect_failure'#22.1: GIT_DIR(rel), core.worktree=..(rel) at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22+setup:cwd:$TRASH_DIRECTORY/22+setup:prefix:.git/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree..&&+GIT_DIR=.test_repo22/.git+'++test_expect_success'#22.1: GIT_DIR, core.worktree=..(rel) at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22+setup:cwd:$TRASH_DIRECTORY/22+setup:prefix:.git/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree..&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git+'++test_expect_success'#22.1: GIT_DIR, core.worktree=.. at .git''+cat>22/.git/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22+setup:cwd:$TRASH_DIRECTORY/22+setup:prefix:.git/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22"&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git+'++test_expect_failure'#22.1: GIT_DIR(rel), core.worktree=.. in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22+setup:cwd:$TRASH_DIRECTORY/22+setup:prefix:.git/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22"&&+GIT_DIR=..test_repo22/.git/sub+'++test_expect_failure'#22.1: GIT_DIR(rel), core.worktree=..(rel) in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22+setup:cwd:$TRASH_DIRECTORY/22+setup:prefix:.git/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree..&&+GIT_DIR=..test_repo22/.git/sub+'++test_expect_success'#22.1: GIT_DIR, core.worktree=..(rel) in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22+setup:cwd:$TRASH_DIRECTORY/22+setup:prefix:.git/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree..&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git/sub+'++test_expect_success'#22.1: GIT_DIR, core.worktree=.. in .git/sub''+cat>22/.git/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/22/.git+setup:worktree:$TRASH_DIRECTORY/22+setup:cwd:$TRASH_DIRECTORY/22+setup:prefix:.git/sub/+EOF+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.worktree"$TRASH_DIRECTORY/22"&&+GIT_DIR="$TRASH_DIRECTORY/22/.git"test_repo22/.git/sub+'++#+# 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''+gitconfig--file="$TRASH_DIRECTORY/22/.git/config"core.baretrue+'++test_expect_failure'#22.2: at .git''+(+cd22/.git&&+GIT_DIR=.test_must_failgitsymbolic-refHEAD2>result&&+grep"core.bare and core.worktree do not make sense"result+)+'++test_expect_failure'#22.2: at root''+(+cd22&&+GIT_DIR=.gittest_must_failgitsymbolic-refHEAD2>result&&+grep"core.bare and core.worktree do not make sense"result+)+'+ test_done
@@ -3408,4 +3408,271 @@ test_expect_failure '#22.2: at root' ')'+#+# 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++test_expect_success'#23: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2323/sub23/sub/sub23.wt23.wt/sub23/wt23/wt/sub&&+cd23&&+gitinit&&+gitconfigcore.baretrue&&+gitconfigcore.worktreenon-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:$TRASH_DIRECTORY/23+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/23"test_repo23+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root''+cat>23/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/23+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=.test_repo23+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=root at root''+cat>23/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/23"test_repo23+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=root(rel) at root''+cat>23/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE=.test_repo23+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORKTREE=root in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/23"test_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../..test_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR, GIT_WORKTREE=root in subdir''+cat>23/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/23"test_repo23/sub+'++test_expect_success'#23: GIT_DIR, GIT_WORKTREE=root(rel) in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE=../..test_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORK_TREE=wt at root''+cat>23/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/23/wt+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/23/wt"test_repo23+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root''+cat>23/expected<<EOF&&+setup:git_dir:.git+setup:worktree:$TRASH_DIRECTORY/23/wt+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=wttest_repo23+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=wt(rel) at root''+cat>23/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23/wt+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE=wttest_repo23+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=wt at root''+cat>23/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23/wt+setup:cwd:$TRASH_DIRECTORY/23+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/23/wt"test_repo23+'++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:$TRASH_DIRECTORY/23/wt+setup:cwd:$TRASH_DIRECTORY/23/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/23/wt"test_repo23/sub/sub+'++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:$TRASH_DIRECTORY/23/wt+setup:cwd:$TRASH_DIRECTORY/23/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../wttest_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23/wt+setup:cwd:$TRASH_DIRECTORY/23/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE=../../wttest_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=wt in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY/23/wt+setup:cwd:$TRASH_DIRECTORY/23/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/23/wt"test_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORK_TREE=.. at root''+cat>23/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:23/+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo23+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root''+cat>23/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:23/+EOF+GIT_DIR=.gitGIT_WORK_TREE=..test_repo23+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=..(rel) at root''+cat>23/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:23/+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE=..test_repo23+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=.. at root''+cat>23/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:23/+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo23+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:23/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:23/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../..test_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:23/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE=../../../test_repo23/sub/sub+'++test_expect_success'#23: GIT_DIR, GIT_WORK_TREE=.. in subdir''+cat>23/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/23/.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:23/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo23/sub/sub+'+ test_done
@@ -3675,4 +3675,52 @@ EOFGIT_DIR="$TRASH_DIRECTORY/23/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo23/sub/sub'+#+# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2424/sub&&+cd24&&+gitinit&&+gitconfigcore.baretrue&&+mv.git../24.git&&+echogitdir:../24.git>.git&&+cd..+'++test_expect_success'#24: at root''+cat>24/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/24.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/24+setup:prefix:(null)+EOF+test_repo24+'++test_expect_success'#24: in subdir''+cat>24/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/24.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/24/sub+setup:prefix:(null)+EOF+test_repo24/sub+'+ test_done
@@ -3723,4 +3723,53 @@ EOFtest_repo24/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2525/sub&&+cd25&&+gitinit&&+gitconfigcore.baretrue&&+exportGIT_WORK_TREE=non-existent&&+mv.git../25.git&&+echogitdir:../25.git>.git&&+cd..+'++test_expect_failure'#25: at root''+cat>25/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/25.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/25+setup:prefix:(null)+EOF+test_repo25+'++test_expect_failure'#25: in subdir''+cat>25/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/25.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/25/sub+setup:prefix:(null)+EOF+test_repo25/sub+'+ test_done
@@ -3772,4 +3772,72 @@ EOFtest_repo25/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2626/sub&&+cd26&&+gitinit&&+gitconfigcore.baretrue&&+mv.git../26.git&&+echogitdir:../26.git>.git&&+cd..+'++test_expect_failure'#26: (rel) at root''+cat>26/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/26.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/26+setup:prefix:(null)+EOF+GIT_DIR=.gittest_repo26+'++test_expect_failure'#26: at root''+cat>26/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/26.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/26+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/26/.git"test_repo26+'++test_expect_failure'#26: (rel) in subdir''+cat>26/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/26.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/26/sub+setup:prefix:(null)+EOF+GIT_DIR=../.gittest_repo26/sub+'++test_expect_failure'#26: in subdir''+cat>26/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/26.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/26/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/26/.git"test_repo26/sub+'+ test_done
@@ -4243,4 +4243,273 @@ test_expect_failure '#30: at root' ')'+#+# 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++test_expect_success'#31: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir3131/sub31/sub/sub31.wt31.wt/sub31/wt31/wt/sub&&+cd31&&+gitinit&&+gitconfigcore.baretrue&&+gitconfigcore.worktreenon-existent&&+mv.git../31.git&&+echogitdir:../31.git>.git&&+cd..+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=root at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/31"test_repo31+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=.test_repo31+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=root at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/31"test_repo31+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=root(rel) at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE=.test_repo31+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORKTREE=root in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/31"test_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../..test_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR, GIT_WORKTREE=root in subdir''+cat>31/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/31"test_repo31/sub+'++test_expect_failure'#31: GIT_DIR, GIT_WORKTREE=root(rel) in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE=../..test_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=wt at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31/wt+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/31/wt"test_repo31+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31/wt+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=wttest_repo31+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=wt(rel) at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31/wt+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE=wttest_repo31+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=wt at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31/wt+setup:cwd:$TRASH_DIRECTORY/31+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/31/wt"test_repo31+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31/wt+setup:cwd:$TRASH_DIRECTORY/31/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/31/wt"test_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31/wt+setup:cwd:$TRASH_DIRECTORY/31/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../wttest_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31/wt+setup:cwd:$TRASH_DIRECTORY/31/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE=../../wttest_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=wt in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY/31/wt+setup:cwd:$TRASH_DIRECTORY/31/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/31/wt"test_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=.. at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:31/+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo31+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:31/+EOF+GIT_DIR=.gitGIT_WORK_TREE=..test_repo31+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=..(rel) at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:31/+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE=..test_repo31+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=.. at root''+cat>31/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:31/+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo31+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:31/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:31/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../..test_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:31/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE=../../../test_repo31/sub/sub+'++test_expect_failure'#31: GIT_DIR, GIT_WORK_TREE=.. in subdir''+cat>31/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/31.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:31/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/31/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo31/sub/sub+'+ test_done
@@ -4108,4 +4108,53 @@ EOFGIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo27/sub/sub'+#+# 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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2828/sub&&+cd28&&+gitinit&&+gitconfigcore.baretrue&&+gitconfigcore.worktreenon-existent&&+mv.git../28.git&&+echogitdir:../28.git>.git&&+cd..+'++test_expect_success'#28: at root''+cat>28/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/28.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/28+setup:prefix:(null)+EOF+test_repo28+'++test_expect_success'#28: in subdir''+cat>28/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/28.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/28/sub+setup:prefix:(null)+EOF+test_repo28/sub+'+ test_done
@@ -4206,4 +4206,41 @@ EOFtest_repo29/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir30&&+cd30&&+gitinit&&+gitconfigcore.baretrue&&+gitconfigcore.worktreenon-existent&&+mv.git../30.git&&+echogitdir:../30.git>.git&&+cd..+'++test_expect_failure'#30: at root''+(+cd30&&+GIT_DIR=.gittest_must_failgitsymbolic-refHEAD2>result&&+grep"core.bare and core.worktree do not make sense"result+)+'+ test_done
@@ -4157,4 +4157,53 @@ EOFtest_repo28/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''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2929/sub&&+cd29&&+gitinit&&+gitconfigcore.baretrue&&+exportGIT_WORK_TREE=non-existent&&+mv.git../29.git&&+echogitdir:../29.git>.git&&+cd..+'++test_expect_failure'#29: at root''+cat>29/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/29.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/29+setup:prefix:(null)+EOF+test_repo29+'++test_expect_failure'#29: in subdir''+cat>29/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/29.git+setup:worktree:(null)+setup:cwd:$TRASH_DIRECTORY/29/sub+setup:prefix:(null)+EOF+test_repo29/sub+'+ test_done
@@ -3840,4 +3840,272 @@ EOFGIT_DIR="$TRASH_DIRECTORY/26/.git"test_repo26/sub'+#+# 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++test_expect_success'#27: setup''+unsetGIT_DIRGIT_WORK_TREE&&+mkdir2727/sub27/sub/sub27.wt27.wt/sub27/wt27/wt/sub&&+cd27&&+gitinit&&+gitconfigcore.baretrue&&+mv.git../27.git&&+echogitdir:../27.git>.git&&+cd..+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=root at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/27"test_repo27+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=.test_repo27+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=root at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/27"test_repo27+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=root(rel) at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE=.test_repo27+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORKTREE=root in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/27"test_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../..test_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR, GIT_WORKTREE=root in subdir''+cat>27/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/27"test_repo27/sub+'++test_expect_failure'#27: GIT_DIR, GIT_WORKTREE=root(rel) in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE=../..test_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=wt at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27/wt+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY/27/wt"test_repo27+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27/wt+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:(null)+EOF+GIT_DIR=.gitGIT_WORK_TREE=wttest_repo27+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=wt(rel) at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27/wt+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE=wttest_repo27+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=wt at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27/wt+setup:cwd:$TRASH_DIRECTORY/27+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/27/wt"test_repo27+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27/wt+setup:cwd:$TRASH_DIRECTORY/27/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY/27/wt"test_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27/wt+setup:cwd:$TRASH_DIRECTORY/27/sub/sub+setup:prefix:(null)+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../wttest_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27/wt+setup:cwd:$TRASH_DIRECTORY/27/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE=../../wttest_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=wt in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY/27/wt+setup:cwd:$TRASH_DIRECTORY/27/sub/sub+setup:prefix:(null)+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE="$TRASH_DIRECTORY/27/wt"test_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=.. at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:27/+EOF+GIT_DIR=.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo27+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:27/+EOF+GIT_DIR=.gitGIT_WORK_TREE=..test_repo27+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=..(rel) at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:27/+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE=..test_repo27+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=.. at root''+cat>27/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:27/+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo27+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:27/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE="$TRASH_DIRECTORY"test_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:27/sub/sub/+EOF+GIT_DIR=../../.gitGIT_WORK_TREE=../../..test_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:27/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE=../../../test_repo27/sub/sub+'++test_expect_failure'#27: GIT_DIR, GIT_WORK_TREE=.. in subdir''+cat>27/sub/sub/expected<<EOF&&+setup:git_dir:$TRASH_DIRECTORY/27.git+setup:worktree:$TRASH_DIRECTORY+setup:cwd:$TRASH_DIRECTORY+setup:prefix:27/sub/sub/+EOF+GIT_DIR="$TRASH_DIRECTORY/27/.git"GIT_WORK_TREE="$TRASH_DIRECTORY"test_repo27/sub/sub+'+ test_done
GIT_WORK_TREE can only be used together with GIT_DIR. Unfortunately
get_git_work_tree() checks that env variable unconditionally. As a
work around, discard the variable.
---
setup.c | 23 +++++++++++------------
1 files changed, 11 insertions(+), 12 deletions(-)
@@ -364,14 +364,12 @@ static int cwd_contains_git_dir(const char **gitfile_dirp)returnis_git_directory(DEFAULT_GIT_DIR_ENVIRONMENT);}-staticconstchar*setup_discovered_git_dir(constchar*work_tree_env,-intoffset,intlen,char*cwd,int*nongit_ok)+staticconstchar*setup_discovered_git_dir(intoffset,intlen,char*cwd,int*nongit_ok){introot_len;inside_git_dir=0;-if(!work_tree_env)-inside_work_tree=1;+inside_work_tree=1;root_len=offset_1st_component(cwd);git_work_tree_cfg=xstrndup(cwd,offset>root_len?offset:root_len);if(check_repository_format_gently(nongit_ok))
@@ -386,14 +384,12 @@ static const char *setup_discovered_git_dir(const char *work_tree_env,returncwd+offset;}-staticconstchar*setup_bare_git_dir(constchar*work_tree_env,-intoffset,intlen,char*cwd,int*nongit_ok)+staticconstchar*setup_bare_git_dir(intoffset,intlen,char*cwd,int*nongit_ok){introot_len;inside_git_dir=1;-if(!work_tree_env)-inside_work_tree=0;+inside_work_tree=0;if(offset!=len){if(chdir(cwd))die_errno("Cannot come back to cwd");
@@ -457,6 +453,11 @@ static const char *setup_git_directory_gently_1(int *nongit_ok)gitdirenv=getenv(GIT_DIR_ENVIRONMENT);if(gitdirenv)returnsetup_explicit_git_dir(gitdirenv,work_tree_env,nongit_ok);+else{+/* prevent get_git_work_tree() from using it because GIT_DIR is not set */+if(work_tree_env)+unsetenv(GIT_WORK_TREE_ENVIRONMENT);+}if(!getcwd(cwd,sizeof(cwd)-1))die_errno("Unable to read current working directory");
@@ -460,8 +460,10 @@ static const char *setup_git_directory_gently_1(int *nongit_ok)*validation.*/gitdirenv=getenv(GIT_DIR_ENVIRONMENT);-if(gitdirenv)-returnsetup_explicit_git_dir(gitdirenv,work_tree_env,nongit_ok);+if(gitdirenv){+has_git_dir_env=1;+returnsetup_explicit_git_dir(gitdirenv,work_tree_env,nongit_o,nongit_ok);+}else{/* prevent get_git_work_tree() from using it because GIT_DIR is not set */if(work_tree_env)
@@ -593,6 +595,8 @@ int check_repository_format_version(const char *var, const char *value, void *cbhas_core_bare=1;}}elseif(strcmp(var,"core.worktree")==0){+if(!has_git_dir_env)/* only valid when GIT_DIR is set */+return0;if(!value)returnconfig_error_nonbool(var);free(git_work_tree_cfg);
@@ -256,6 +259,12 @@ static int check_repository_format_gently(int *nongit_ok)*nongit_ok=-1;return-1;}+if(has_core_worktree&&has_core_bare){+if(!nongit_ok)+die("core.bare and core.worktree do not make sense");+*nongit_ok=-1;+return-1;+}return0;}
Now that core.worktree can only be effective inside
setup_explicit_git_dir, move the code up from setup_git_directory().
---
setup.c | 48 +++++++++++++++++-------------------------------
1 files changed, 17 insertions(+), 31 deletions(-)
@@ -340,23 +342,21 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,}if(gitfile)set_git_dir(gitfile);-if(!work_tree_env){-retval=set_work_tree(gitdirenv);-/* config may override worktree */-if(check_repository_format_gently(nongit_ok))-returnNULL;-returnretval;-}+if(!work_tree_env)+set_work_tree(gitdirenv);++/* config may override worktree */if(check_repository_format_gently(nongit_ok))returnNULL;+retval=get_relative_cwd(buffer,sizeof(buffer)-1,-get_git_work_tree());+get_git_work_tree());if(!retval||!*retval)returnNULL;if(!gitfile)set_git_dir(make_absolute_path(gitdirenv));-if(chdir(work_tree_env)<0)-die_errno("Could not chdir to '%s'",work_tree_env);+if(chdir(get_git_work_tree())<0)+die_errno("Could not chdir to '%s'",get_git_work_tree());strcat(buffer,"/");returnretval;}
@@ -454,6 +454,10 @@ static const char *setup_git_directory_gently_1(int *nongit_ok)if(nongit_ok)*nongit_ok=0;+if(!getcwd(cwd,sizeof(cwd)-1))+die_errno("Unable to read current working directory");+offset=len=strlen(cwd);+/**IfGIT_DIRissetexplicitly,we'renotgoing*todoanydiscovery,butwestilldorepository
@@ -462,7 +466,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok)gitdirenv=getenv(GIT_DIR_ENVIRONMENT);if(gitdirenv){has_git_dir_env=1;-returnsetup_explicit_git_dir(gitdirenv,work_tree_env,nongit_o,nongit_ok);+returnsetup_explicit_git_dir(gitdirenv,work_tree_env,cwd,len,nongit_ok);}else{/* prevent get_git_work_tree() from using it because GIT_DIR is not set */
@@ -470,9 +474,6 @@ static const char *setup_git_directory_gently_1(int *nongit_ok)unsetenv(GIT_WORK_TREE_ENVIRONMENT);}-if(!getcwd(cwd,sizeof(cwd)-1))-die_errno("Unable to read current working directory");-ceil_offset=longest_ancestor_length(cwd,env_ceiling_dirs);if(ceil_offset<0&&has_dos_drive_prefix(cwd))ceil_offset=1;
@@ -623,19 +623,5 @@ int check_repository_format(void)*/constchar*setup_git_directory(void){-constchar*retval=setup_git_directory_gently(NULL);--/* If the work tree is not the default one, recompute prefix */-if(inside_work_tree<0){-staticcharbuffer[PATH_MAX+1];-char*rel;-if(retval&&chdir(retval))-die_errno("Could not jump back into original cwd");-rel=get_relative_cwd(buffer,PATH_MAX,get_git_work_tree());-if(rel&&*rel&&chdir(get_git_work_tree()))-die_errno("Could not jump to working directory");-returnrel&&*rel?strcat(rel,"/"):NULL;-}--returnretval;+returnsetup_git_directory_gently(NULL);}
@@ -153,8 +153,16 @@ const char *get_git_work_tree(void)if(!work_tree&&is_bare_repository_cfg<1){work_tree=git_work_tree_cfg;/* make_absolute_path also normalizes the path */-if(work_tree&&!is_absolute_path(work_tree))-work_tree=xstrdup(make_absolute_path(git_path("%s",work_tree)));+if(work_tree&&!is_absolute_path(work_tree)){+charcwd[PATH_MAX];+if(!getcwd(cwd,PATH_MAX))+die("Could not get current working directory");+if(chdir(get_git_dir()))+die("Could not chdir to $GIT_DIR");+work_tree=xstrdup(make_absolute_path(work_tree));+if(chdir(cwd))+die("Could not chdir to previous working directory");+}}elseif(work_tree)work_tree=xstrdup(make_absolute_path(work_tree));git_work_tree_initialized=1;
+# 2. .git file is relative to git_dir. .git file is basically symlink
+# in disguise.
This is not completely followed in my tests. If .git is a true
symlink, its link is relative to .git itself. When .git is a file, it
would be more difficult to calculate path relative to .git (you can't
chdir to a file). In my tests, the link is relative to .git's parent
directory, not .git.
--
Duy
From: Jonathan Nieder <hidden> Date: 2016-06-15 22:49:55
Nguyen Thai Ngoc Duy wrote:
2010/10/27 Nguyễn Thái Ngọc Duy [off-list ref]:
quoted
+# 2. .git file is relative to git_dir. .git file is basically symlink
+# in disguise.
This is not completely followed in my tests. If .git is a true
symlink, its link is relative to .git itself. When .git is a file, it
would be more difficult to calculate path relative to .git (you can't
chdir to a file).
I'm not sure I understand:
git init repo
cd repo
mv .git .git.real
ln -s .git.real .git
The path ".git.real" is relative to "repo/", not "repo/.git/", no?
In other words, I don't you think you have to worry --- the test
In my tests, the link is relative to .git's parent
directory, not .git.
On Wed, Oct 27, 2010 at 11:30 PM, Jonathan Nieder [off-list ref] wrote:
Nguyen Thai Ngoc Duy wrote:
quoted
2010/10/27 Nguyễn Thái Ngọc Duy [off-list ref]:
quoted
quoted
+# 2. .git file is relative to git_dir. .git file is basically symlink
+# in disguise.
This is not completely followed in my tests. If .git is a true
symlink, its link is relative to .git itself. When .git is a file, it
would be more difficult to calculate path relative to .git (you can't
chdir to a file).
I'm not sure I understand:
git init repo
cd repo
mv .git .git.real
ln -s .git.real .git
The path ".git.real" is relative to "repo/", not "repo/.git/", no?
Ah, ok. I was confused after writing all those tests.
--
Duy