Merge branch 'nd/extended-sha1-relpath' into next
[git] / t / t3300-funny-names.sh
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
12 . ./test-lib.sh
13
14 p0='no-funny'
15 p1='tabs        ," (dq) and spaces'
16 p2='just space'
17
18 cat >"$p0" <<\EOF
19 1. A quick brown fox jumps over the lazy cat, oops dog.
20 2. A quick brown fox jumps over the lazy cat, oops dog.
21 3. A quick brown fox jumps over the lazy cat, oops dog.
22 EOF
23
24 cat 2>/dev/null >"$p1" "$p0"
25 echo 'Foo Bar Baz' >"$p2"
26
27 if test -f "$p1" && cmp "$p0" "$p1"
28 then
29     test_set_prereq TABS_IN_FILENAMES
30 else
31         # since FAT/NTFS does not allow tabs in filenames, skip this test
32         say 'Your filesystem does not allow tabs in filenames'
33 fi
34
35 test_expect_success TABS_IN_FILENAMES 'setup expect' "
36 echo 'just space
37 no-funny' >expected
38 "
39
40 test_expect_success TABS_IN_FILENAMES 'git ls-files no-funny' \
41         'git update-index --add "$p0" "$p2" &&
42         git ls-files >current &&
43         test_cmp expected current'
44
45 test_expect_success TABS_IN_FILENAMES 'setup expect' '
46 t0=`git write-tree` &&
47 echo "$t0" >t0 &&
48
49 cat > expected <<\EOF
50 just space
51 no-funny
52 "tabs\t,\" (dq) and spaces"
53 EOF
54 '
55
56 test_expect_success TABS_IN_FILENAMES 'git ls-files with-funny' \
57         'git update-index --add "$p1" &&
58         git ls-files >current &&
59         test_cmp expected current'
60
61 test_expect_success TABS_IN_FILENAMES 'setup expect' "
62 echo 'just space
63 no-funny
64 tabs    ,\" (dq) and spaces' >expected
65 "
66
67 test_expect_success TABS_IN_FILENAMES 'git ls-files -z with-funny' \
68         'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
69         test_cmp expected current'
70
71 test_expect_success TABS_IN_FILENAMES 'setup expect' '
72 t1=`git write-tree` &&
73 echo "$t1" >t1 &&
74
75 cat > expected <<\EOF
76 just space
77 no-funny
78 "tabs\t,\" (dq) and spaces"
79 EOF
80 '
81
82 test_expect_success TABS_IN_FILENAMES 'git ls-tree with funny' \
83         'git ls-tree -r $t1 | sed -e "s/^[^     ]*      //" >current &&
84          test_cmp expected current'
85
86 test_expect_success TABS_IN_FILENAMES 'setup expect' '
87 cat > expected <<\EOF
88 A       "tabs\t,\" (dq) and spaces"
89 EOF
90 '
91
92 test_expect_success TABS_IN_FILENAMES 'git diff-index with-funny' \
93         'git diff-index --name-status $t0 >current &&
94         test_cmp expected current'
95
96 test_expect_success TABS_IN_FILENAMES 'git diff-tree with-funny' \
97         'git diff-tree --name-status $t0 $t1 >current &&
98         test_cmp expected current'
99
100 test_expect_success TABS_IN_FILENAMES 'setup expect' "
101 echo 'A
102 tabs    ,\" (dq) and spaces' >expected
103 "
104
105 test_expect_success TABS_IN_FILENAMES 'git diff-index -z with-funny' \
106         'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
107         test_cmp expected current'
108
109 test_expect_success TABS_IN_FILENAMES 'git diff-tree -z with-funny' \
110         'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
111         test_cmp expected current'
112
113 test_expect_success TABS_IN_FILENAMES 'setup expect' '
114 cat > expected <<\EOF
115 CNUM    no-funny        "tabs\t,\" (dq) and spaces"
116 EOF
117 '
118
119 test_expect_success TABS_IN_FILENAMES 'git diff-tree -C with-funny' \
120         'git diff-tree -C --find-copies-harder --name-status \
121                 $t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current &&
122         test_cmp expected current'
123
124 test_expect_success TABS_IN_FILENAMES 'setup expect' '
125 cat > expected <<\EOF
126 RNUM    no-funny        "tabs\t,\" (dq) and spaces"
127 EOF
128 '
129
130 test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
131         'git update-index --force-remove "$p0" &&
132         git diff-index -M --name-status \
133                 $t0 | sed -e 's/^R[0-9]*/RNUM/' >current &&
134         test_cmp expected current'
135
136 test_expect_success TABS_IN_FILENAMES 'setup expect' '
137 cat > expected <<\EOF
138 diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
139 similarity index NUM%
140 rename from no-funny
141 rename to "tabs\t,\" (dq) and spaces"
142 EOF
143 '
144
145 test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
146         'git diff-index -M -p $t0 |
147          sed -e "s/index [0-9]*%/index NUM%/" >current &&
148          test_cmp expected current'
149
150 test_expect_success TABS_IN_FILENAMES 'setup expect' '
151 chmod +x "$p1" &&
152 cat > expected <<\EOF
153 diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
154 old mode 100644
155 new mode 100755
156 similarity index NUM%
157 rename from no-funny
158 rename to "tabs\t,\" (dq) and spaces"
159 EOF
160 '
161
162 test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
163         'git diff-index -M -p $t0 |
164          sed -e "s/index [0-9]*%/index NUM%/" >current &&
165          test_cmp expected current'
166
167 test_expect_success TABS_IN_FILENAMES 'setup expect' '
168 cat >expected <<\EOF
169  "tabs\t,\" (dq) and spaces"
170  1 files changed, 0 insertions(+), 0 deletions(-)
171 EOF
172 '
173
174 test_expect_success TABS_IN_FILENAMES 'git diff-tree rename with-funny applied' \
175         'git diff-index -M -p $t0 |
176          git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
177          test_cmp expected current'
178
179 test_expect_success TABS_IN_FILENAMES 'setup expect' '
180 cat > expected <<\EOF
181  no-funny
182  "tabs\t,\" (dq) and spaces"
183  2 files changed, 3 insertions(+), 3 deletions(-)
184 EOF
185 '
186
187 test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny applied' \
188         'git diff-index -p $t0 |
189          git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
190          test_cmp expected current'
191
192 test_expect_success TABS_IN_FILENAMES 'git apply non-git diff' \
193         'git diff-index -p $t0 |
194          sed -ne "/^[-+@]/p" |
195          git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
196          test_cmp expected current'
197
198 test_done