mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
0047dd2fd1
On a case sensitive filesystem, "git reset --hard" might refuse to overwrite a file whose name differs only by case, even if core.ignorecase is set. It is not clear which circumstances cause this behavior. This commit simply works around the problem by removing the case changing file before running "git reset --hard". Signed-off-by: Steffen Prohaska <prohaska@zib.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
123 lines
2.3 KiB
Bash
Executable File
123 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='Various filesystem issues'
|
|
|
|
. ./test-lib.sh
|
|
|
|
auml=`printf '\xc3\xa4'`
|
|
aumlcdiar=`printf '\x61\xcc\x88'`
|
|
|
|
case_insensitive=
|
|
test_expect_success 'see if we expect ' '
|
|
|
|
test_case=test_expect_success
|
|
test_unicode=test_expect_success
|
|
mkdir junk &&
|
|
echo good >junk/CamelCase &&
|
|
echo bad >junk/camelcase &&
|
|
if test "$(cat junk/CamelCase)" != good
|
|
then
|
|
test_case=test_expect_failure
|
|
case_insensitive=t
|
|
say "will test on a case insensitive filesystem"
|
|
fi &&
|
|
rm -fr junk &&
|
|
mkdir junk &&
|
|
>junk/"$auml" &&
|
|
case "$(cd junk && echo *)" in
|
|
"$aumlcdiar")
|
|
test_unicode=test_expect_failure
|
|
say "will test on a unicode corrupting filesystem"
|
|
;;
|
|
*) ;;
|
|
esac &&
|
|
rm -fr junk
|
|
'
|
|
|
|
if test "$case_insensitive"
|
|
then
|
|
test_expect_success "detection of case insensitive filesystem during repo init" '
|
|
|
|
test $(git config --bool core.ignorecase) = true
|
|
'
|
|
else
|
|
test_expect_success "detection of case insensitive filesystem during repo init" '
|
|
|
|
! git config --bool core.ignorecase >/dev/null ||
|
|
test $(git config --bool core.ignorecase) = false
|
|
'
|
|
fi
|
|
|
|
test_expect_success "setup case tests" '
|
|
|
|
git config core.ignorecase true &&
|
|
touch camelcase &&
|
|
git add camelcase &&
|
|
git commit -m "initial" &&
|
|
git tag initial &&
|
|
git checkout -b topic &&
|
|
git mv camelcase tmp &&
|
|
git mv tmp CamelCase &&
|
|
git commit -m "rename" &&
|
|
git checkout -f master
|
|
|
|
'
|
|
|
|
$test_case 'rename (case change)' '
|
|
|
|
git mv camelcase CamelCase &&
|
|
git commit -m "rename"
|
|
|
|
'
|
|
|
|
$test_case 'merge (case change)' '
|
|
|
|
rm -f CamelCase &&
|
|
rm -f camelcase &&
|
|
git reset --hard initial &&
|
|
git merge topic
|
|
|
|
'
|
|
|
|
$test_case 'add (with different case)' '
|
|
|
|
git reset --hard initial &&
|
|
rm camelcase &&
|
|
echo 1 >CamelCase &&
|
|
git add CamelCase &&
|
|
test $(git-ls-files | grep -i camelcase | wc -l) = 1
|
|
|
|
'
|
|
|
|
test_expect_success "setup unicode normalization tests" '
|
|
|
|
test_create_repo unicode &&
|
|
cd unicode &&
|
|
touch "$aumlcdiar" &&
|
|
git add "$aumlcdiar" &&
|
|
git commit -m initial
|
|
git tag initial &&
|
|
git checkout -b topic &&
|
|
git mv $aumlcdiar tmp &&
|
|
git mv tmp "$auml" &&
|
|
git commit -m rename &&
|
|
git checkout -f master
|
|
|
|
'
|
|
|
|
$test_unicode 'rename (silent unicode normalization)' '
|
|
|
|
git mv "$aumlcdiar" "$auml" &&
|
|
git commit -m rename
|
|
|
|
'
|
|
|
|
$test_unicode 'merge (silent unicode normalization)' '
|
|
|
|
git reset --hard initial &&
|
|
git merge topic
|
|
|
|
'
|
|
|
|
test_done
|