git-commit-vandalism/t/t5701-clone-local.sh
Gerrit Pape 5274ba6907 git-clone.sh: properly configure remote even if remote's head is dangling
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>
2008-02-20 11:31:17 -08:00

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