-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Junio C Hamano
committed
Aug 28, 2007
1 parent
ac076c2
commit 6adcca3
Showing
3 changed files
with
177 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
#!/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 GIT_CONFIG && | ||
mkdir plain-bare-1 && | ||
cd plain-bare-1 && | ||
git --bare init | ||
) && | ||
check_config plain-bare-1 true unset | ||
' | ||
|
||
test_expect_success 'plain bare with GIT_WORK_TREE' ' | ||
if ( | ||
unset GIT_DIR GIT_CONFIG && | ||
mkdir plain-bare-2 && | ||
cd plain-bare-2 && | ||
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' ' | ||
( | ||
unset GIT_CONFIG && | ||
mkdir git-dir-bare.git && | ||
GIT_DIR=git-dir-bare.git git init | ||
) && | ||
check_config git-dir-bare.git true unset | ||
' | ||
|
||
test_expect_success 'GIT_DIR non-bare' ' | ||
( | ||
unset GIT_CONFIG && | ||
mkdir non-bare && | ||
cd non-bare && | ||
GIT_DIR=.git git init | ||
) && | ||
check_config non-bare/.git false unset | ||
' | ||
|
||
test_expect_success 'GIT_DIR & GIT_WORK_TREE (1)' ' | ||
( | ||
unset GIT_CONFIG && | ||
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 ( | ||
unset GIT_CONFIG && | ||
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 |