]>
Commit | Line | Data |
---|---|---|
4d2060ef JH |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2005 Junio C Hamano | |
4 | # | |
5 | ||
6 | test_description='Pathnames with funny characters. | |
7 | ||
8 | This test tries pathnames with funny characters in the working | |
9 | tree, index, and tree objects. | |
10 | ' | |
11 | ||
288a4806 | 12 | TEST_PASSES_SANITIZE_LEAK=true |
4d2060ef JH |
13 | . ./test-lib.sh |
14 | ||
46d98476 RJ |
15 | HT=' ' |
16 | ||
4539a898 | 17 | test_have_prereq MINGW || |
46d98476 RJ |
18 | echo 2>/dev/null > "Name with an${HT}HT" |
19 | if ! test -f "Name with an${HT}HT" | |
20 | then | |
21 | # since FAT/NTFS does not allow tabs in filenames, skip this test | |
22 | skip_all='Your filesystem does not allow tabs in filenames' | |
23 | test_done | |
24 | fi | |
25 | ||
4d2060ef | 26 | p0='no-funny' |
73ab46d6 | 27 | p1='tabs ," (dq) and spaces' |
508c1d1c | 28 | p2='just space' |
4d2060ef | 29 | |
ef7db193 JN |
30 | test_expect_success 'setup' ' |
31 | cat >"$p0" <<-\EOF && | |
32 | 1. A quick brown fox jumps over the lazy cat, oops dog. | |
33 | 2. A quick brown fox jumps over the lazy cat, oops dog. | |
34 | 3. A quick brown fox jumps over the lazy cat, oops dog. | |
35 | EOF | |
36 | ||
37 | { cat "$p0" >"$p1" || :; } && | |
46d98476 | 38 | { echo "Foo Bar Baz" >"$p2" || :; } |
ef7db193 | 39 | ' |
4d2060ef | 40 | |
ef7db193 JN |
41 | test_expect_success 'setup: populate index and tree' ' |
42 | git update-index --add "$p0" "$p2" && | |
43 | t0=$(git write-tree) | |
44 | ' | |
e1697cc5 | 45 | |
ef7db193 JN |
46 | test_expect_success 'ls-files prints space in filename verbatim' ' |
47 | printf "%s\n" "just space" no-funny >expected && | |
5be60078 | 48 | git ls-files >current && |
ef7db193 JN |
49 | test_cmp expected current |
50 | ' | |
4d2060ef | 51 | |
ef7db193 JN |
52 | test_expect_success 'setup: add funny filename' ' |
53 | git update-index --add "$p1" && | |
54 | t1=$(git write-tree) | |
e1697cc5 ÆAB |
55 | ' |
56 | ||
ef7db193 JN |
57 | test_expect_success 'ls-files quotes funny filename' ' |
58 | cat >expected <<-\EOF && | |
59 | just space | |
60 | no-funny | |
61 | "tabs\t,\" (dq) and spaces" | |
62 | EOF | |
5be60078 | 63 | git ls-files >current && |
ef7db193 JN |
64 | test_cmp expected current |
65 | ' | |
4d2060ef | 66 | |
ef7db193 JN |
67 | test_expect_success 'ls-files -z does not quote funny filename' ' |
68 | cat >expected <<-\EOF && | |
69 | just space | |
70 | no-funny | |
71 | tabs ," (dq) and spaces | |
72 | EOF | |
73 | git ls-files -z >ls-files.z && | |
94221d22 | 74 | perl -pe "y/\000/\012/" <ls-files.z >current && |
ef7db193 JN |
75 | test_cmp expected current |
76 | ' | |
4d2060ef | 77 | |
ef7db193 JN |
78 | test_expect_success 'ls-tree quotes funny filename' ' |
79 | cat >expected <<-\EOF && | |
80 | just space | |
81 | no-funny | |
82 | "tabs\t,\" (dq) and spaces" | |
e7a8ac38 | 83 | EOF |
ef7db193 JN |
84 | git ls-tree -r $t1 >ls-tree && |
85 | sed -e "s/^[^ ]* //" <ls-tree >current && | |
86 | test_cmp expected current | |
87 | ' | |
e7a8ac38 | 88 | |
ef7db193 JN |
89 | test_expect_success 'diff-index --name-status quotes funny filename' ' |
90 | cat >expected <<-\EOF && | |
91 | A "tabs\t,\" (dq) and spaces" | |
92 | EOF | |
93 | git diff-index --name-status $t0 >current && | |
94 | test_cmp expected current | |
e1697cc5 ÆAB |
95 | ' |
96 | ||
ef7db193 JN |
97 | test_expect_success 'diff-tree --name-status quotes funny filename' ' |
98 | cat >expected <<-\EOF && | |
99 | A "tabs\t,\" (dq) and spaces" | |
100 | EOF | |
101 | git diff-tree --name-status $t0 $t1 >current && | |
102 | test_cmp expected current | |
103 | ' | |
104 | ||
105 | test_expect_success 'diff-index -z does not quote funny filename' ' | |
106 | cat >expected <<-\EOF && | |
107 | A | |
108 | tabs ," (dq) and spaces | |
109 | EOF | |
110 | git diff-index -z --name-status $t0 >diff-index.z && | |
94221d22 | 111 | perl -pe "y/\000/\012/" <diff-index.z >current && |
ef7db193 JN |
112 | test_cmp expected current |
113 | ' | |
114 | ||
115 | test_expect_success 'diff-tree -z does not quote funny filename' ' | |
116 | cat >expected <<-\EOF && | |
117 | A | |
118 | tabs ," (dq) and spaces | |
119 | EOF | |
120 | git diff-tree -z --name-status $t0 $t1 >diff-tree.z && | |
94221d22 | 121 | perl -pe y/\\000/\\012/ <diff-tree.z >current && |
ef7db193 JN |
122 | test_cmp expected current |
123 | ' | |
124 | ||
125 | test_expect_success 'diff-tree --find-copies-harder quotes funny filename' ' | |
126 | cat >expected <<-\EOF && | |
127 | CNUM no-funny "tabs\t,\" (dq) and spaces" | |
128 | EOF | |
129 | git diff-tree -C --find-copies-harder --name-status $t0 $t1 >out && | |
130 | sed -e "s/^C[0-9]*/CNUM/" <out >current && | |
131 | test_cmp expected current | |
132 | ' | |
4d2060ef | 133 | |
ef7db193 JN |
134 | test_expect_success 'setup: remove unfunny index entry' ' |
135 | git update-index --force-remove "$p0" | |
136 | ' | |
137 | ||
138 | test_expect_success 'diff-tree -M quotes funny filename' ' | |
139 | cat >expected <<-\EOF && | |
140 | RNUM no-funny "tabs\t,\" (dq) and spaces" | |
141 | EOF | |
142 | git diff-index -M --name-status $t0 >out && | |
143 | sed -e "s/^R[0-9]*/RNUM/" <out >current && | |
144 | test_cmp expected current | |
145 | ' | |
146 | ||
147 | test_expect_success 'diff-index -M -p quotes funny filename' ' | |
148 | cat >expected <<-\EOF && | |
149 | diff --git a/no-funny "b/tabs\t,\" (dq) and spaces" | |
150 | similarity index NUM% | |
151 | rename from no-funny | |
152 | rename to "tabs\t,\" (dq) and spaces" | |
153 | EOF | |
154 | git diff-index -M -p $t0 >diff && | |
155 | sed -e "s/index [0-9]*%/index NUM%/" <diff >current && | |
156 | test_cmp expected current | |
157 | ' | |
158 | ||
159 | test_expect_success 'setup: mode change' ' | |
160 | chmod +x "$p1" | |
161 | ' | |
162 | ||
163 | test_expect_success 'diff-index -M -p with mode change quotes funny filename' ' | |
164 | cat >expected <<-\EOF && | |
165 | diff --git a/no-funny "b/tabs\t,\" (dq) and spaces" | |
166 | old mode 100644 | |
167 | new mode 100755 | |
168 | similarity index NUM% | |
169 | rename from no-funny | |
170 | rename to "tabs\t,\" (dq) and spaces" | |
171 | EOF | |
172 | git diff-index -M -p $t0 >diff && | |
173 | sed -e "s/index [0-9]*%/index NUM%/" <diff >current && | |
174 | test_cmp expected current | |
175 | ' | |
176 | ||
177 | test_expect_success 'diffstat for rename quotes funny filename' ' | |
178 | cat >expected <<-\EOF && | |
179 | "tabs\t,\" (dq) and spaces" | |
180 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
181 | EOF | |
182 | git diff-index -M -p $t0 >diff && | |
183 | git apply --stat <diff >diffstat && | |
184 | sed -e "s/|.*//" -e "s/ *\$//" <diffstat >current && | |
1108cea7 | 185 | test_cmp expected current |
ef7db193 JN |
186 | ' |
187 | ||
188 | test_expect_success 'numstat for rename quotes funny filename' ' | |
189 | cat >expected <<-\EOF && | |
190 | 0 0 "tabs\t,\" (dq) and spaces" | |
191 | EOF | |
192 | git diff-index -M -p $t0 >diff && | |
193 | git apply --numstat <diff >current && | |
194 | test_cmp expected current | |
195 | ' | |
196 | ||
197 | test_expect_success 'numstat without -M quotes funny filename' ' | |
198 | cat >expected <<-\EOF && | |
199 | 0 3 no-funny | |
200 | 3 0 "tabs\t,\" (dq) and spaces" | |
201 | EOF | |
202 | git diff-index -p $t0 >diff && | |
203 | git apply --numstat <diff >current && | |
204 | test_cmp expected current | |
205 | ' | |
206 | ||
207 | test_expect_success 'numstat for non-git rename diff quotes funny filename' ' | |
208 | cat >expected <<-\EOF && | |
209 | 0 3 no-funny | |
210 | 3 0 "tabs\t,\" (dq) and spaces" | |
211 | EOF | |
212 | git diff-index -p $t0 >git-diff && | |
213 | sed -ne "/^[-+@]/p" <git-diff >diff && | |
214 | git apply --numstat <diff >current && | |
215 | test_cmp expected current | |
216 | ' | |
4d2060ef JH |
217 | |
218 | test_done |