Subject: [WIP PATCH 02/18] Add t1510 for setup tests

From: Nguyễn Thái Ngọc Duy <[email-masked]>
Date: Sun, 24 Oct 2010 19:11:34 +0700

---
 t/t1510-repo-setup.sh |   56 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 deletions(-)
 create mode 100755 t/t1510-repo-setup.sh

diff --git a/t/t1510-repo-setup.sh b/t/t1510-repo-setup.sh
new file mode 100755
index 0000000..d618787
--- /dev/null
+++ b/t/t1510-repo-setup.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+test_description='Tests of cwd/prefix/worktree/gitdir setup in all cases'
+
+. ./test-lib.sh
+
+# A few principles for repo setup:
+#
+# 1. GIT_DIR is relative to user's cwd. This directory is refered as
+#    "git_dir" below. Auto discovered repo is also "git_dir".
+#    --git-dir is equivalent to GIT_DIR.
+#
+# 2. core.worktree is relative to git_dir
+#
+# 3. GIT_WORK_TREE is relative to user's cwd. --work-tree is
+#    equivalent to GIT_WORK_TREE.
+#
+# 4. .git file is relative to git_dir. Note that the repo where .git
+#    file points to is not considered "git_dir" in the above.
+#
+# 5. GIT_WORK_TREE is only effective if GIT_DIR is
+#    set (hence "Effective GIT_WORK_TREE"
+#    below). Uneffective GIT_WORK_TREE should be warned.
+#
+# 6. Effective GIT_WORK_TREE will override core.worktree
+#
+# 7. During repo discovery, if "." is found a repo, it is considered a
+#    bare repo unless core.worktree is set
+#
+# 8. core.bare conflicts with core.worktree
+#
+# 9. Effective GIT_WORK_TREE will override core.bare
+#
+# 10. When user's cwd is outside worktree, cwd will remain unchanged,
+#     prefix be NULL.
+
+test_repo() {
+	(
+	if [ -n "$1" ]; then cd "$1"; fi &&
+	git symbolic-ref HEAD >/dev/null && # git_dir reachability test first
+	git rev-parse --internal-git-dir >result &&
+	git rev-parse --show-toplevel >>result &&
+	git rev-parse --internal-cwd >>result &&
+	git rev-parse --show-prefix >>result &&
+	test_cmp expected result
+	)
+}
+
+# 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
-- 
1.7.0.2.445.gcbdb3