Re: [PATCH] Fix initialization of a bare repository

Subsystems: the rest

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH] Fix initialization of a bare repository

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:29

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

Re: [PATCH] Fix initialization of a bare repository

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:43:29

Hi,

On Wed, 15 Aug 2007, Junio C Hamano wrote:
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?
Yes.  I'll try to work on it the day after tomorrow.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help