Wait a minute.
Let's step back a bit and think what we want to happen here.
* No GIT_DIR, no --bare. Having GIT_WORK_TREE is an error.
$ mkdir foo && cd foo && git init
We want to say "not bare" and create foo/.git/config and friends.
* No GIT_DIR, with --bare. Having GIT_WORK_TREE is an error.
$ mkdir foo && cd foo && git --bare init
We want to say "is bare" and create foo/config, foo/HEAD and
friends.
* With GIT_DIR but no GIT_WORK_TREE, with or without --bare.
$ mkdir foo.git && GIT_DIR=foo.git git init
$ mkdir foo.git && GIT_DIR=foo.git git --bare init
We want to say "is bare" and create foo.git/config and friends.
* With GIT_DIR and GIT_WORK_TREE. Having --bare is an error.
$ mkdir foo.git foo.work
$ GIT_DIR=foo.git GIT_WORK_TREE=foo.work git init
We want to say "not bare", create foo.git/config and friends,
and record core.worktree = /full/path/to/foo.work
Is the above list reasonable?
---
t/t0001-init.sh | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 111 insertions(+), 0 deletions(-)
create mode 100755 t/t0001-init.sh
diff --git a/t/t0001-init.sh b/t/t0001-init.sh
new file mode 100755
index 0000000..9fb2b59
--- /dev/null
+++ b/t/t0001-init.sh
@@ -0,0 +1,111 @@
+#!/bin/sh
+
+test_description='git init'
+
+. ./test-lib.sh
+
+check_config () {
+ if test -d "$1" && test -f "$1/config" && test -d "$1/refs"
+ then
+ : happy
+ else
+ echo "expected a directory $1, a file $1/config and $1/refs"
+ return 1
+ fi
+ bare=$(GIT_CONFIG="$1/config" git config --bool core.bare)
+ worktree=$(GIT_CONFIG="$1/config" git config core.worktree) ||
+ worktree=unset
+
+ test "$bare" = "$2" && test "$worktree" = "$3" || {
+ echo "expected bare=$2 worktree=$3"
+ echo " got bare=$bare worktree=$worktree"
+ return 1
+ }
+}
+
+test_expect_success 'plain' '
+ (
+ unset GIT_DIR GIT_WORK_TREE &&
+ mkdir plain &&
+ cd plain &&
+ git init
+ ) &&
+ check_config plain/.git false unset
+'
+
+test_expect_success 'plain with GIT_WORK_TREE' '
+ if (
+ unset GIT_DIR &&
+ mkdir plain-wt &&
+ cd plain-wt &&
+ GIT_WORK_TREE=$(pwd) git init
+ )
+ then
+ echo Should have failed -- GIT_WORK_TREE should not be used
+ false
+ fi
+'
+
+test_expect_success 'plain bare' '
+ (
+ unset GIT_DIR GIT_WORK_TREE &&
+ mkdir plain-bare &&
+ cd plain-bare &&
+ git --bare init
+ ) &&
+ check_config plain-bare true unset
+'
+
+test_expect_success 'plain bare with GIT_WORK_TREE' '
+ if (
+ unset GIT_DIR &&
+ mkdir plain-bare &&
+ cd plain-bare &&
+ GIT_WORK_TREE=$(pwd) git --bare init
+ )
+ then
+ echo Should have failed -- GIT_WORK_TREE should not be used
+ false
+ fi
+'
+
+test_expect_success 'GIT_DIR bare (1)' '
+
+ (
+ mkdir git-dir-bare-1.git &&
+ GIT_DIR=git-dir-bare-1.git git init
+ ) &&
+ check_config git-dir-bare-1.git true unset
+'
+
+test_expect_success 'GIT_DIR bare (2)' '
+
+ (
+ mkdir git-dir-bare-2.git &&
+ GIT_DIR=git-dir-bare-2.git git --bare init
+ ) &&
+ check_config git-dir-bare-2.git true unset
+'
+
+test_expect_success 'GIT_DIR & GIT_WORK_TREE (1)' '
+
+ (
+ mkdir git-dir-wt-1.git &&
+ GIT_WORK_TREE=$(pwd) GIT_DIR=git-dir-wt-1.git git init
+ ) &&
+ check_config git-dir-wt-1.git false "$(pwd)"
+'
+
+test_expect_success 'GIT_DIR & GIT_WORK_TREE (2)' '
+
+ if (
+ mkdir git-dir-wt-2.git &&
+ GIT_WORK_TREE=$(pwd) GIT_DIR=git-dir-wt-2.git git --bare init
+ )
+ then
+ echo Should have failed -- --bare should not be used
+ false
+ fi
+'
+
+test_done
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html