git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Fix initialization of a bare repository
Date: Wed, 15 Aug 2007 13:41:06 -0700	[thread overview]
Message-ID: <7vhcn0pm3h.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <Pine.LNX.4.64.0708151821260.19496@wbgn129.biozentrum.uni-wuerzburg.de> (Johannes Schindelin's message of "Wed, 15 Aug 2007 18:25:44 +0200 (CEST)")

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

  parent reply	other threads:[~2007-08-15 20:41 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-15 12:28 git clone regression Junio C Hamano
2007-08-15 16:25 ` [PATCH] Fix initialization of a bare repository Johannes Schindelin
2007-08-15 19:09   ` Junio C Hamano
2007-08-15 19:26     ` Junio C Hamano
2007-08-15 20:41   ` Junio C Hamano [this message]
2007-08-17 22:20     ` Johannes Schindelin
2007-08-27  7:58     ` [PATCH/RFH] " Junio C Hamano
2007-08-27 10:54       ` Johannes Schindelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vhcn0pm3h.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).