Fix initialization of a bare repository
authorJunio C Hamano <gitster@pobox.com>
Mon, 27 Aug 2007 07:58:06 +0000 (00:58 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 28 Aug 2007 05:36:43 +0000 (22:36 -0700)
commit6adcca3fe84e6859fc62df6c4ab916192ca02795
treecbe1f3262b88759927ac07e3980fa8b590679b47
parentac076c29ae8d57b72abe27f573061ea7b2eeed57
Fix initialization of a bare repository

Here is my attempt to fix this with a minimally intrusive patch.

 * As "git --bare init" cannot tell if it was called with --bare or
   just "GIT_DIR=. git init", I added an explicit assignment of
   is_bare_repository_cfg on the codepath for "git --bare".

 * GIT_WORK_TREE alone without GIT_DIR does not make any sense,
   nor GIT_WORK_TREE with an explicit "git --bare".  Catch that
   mistake.  It might make sense to move this check to "git.c"
   side as well, but I tried to shoot for the minimum change for
   now.

 * Some scripts, especially from the olden days, rely on
   traditional GIT_DIR behaviour in "git init".  Namely, these
   are some notable patterns:

   (create a bare repository)
   - mkdir some.git && cd some.git && GIT_DIR=. git init
   - mkdir some.git && cd some.git && git --bare init

   (create a non-bare repository)
   - mkdir .git && GIT_DIR=.git git init
   - mkdir .git && GIT_DIR=`pwd`/.git git init

This comes with a new test script and also passes the existing
test suite, but there may be cases that are still broken with
the current tip of master and this patch does not yet fix.  I'd
appreciate help in straightening this mess out.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-init-db.c
git.c
t/t0001-init.sh [new file with mode: 0755]