]>
Commit | Line | Data |
---|---|---|
b560707a SP |
1 | #!/bin/sh |
2 | ||
3 | test_description='Various filesystem issues' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
77e57265 JN |
7 | auml=$(printf '\303\244') |
8 | aumlcdiar=$(printf '\141\314\210') | |
b560707a | 9 | |
9a3658b9 MG |
10 | if test_have_prereq CASE_INSENSITIVE_FS |
11 | then | |
5b46a428 | 12 | say "will test on a case insensitive filesystem" |
9a3658b9 MG |
13 | test_case=test_expect_failure |
14 | else | |
15 | test_case=test_expect_success | |
16 | fi | |
17 | ||
5b0b5dd4 MG |
18 | if test_have_prereq UTF8_NFD_TO_NFC |
19 | then | |
5b46a428 | 20 | say "will test on a unicode corrupting filesystem" |
5b0b5dd4 MG |
21 | test_unicode=test_expect_failure |
22 | else | |
23 | test_unicode=test_expect_success | |
24 | fi | |
25 | ||
2b71b522 | 26 | test_have_prereq SYMLINKS || |
64e61f2d | 27 | say "will test on a filesystem lacking symbolic links" |
5b46a428 | 28 | |
9a3658b9 | 29 | if test_have_prereq CASE_INSENSITIVE_FS |
1c51c7d7 SP |
30 | then |
31 | test_expect_success "detection of case insensitive filesystem during repo init" ' | |
1c51c7d7 SP |
32 | test $(git config --bool core.ignorecase) = true |
33 | ' | |
34 | else | |
35 | test_expect_success "detection of case insensitive filesystem during repo init" ' | |
bfe998fc JK |
36 | { |
37 | test_must_fail git config --bool core.ignorecase >/dev/null || | |
38 | test $(git config --bool core.ignorecase) = false | |
39 | } | |
1c51c7d7 SP |
40 | ' |
41 | fi | |
42 | ||
2b71b522 | 43 | if test_have_prereq SYMLINKS |
64e61f2d JS |
44 | then |
45 | test_expect_success "detection of filesystem w/o symlink support during repo init" ' | |
bfe998fc JK |
46 | { |
47 | test_must_fail git config --bool core.symlinks || | |
48 | test "$(git config --bool core.symlinks)" = true | |
49 | } | |
64e61f2d JS |
50 | ' |
51 | else | |
52 | test_expect_success "detection of filesystem w/o symlink support during repo init" ' | |
2b71b522 MG |
53 | v=$(git config --bool core.symlinks) && |
54 | test "$v" = false | |
64e61f2d JS |
55 | ' |
56 | fi | |
57 | ||
b560707a | 58 | test_expect_success "setup case tests" ' |
b4a299d8 | 59 | git config core.ignorecase true && |
b560707a SP |
60 | touch camelcase && |
61 | git add camelcase && | |
62 | git commit -m "initial" && | |
63 | git tag initial && | |
64 | git checkout -b topic && | |
65 | git mv camelcase tmp && | |
66 | git mv tmp CamelCase && | |
67 | git commit -m "rename" && | |
68 | git checkout -f master | |
b560707a SP |
69 | ' |
70 | ||
decd3c0c | 71 | test_expect_success 'rename (case change)' ' |
b560707a SP |
72 | git mv camelcase CamelCase && |
73 | git commit -m "rename" | |
b560707a SP |
74 | ' |
75 | ||
004c0be7 | 76 | test_expect_success 'merge (case change)' ' |
0047dd2f SP |
77 | rm -f CamelCase && |
78 | rm -f camelcase && | |
b560707a SP |
79 | git reset --hard initial && |
80 | git merge topic | |
b560707a SP |
81 | ' |
82 | ||
c95525e9 BP |
83 | test_expect_success CASE_INSENSITIVE_FS 'add directory (with different case)' ' |
84 | git reset --hard initial && | |
85 | mkdir -p dir1/dir2 && | |
86 | echo >dir1/dir2/a && | |
87 | echo >dir1/dir2/b && | |
88 | git add dir1/dir2/a && | |
89 | git add dir1/DIR2/b && | |
90 | git ls-files >actual && | |
91 | cat >expected <<-\EOF && | |
92 | camelcase | |
93 | dir1/dir2/a | |
94 | dir1/dir2/b | |
95 | EOF | |
96 | test_cmp expected actual | |
97 | ' | |
0d7c2430 | 98 | |
4084475b | 99 | test_expect_failure CASE_INSENSITIVE_FS 'add (with different case)' ' |
8a19aaab SP |
100 | git reset --hard initial && |
101 | rm camelcase && | |
102 | echo 1 >CamelCase && | |
103 | git add CamelCase && | |
0d7c2430 JH |
104 | camel=$(git ls-files | grep -i camelcase) && |
105 | test $(echo "$camel" | wc -l) = 1 && | |
106 | test "z$(git cat-file blob :$camel)" = z1 | |
8a19aaab SP |
107 | ' |
108 | ||
b560707a | 109 | test_expect_success "setup unicode normalization tests" ' |
336e2e27 TB |
110 | test_create_repo unicode && |
111 | cd unicode && | |
92b0c8be | 112 | git config core.precomposeunicode false && |
336e2e27 TB |
113 | touch "$aumlcdiar" && |
114 | git add "$aumlcdiar" && | |
115 | git commit -m initial && | |
116 | git tag initial && | |
117 | git checkout -b topic && | |
118 | git mv $aumlcdiar tmp && | |
119 | git mv tmp "$auml" && | |
120 | git commit -m rename && | |
121 | git checkout -f master | |
b560707a SP |
122 | ' |
123 | ||
124 | $test_unicode 'rename (silent unicode normalization)' ' | |
336e2e27 TB |
125 | git mv "$aumlcdiar" "$auml" && |
126 | git commit -m rename | |
b560707a SP |
127 | ' |
128 | ||
129 | $test_unicode 'merge (silent unicode normalization)' ' | |
336e2e27 TB |
130 | git reset --hard initial && |
131 | git merge topic | |
b560707a SP |
132 | ' |
133 | ||
134 | test_done |