1#!/bin/sh 2 3test_description='Tests of cwd/prefix/worktree/gitdir setup in all cases' 4 5. ./test-lib.sh 6 7# 8# A few rules for repo setup: 9# 10# 1. GIT_DIR is relative to user's cwd. --git-dir is equivalent to 11# GIT_DIR. 12# 13# 2. .git file is relative to parent directory. .git file is basically 14# symlink in disguise. The directory where .git file points to will 15# become new git_dir. 16# 17# 3. core.worktree is relative to git_dir. 18# 19# 4. GIT_WORK_TREE is relative to user's cwd. --work-tree is 20# equivalent to GIT_WORK_TREE. 21# 22# 5. GIT_WORK_TREE/core.worktree is only effective if GIT_DIR is set 23# Uneffective worktree settings should be warned. 24# 25# 6. Effective GIT_WORK_TREE overrides core.worktree and core.bare 26# 27# 7. Effective core.worktree conflicts with core.bare 28# 29# 8. If GIT_DIR is set but neither worktree nor bare setting is given, 30# original cwd becomes worktree. 31# 32# 9. If .git discovery is done inside a repo, the repo becomes a bare 33# repo. .git discovery is performed if GIT_DIR is not set. 34# 35# 10. If no worktree is available, cwd remains unchanged, prefix is 36# NULL. 37# 38# 11. When user's cwd is outside worktree, cwd remains unchanged, 39# prefix is NULL. 40# 41 42test_repo() { 43( 44iftest -n"$1";thencd"$1";fi&& 45iftest -f trace;thenrm trace;fi&& 46 GIT_TRACE="`pwd`/trace" git symbolic-ref HEAD >/dev/null && 47grep'^setup: ' trace >result && 48 test_cmp expected result 49) 50} 51 52# Bit 0 = GIT_WORK_TREE 53# Bit 1 = GIT_DIR 54# Bit 2 = core.worktree 55# Bit 3 = .git is a file 56# Bit 4 = bare repo 57# Case# = encoding of the above 5 bits 58 59test_done