about summary refs log tree commit diff
path: root/third_party/git/t/t0050-filesystem.sh
diff options
context:
space:
mode:
authorVincent Ambo <Vincent Ambo>2020-01-11T23·36+0000
committerVincent Ambo <Vincent Ambo>2020-01-11T23·40+0000
commit7ef0d62730840ded097b524104cc0a0904591a63 (patch)
treea670f96103667aeca4789a95d94ca0dff550c4ce /third_party/git/t/t0050-filesystem.sh
parent6a2a3007077818e24a3d56fc492ada9206a10cf0 (diff)
parent1b593e1ea4d2af0f6444d9a7788d5d99abd6fde5 (diff)
merge(third_party/git): Merge squashed git subtree at v2.23.0 r/373
Merge commit '1b593e1ea4d2af0f6444d9a7788d5d99abd6fde5' as 'third_party/git'
Diffstat (limited to 'third_party/git/t/t0050-filesystem.sh')
-rwxr-xr-xthird_party/git/t/t0050-filesystem.sh134
1 files changed, 134 insertions, 0 deletions
diff --git a/third_party/git/t/t0050-filesystem.sh b/third_party/git/t/t0050-filesystem.sh
new file mode 100755
index 0000000000..192c94eccd
--- /dev/null
+++ b/third_party/git/t/t0050-filesystem.sh
@@ -0,0 +1,134 @@
+#!/bin/sh
+
+test_description='Various filesystem issues'
+
+. ./test-lib.sh
+
+auml=$(printf '\303\244')
+aumlcdiar=$(printf '\141\314\210')
+
+if test_have_prereq CASE_INSENSITIVE_FS
+then
+	say "will test on a case insensitive filesystem"
+	test_case=test_expect_failure
+else
+	test_case=test_expect_success
+fi
+
+if test_have_prereq UTF8_NFD_TO_NFC
+then
+	say "will test on a unicode corrupting filesystem"
+	test_unicode=test_expect_failure
+else
+	test_unicode=test_expect_success
+fi
+
+test_have_prereq SYMLINKS ||
+	say "will test on a filesystem lacking symbolic links"
+
+if test_have_prereq CASE_INSENSITIVE_FS
+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_have_prereq SYMLINKS
+then
+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
+	}
+'
+else
+test_expect_success "detection of filesystem w/o symlink support during repo init" '
+	v=$(git config --bool core.symlinks) &&
+	test "$v" = 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_expect_success 'rename (case change)' '
+	git mv camelcase CamelCase &&
+	git commit -m "rename"
+'
+
+test_expect_success 'merge (case change)' '
+	rm -f CamelCase &&
+	rm -f camelcase &&
+	git reset --hard initial &&
+	git merge topic
+'
+
+test_expect_success CASE_INSENSITIVE_FS 'add directory (with different case)' '
+	git reset --hard initial &&
+	mkdir -p dir1/dir2 &&
+	echo >dir1/dir2/a &&
+	echo >dir1/dir2/b &&
+	git add dir1/dir2/a &&
+	git add dir1/DIR2/b &&
+	git ls-files >actual &&
+	cat >expected <<-\EOF &&
+		camelcase
+		dir1/dir2/a
+		dir1/dir2/b
+	EOF
+	test_cmp expected actual
+'
+
+test_expect_failure CASE_INSENSITIVE_FS '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 &&
+	git config core.precomposeunicode false &&
+	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