Skip to content

Commit

Permalink
Add tests for filesystem challenges (case and unicode normalization)
Browse files Browse the repository at this point in the history
Git has difficulties on file systems that do not properly
distinguish case or modify filenames in unexpected ways.  The two
major examples are Windows and Mac OS X.  Both systems preserve
case of file names but do not distinguish between filenames that
differ only by case.  Simple operations such as "git mv" or
"git merge" can fail unexpectedly.  In addition, Mac OS X normalizes
unicode, which make git's life even harder.

This commit adds tests that currently fail but should pass if
file system as decribed above are fully supported.  The test need
to be run on Windows and Mac X as they already pass on Linux.

Mitch Tishmack is the original author of the tests for unicode
normalization.

[jc: fixed-up so that it will use test_expect_success to test
on sanely behaving filesystems.]

Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Steffen Prohaska authored and Junio C Hamano committed Feb 25, 2008
1 parent 99d8ea2 commit b560707
Showing 1 changed file with 93 additions and 0 deletions.
93 changes: 93 additions & 0 deletions t/t0050-filesystem.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/bin/sh

test_description='Various filesystem issues'

. ./test-lib.sh

auml=`perl -CO -e 'print pack("U",0x00E4)'`
aumlcdiar=`perl -CO -e 'print pack("U",0x0061).pack("U",0x0308)'`

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
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
'

test_expect_success "setup case tests" '
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)' '
git reset --hard initial &&
git merge topic
'

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

0 comments on commit b560707

Please sign in to comment.