]>
Commit | Line | Data |
---|---|---|
8159f4af RS |
1 | #!/bin/sh |
2 | ||
3 | test_description='Test handling of ref names that check-ref-format rejects' | |
06d53148 | 4 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
334afbc7 JS |
5 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
6 | ||
288a4806 | 7 | TEST_PASSES_SANITIZE_LEAK=true |
8159f4af RS |
8 | . ./test-lib.sh |
9 | ||
10 | test_expect_success setup ' | |
d0f810f0 | 11 | test_commit one && |
3c966c7b HWN |
12 | test_commit two && |
13 | main_sha1=$(git rev-parse refs/heads/main) | |
8159f4af RS |
14 | ' |
15 | ||
16 | test_expect_success 'fast-import: fail on invalid branch name ".badbranchname"' ' | |
17 | test_when_finished "rm -f .git/objects/pack_* .git/objects/index_*" && | |
18 | cat >input <<-INPUT_END && | |
19 | commit .badbranchname | |
20 | committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE | |
21 | data <<COMMIT | |
22 | corrupt | |
23 | COMMIT | |
24 | ||
06d53148 | 25 | from refs/heads/main |
8159f4af RS |
26 | |
27 | INPUT_END | |
28 | test_must_fail git fast-import <input | |
29 | ' | |
30 | ||
31 | test_expect_success 'fast-import: fail on invalid branch name "bad[branch]name"' ' | |
32 | test_when_finished "rm -f .git/objects/pack_* .git/objects/index_*" && | |
33 | cat >input <<-INPUT_END && | |
34 | commit bad[branch]name | |
35 | committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE | |
36 | data <<COMMIT | |
37 | corrupt | |
38 | COMMIT | |
39 | ||
06d53148 | 40 | from refs/heads/main |
8159f4af RS |
41 | |
42 | INPUT_END | |
43 | test_must_fail git fast-import <input | |
44 | ' | |
45 | ||
aedcb7dc | 46 | test_expect_success 'git branch shows badly named ref as warning' ' |
3c966c7b HWN |
47 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
48 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && | |
aedcb7dc | 49 | git branch >output 2>error && |
6789275d | 50 | test_grep -e "ignoring ref with broken name refs/heads/broken\.\.\.ref" error && |
aedcb7dc | 51 | ! grep -e "broken\.\.\.ref" output |
d0f810f0 RS |
52 | ' |
53 | ||
54 | test_expect_success 'branch -d can delete badly named ref' ' | |
3c966c7b HWN |
55 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
56 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && | |
d0f810f0 | 57 | git branch -d broken...ref && |
aedcb7dc KN |
58 | git branch >output 2>error && |
59 | ! grep -e "broken\.\.\.ref" error && | |
d0f810f0 RS |
60 | ! grep -e "broken\.\.\.ref" output |
61 | ' | |
62 | ||
63 | test_expect_success 'branch -D can delete badly named ref' ' | |
3c966c7b HWN |
64 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
65 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && | |
d0f810f0 | 66 | git branch -D broken...ref && |
aedcb7dc KN |
67 | git branch >output 2>error && |
68 | ! grep -e "broken\.\.\.ref" error && | |
d0f810f0 RS |
69 | ! grep -e "broken\.\.\.ref" output |
70 | ' | |
71 | ||
72 | test_expect_success 'branch -D cannot delete non-ref in .git dir' ' | |
73 | echo precious >.git/my-private-file && | |
74 | echo precious >expect && | |
75 | test_must_fail git branch -D ../../my-private-file && | |
76 | test_cmp expect .git/my-private-file | |
77 | ' | |
78 | ||
a3372926 JK |
79 | test_expect_success 'branch -D cannot delete ref in .git dir' ' |
80 | git rev-parse HEAD >.git/my-private-file && | |
81 | git rev-parse HEAD >expect && | |
82 | git branch foo/legit && | |
83 | test_must_fail git branch -D foo////./././../../../my-private-file && | |
84 | test_cmp expect .git/my-private-file | |
85 | ' | |
86 | ||
d0f810f0 RS |
87 | test_expect_success 'branch -D cannot delete absolute path' ' |
88 | git branch -f extra && | |
89 | test_must_fail git branch -D "$(pwd)/.git/refs/heads/extra" && | |
90 | test_cmp_rev HEAD extra | |
91 | ' | |
92 | ||
93 | test_expect_success 'git branch cannot create a badly named ref' ' | |
3c966c7b | 94 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && |
d0f810f0 | 95 | test_must_fail git branch broken...ref && |
aedcb7dc KN |
96 | git branch >output 2>error && |
97 | ! grep -e "broken\.\.\.ref" error && | |
d0f810f0 RS |
98 | ! grep -e "broken\.\.\.ref" output |
99 | ' | |
100 | ||
101 | test_expect_success 'branch -m cannot rename to a bad ref name' ' | |
3c966c7b | 102 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && |
d0f810f0 RS |
103 | test_might_fail git branch -D goodref && |
104 | git branch goodref && | |
105 | test_must_fail git branch -m goodref broken...ref && | |
06d53148 | 106 | test_cmp_rev main goodref && |
aedcb7dc KN |
107 | git branch >output 2>error && |
108 | ! grep -e "broken\.\.\.ref" error && | |
d0f810f0 RS |
109 | ! grep -e "broken\.\.\.ref" output |
110 | ' | |
111 | ||
112 | test_expect_failure 'branch -m can rename from a bad ref name' ' | |
3c966c7b HWN |
113 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
114 | ||
115 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && | |
d0f810f0 | 116 | git branch -m broken...ref renamed && |
06d53148 | 117 | test_cmp_rev main renamed && |
aedcb7dc KN |
118 | git branch >output 2>error && |
119 | ! grep -e "broken\.\.\.ref" error && | |
d0f810f0 RS |
120 | ! grep -e "broken\.\.\.ref" output |
121 | ' | |
122 | ||
123 | test_expect_success 'push cannot create a badly named ref' ' | |
3c966c7b | 124 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && |
d0f810f0 | 125 | test_must_fail git push "file://$(pwd)" HEAD:refs/heads/broken...ref && |
aedcb7dc KN |
126 | git branch >output 2>error && |
127 | ! grep -e "broken\.\.\.ref" error && | |
d0f810f0 RS |
128 | ! grep -e "broken\.\.\.ref" output |
129 | ' | |
130 | ||
a926c4b9 | 131 | test_expect_failure 'push --mirror can delete badly named ref' ' |
d0f810f0 RS |
132 | top=$(pwd) && |
133 | git init src && | |
134 | git init dest && | |
135 | ||
136 | ( | |
137 | cd src && | |
138 | test_commit one | |
139 | ) && | |
140 | ( | |
141 | cd dest && | |
142 | test_commit two && | |
143 | git checkout --detach && | |
3c966c7b | 144 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION |
d0f810f0 RS |
145 | ) && |
146 | git -C src push --mirror "file://$top/dest" && | |
aedcb7dc KN |
147 | git -C dest branch >output 2>error && |
148 | ! grep -e "broken\.\.\.ref" error && | |
d0f810f0 RS |
149 | ! grep -e "broken\.\.\.ref" output |
150 | ' | |
151 | ||
152 | test_expect_success 'rev-parse skips symref pointing to broken name' ' | |
3c966c7b | 153 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && |
d0f810f0 | 154 | git branch shadow one && |
3c966c7b | 155 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
99123914 | 156 | test-tool ref-store main create-symref refs/tags/shadow refs/heads/broken...ref msg && |
e39ceeb4 | 157 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/tags/shadow" && |
d0f810f0 RS |
158 | git rev-parse --verify one >expect && |
159 | git rev-parse --verify shadow >actual 2>err && | |
160 | test_cmp expect actual && | |
6789275d | 161 | test_grep "ignoring dangling symref refs/tags/shadow" err |
d0f810f0 RS |
162 | ' |
163 | ||
b78ceced | 164 | test_expect_success 'for-each-ref emits warnings for broken names' ' |
3c966c7b HWN |
165 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
166 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && | |
23937116 | 167 | test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref && |
e39ceeb4 | 168 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" && |
23937116 | 169 | test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/main && |
e39ceeb4 | 170 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" && |
b78ceced MH |
171 | git for-each-ref >output 2>error && |
172 | ! grep -e "broken\.\.\.ref" output && | |
173 | ! grep -e "badname" output && | |
174 | ! grep -e "broken\.\.\.symref" output && | |
6789275d JH |
175 | test_grep "ignoring ref with broken name refs/heads/broken\.\.\.ref" error && |
176 | test_grep ! "ignoring broken ref refs/heads/badname" error && | |
177 | test_grep "ignoring ref with broken name refs/heads/broken\.\.\.symref" error | |
b78ceced MH |
178 | ' |
179 | ||
757552db | 180 | test_expect_success 'update-ref -d can delete broken name' ' |
3c966c7b HWN |
181 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
182 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && | |
757552db MH |
183 | git update-ref -d refs/heads/broken...ref >output 2>error && |
184 | test_must_be_empty output && | |
185 | test_must_be_empty error && | |
186 | git branch >output 2>error && | |
187 | ! grep -e "broken\.\.\.ref" error && | |
188 | ! grep -e "broken\.\.\.ref" output | |
189 | ' | |
190 | ||
191 | test_expect_success 'branch -d can delete broken name' ' | |
3c966c7b HWN |
192 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
193 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && | |
757552db | 194 | git branch -d broken...ref >output 2>error && |
6789275d | 195 | test_grep "Deleted branch broken...ref (was broken)" output && |
757552db MH |
196 | test_must_be_empty error && |
197 | git branch >output 2>error && | |
198 | ! grep -e "broken\.\.\.ref" error && | |
199 | ! grep -e "broken\.\.\.ref" output | |
200 | ' | |
201 | ||
202 | test_expect_success 'update-ref --no-deref -d can delete symref to broken name' ' | |
3c966c7b HWN |
203 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
204 | ||
205 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && | |
99123914 | 206 | test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg && |
e39ceeb4 | 207 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" && |
0497e6c6 | 208 | test_ref_exists refs/heads/badname && |
f86d8350 | 209 | git update-ref --no-deref -d refs/heads/badname >output 2>error && |
0497e6c6 | 210 | test_ref_missing refs/heads/badname && |
f86d8350 MH |
211 | test_must_be_empty output && |
212 | test_must_be_empty error | |
8159f4af RS |
213 | ' |
214 | ||
757552db | 215 | test_expect_success 'branch -d can delete symref to broken name' ' |
3c966c7b | 216 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
3c966c7b | 217 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && |
99123914 | 218 | test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg && |
e39ceeb4 | 219 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" && |
0497e6c6 | 220 | test_ref_exists refs/heads/badname && |
757552db | 221 | git branch -d badname >output 2>error && |
0497e6c6 | 222 | test_ref_missing refs/heads/badname && |
6789275d | 223 | test_grep "Deleted branch badname (was refs/heads/broken\.\.\.ref)" output && |
757552db MH |
224 | test_must_be_empty error |
225 | ' | |
226 | ||
227 | test_expect_success 'update-ref --no-deref -d can delete dangling symref to broken name' ' | |
99123914 | 228 | test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg && |
e39ceeb4 | 229 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" && |
0497e6c6 | 230 | test_ref_exists refs/heads/badname && |
757552db | 231 | git update-ref --no-deref -d refs/heads/badname >output 2>error && |
0497e6c6 | 232 | test_ref_missing refs/heads/badname && |
f86d8350 | 233 | test_must_be_empty output && |
757552db MH |
234 | test_must_be_empty error |
235 | ' | |
236 | ||
237 | test_expect_success 'branch -d can delete dangling symref to broken name' ' | |
99123914 | 238 | test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg && |
e39ceeb4 | 239 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" && |
0497e6c6 | 240 | test_ref_exists refs/heads/badname && |
757552db | 241 | git branch -d badname >output 2>error && |
0497e6c6 | 242 | test_ref_missing refs/heads/badname && |
6789275d | 243 | test_grep "Deleted branch badname (was refs/heads/broken\.\.\.ref)" output && |
757552db MH |
244 | test_must_be_empty error |
245 | ' | |
246 | ||
247 | test_expect_success 'update-ref -d can delete broken name through symref' ' | |
3c966c7b | 248 | test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION && |
3c966c7b | 249 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" && |
99123914 | 250 | test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg && |
e39ceeb4 | 251 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" && |
0497e6c6 | 252 | test_ref_exists refs/heads/broken...ref && |
757552db | 253 | git update-ref -d refs/heads/badname >output 2>error && |
0497e6c6 | 254 | test_ref_missing refs/heads/broken...ref && |
757552db MH |
255 | test_must_be_empty output && |
256 | test_must_be_empty error | |
257 | ' | |
258 | ||
259 | test_expect_success 'update-ref --no-deref -d can delete symref with broken name' ' | |
23937116 | 260 | test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/main && |
e39ceeb4 | 261 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" && |
0497e6c6 | 262 | test_ref_exists refs/heads/broken...symref && |
757552db | 263 | git update-ref --no-deref -d refs/heads/broken...symref >output 2>error && |
0497e6c6 | 264 | test_ref_missing refs/heads/broken...symref && |
757552db MH |
265 | test_must_be_empty output && |
266 | test_must_be_empty error | |
267 | ' | |
268 | ||
269 | test_expect_success 'branch -d can delete symref with broken name' ' | |
23937116 | 270 | test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/main && |
e39ceeb4 | 271 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" && |
0497e6c6 | 272 | test_ref_exists refs/heads/broken...symref && |
757552db | 273 | git branch -d broken...symref >output 2>error && |
0497e6c6 | 274 | test_ref_missing refs/heads/broken...symref && |
6789275d | 275 | test_grep "Deleted branch broken...symref (was refs/heads/main)" output && |
757552db MH |
276 | test_must_be_empty error |
277 | ' | |
278 | ||
279 | test_expect_success 'update-ref --no-deref -d can delete dangling symref with broken name' ' | |
23937116 | 280 | test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/idonotexist && |
e39ceeb4 | 281 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" && |
0497e6c6 | 282 | test_ref_exists refs/heads/broken...symref && |
757552db | 283 | git update-ref --no-deref -d refs/heads/broken...symref >output 2>error && |
0497e6c6 | 284 | test_ref_missing refs/heads/broken...symref && |
757552db MH |
285 | test_must_be_empty output && |
286 | test_must_be_empty error | |
287 | ' | |
288 | ||
289 | test_expect_success 'branch -d can delete dangling symref with broken name' ' | |
23937116 | 290 | test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/idonotexist && |
e39ceeb4 | 291 | test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" && |
0497e6c6 | 292 | test_ref_exists refs/heads/broken...symref && |
757552db | 293 | git branch -d broken...symref >output 2>error && |
0497e6c6 | 294 | test_ref_missing refs/heads/broken...symref && |
6789275d | 295 | test_grep "Deleted branch broken...symref (was refs/heads/idonotexist)" output && |
757552db | 296 | test_must_be_empty error |
d0f810f0 RS |
297 | ' |
298 | ||
299 | test_expect_success 'update-ref -d cannot delete non-ref in .git dir' ' | |
300 | echo precious >.git/my-private-file && | |
301 | echo precious >expect && | |
f86d8350 MH |
302 | test_must_fail git update-ref -d my-private-file >output 2>error && |
303 | test_must_be_empty output && | |
6789275d | 304 | test_grep -e "refusing to update ref with bad name" error && |
d0f810f0 RS |
305 | test_cmp expect .git/my-private-file |
306 | ' | |
307 | ||
308 | test_expect_success 'update-ref -d cannot delete absolute path' ' | |
309 | git branch -f extra && | |
310 | test_must_fail git update-ref -d "$(pwd)/.git/refs/heads/extra" && | |
311 | test_cmp_rev HEAD extra | |
312 | ' | |
313 | ||
8159f4af | 314 | test_expect_success 'update-ref --stdin fails create with bad ref name' ' |
06d53148 | 315 | echo "create ~a refs/heads/main" >stdin && |
8159f4af RS |
316 | test_must_fail git update-ref --stdin <stdin 2>err && |
317 | grep "fatal: invalid ref format: ~a" err | |
318 | ' | |
319 | ||
320 | test_expect_success 'update-ref --stdin fails update with bad ref name' ' | |
06d53148 | 321 | echo "update ~a refs/heads/main" >stdin && |
8159f4af RS |
322 | test_must_fail git update-ref --stdin <stdin 2>err && |
323 | grep "fatal: invalid ref format: ~a" err | |
324 | ' | |
325 | ||
326 | test_expect_success 'update-ref --stdin fails delete with bad ref name' ' | |
06d53148 | 327 | echo "delete ~a refs/heads/main" >stdin && |
8159f4af RS |
328 | test_must_fail git update-ref --stdin <stdin 2>err && |
329 | grep "fatal: invalid ref format: ~a" err | |
330 | ' | |
331 | ||
332 | test_expect_success 'update-ref --stdin -z fails create with bad ref name' ' | |
06d53148 | 333 | printf "%s\0" "create ~a " refs/heads/main >stdin && |
8159f4af RS |
334 | test_must_fail git update-ref -z --stdin <stdin 2>err && |
335 | grep "fatal: invalid ref format: ~a " err | |
336 | ' | |
337 | ||
338 | test_expect_success 'update-ref --stdin -z fails update with bad ref name' ' | |
06d53148 | 339 | printf "%s\0" "update ~a" refs/heads/main "" >stdin && |
8159f4af RS |
340 | test_must_fail git update-ref -z --stdin <stdin 2>err && |
341 | grep "fatal: invalid ref format: ~a" err | |
342 | ' | |
343 | ||
344 | test_expect_success 'update-ref --stdin -z fails delete with bad ref name' ' | |
06d53148 | 345 | printf "%s\0" "delete ~a" refs/heads/main >stdin && |
8159f4af RS |
346 | test_must_fail git update-ref -z --stdin <stdin 2>err && |
347 | grep "fatal: invalid ref format: ~a" err | |
348 | ' | |
349 | ||
a625b092 JH |
350 | test_expect_success 'branch rejects HEAD as a branch name' ' |
351 | test_must_fail git branch HEAD HEAD^ && | |
352 | test_must_fail git show-ref refs/heads/HEAD | |
353 | ' | |
354 | ||
355 | test_expect_success 'checkout -b rejects HEAD as a branch name' ' | |
356 | test_must_fail git checkout -B HEAD HEAD^ && | |
357 | test_must_fail git show-ref refs/heads/HEAD | |
358 | ' | |
359 | ||
360 | test_expect_success 'update-ref can operate on refs/heads/HEAD' ' | |
361 | git update-ref refs/heads/HEAD HEAD^ && | |
362 | git show-ref refs/heads/HEAD && | |
363 | git update-ref -d refs/heads/HEAD && | |
364 | test_must_fail git show-ref refs/heads/HEAD | |
365 | ' | |
366 | ||
367 | test_expect_success 'branch -d can remove refs/heads/HEAD' ' | |
368 | git update-ref refs/heads/HEAD HEAD^ && | |
369 | git branch -d HEAD && | |
370 | test_must_fail git show-ref refs/heads/HEAD | |
371 | ' | |
372 | ||
373 | test_expect_success 'branch -m can rename refs/heads/HEAD' ' | |
374 | git update-ref refs/heads/HEAD HEAD^ && | |
375 | git branch -m HEAD tail && | |
376 | test_must_fail git show-ref refs/heads/HEAD && | |
377 | git show-ref refs/heads/tail | |
378 | ' | |
379 | ||
380 | test_expect_success 'branch -d can remove refs/heads/-dash' ' | |
381 | git update-ref refs/heads/-dash HEAD^ && | |
382 | git branch -d -- -dash && | |
383 | test_must_fail git show-ref refs/heads/-dash | |
384 | ' | |
385 | ||
386 | test_expect_success 'branch -m can rename refs/heads/-dash' ' | |
387 | git update-ref refs/heads/-dash HEAD^ && | |
388 | git branch -m -- -dash dash && | |
389 | test_must_fail git show-ref refs/heads/-dash && | |
390 | git show-ref refs/heads/dash | |
391 | ' | |
392 | ||
8159f4af | 393 | test_done |