| #!/bin/sh | 
 |  | 
 | test_description='Various filesystem issues' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | auml=`printf '\xc3\xa4'` | 
 | aumlcdiar=`printf '\x61\xcc\x88'` | 
 |  | 
 | case_insensitive= | 
 | unibad= | 
 | no_symlinks= | 
 | test_expect_success 'see what 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 | 
 | 	fi && | 
 | 	rm -fr junk && | 
 | 	mkdir junk && | 
 | 	>junk/"$auml" && | 
 | 	case "$(cd junk && echo *)" in | 
 | 	"$aumlcdiar") | 
 | 		test_unicode=test_expect_failure | 
 | 		unibad=t | 
 | 		;; | 
 | 	*)	;; | 
 | 	esac && | 
 | 	rm -fr junk && | 
 | 	{ | 
 | 		ln -s x y 2> /dev/null && | 
 | 		test -h y 2> /dev/null || | 
 | 		no_symlinks=1 | 
 | 		rm -f y | 
 | 	} | 
 | ' | 
 |  | 
 | test "$case_insensitive" && | 
 | 	say "will test on a case insensitive filesystem" | 
 | test "$unibad" && | 
 | 	say "will test on a unicode corrupting filesystem" | 
 | test "$no_symlinks" && | 
 | 	say "will test on a filesystem lacking symbolic links" | 
 |  | 
 | 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" ' | 
 |  | 
 | 	test_must_fail git config --bool core.ignorecase >/dev/null || | 
 | 	test $(git config --bool core.ignorecase) = false | 
 | ' | 
 | fi | 
 |  | 
 | if test "$no_symlinks" | 
 | then | 
 | test_expect_success "detection of filesystem w/o symlink support during repo init" ' | 
 |  | 
 | 	v=$(git config --bool core.symlinks) && | 
 | 	test "$v" = false | 
 | ' | 
 | else | 
 | test_expect_success "detection of filesystem w/o symlink support during repo init" ' | 
 |  | 
 | 	test_must_fail git config --bool core.symlinks || | 
 | 	test "$(git config --bool core.symlinks)" = true | 
 | ' | 
 | 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_expect_failure 'add (with different case)' ' | 
 |  | 
 | 	git reset --hard initial && | 
 | 	rm camelcase && | 
 | 	echo 1 >CamelCase && | 
 | 	git add CamelCase && | 
 | 	camel=$(git ls-files | grep -i camelcase) && | 
 | 	test $(echo "$camel" | wc -l) = 1 && | 
 | 	test "z$(git cat-file blob :$camel)" = z1 | 
 |  | 
 | ' | 
 |  | 
 | 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 |