5274ba6907
When cloning a remote repository which's HEAD refers to a nonexistent ref, git-clone cloned all existing refs, but failed to write the configuration for 'remote'. Now it detects the dangling remote HEAD, refuses to checkout any local branch since HEAD refers to nowhere, but properly writes the configuration for 'remote', so that subsequent 'git fetch's don't fail. The problem was reported by Daniel Jacobowitz through http://bugs.debian.org/466581 Signed-off-by: Gerrit Pape <pape@smarden.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
75 lines
1.6 KiB
Bash
Executable File
75 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='test local clone'
|
|
. ./test-lib.sh
|
|
|
|
D=`pwd`
|
|
|
|
test_expect_success 'preparing origin repository' '
|
|
: >file && git add . && git commit -m1 &&
|
|
git clone --bare . a.git &&
|
|
git clone --bare . x &&
|
|
test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true &&
|
|
test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true
|
|
'
|
|
|
|
test_expect_success 'local clone without .git suffix' '
|
|
cd "$D" &&
|
|
git clone -l -s a b &&
|
|
cd b &&
|
|
test "$(GIT_CONFIG=.git/config git config --bool core.bare)" = false &&
|
|
git fetch
|
|
'
|
|
|
|
test_expect_success 'local clone with .git suffix' '
|
|
cd "$D" &&
|
|
git clone -l -s a.git c &&
|
|
cd c &&
|
|
git fetch
|
|
'
|
|
|
|
test_expect_success 'local clone from x' '
|
|
cd "$D" &&
|
|
git clone -l -s x y &&
|
|
cd y &&
|
|
git fetch
|
|
'
|
|
|
|
test_expect_success 'local clone from x.git that does not exist' '
|
|
cd "$D" &&
|
|
if git clone -l -s x.git z
|
|
then
|
|
echo "Oops, should have failed"
|
|
false
|
|
else
|
|
echo happy
|
|
fi
|
|
'
|
|
|
|
test_expect_success 'With -no-hardlinks, local will make a copy' '
|
|
cd "$D" &&
|
|
git clone --bare --no-hardlinks x w &&
|
|
cd w &&
|
|
linked=$(find objects -type f ! -links 1 | wc -l) &&
|
|
test 0 = $linked
|
|
'
|
|
|
|
test_expect_success 'Even without -l, local will make a hardlink' '
|
|
cd "$D" &&
|
|
rm -fr w &&
|
|
git clone -l --bare x w &&
|
|
cd w &&
|
|
copied=$(find objects -type f -links 1 | wc -l) &&
|
|
test 0 = $copied
|
|
'
|
|
|
|
test_expect_success 'local clone of repo with nonexistent ref in HEAD' '
|
|
cd "$D" &&
|
|
echo "ref: refs/heads/nonexistent" > a.git/HEAD &&
|
|
git clone a d &&
|
|
cd d &&
|
|
git fetch &&
|
|
test ! -e .git/refs/remotes/origin/HEAD'
|
|
|
|
test_done
|