summaryrefslogtreecommitdiff
path: root/t/t0050-filesystem.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/t0050-filesystem.sh')
-rwxr-xr-xt/t0050-filesystem.sh120
1 files changed, 120 insertions, 0 deletions
diff --git a/t/t0050-filesystem.sh b/t/t0050-filesystem.sh
new file mode 100755
index 0000000000..b29d749bb7
--- /dev/null
+++ b/t/t0050-filesystem.sh
@@ -0,0 +1,120 @@
+#!/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_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