]>
Commit | Line | Data |
---|---|---|
446c6fae RJ |
1 | #!/bin/sh |
2 | # | |
3 | # | |
4 | ||
0cb0e143 | 5 | test_description='git mktag: tag object verify test' |
446c6fae RJ |
6 | |
7 | . ./test-lib.sh | |
8 | ||
9 | ########################################################### | |
10 | # check the tag.sig file, expecting verify_tag() to fail, | |
11 | # and checking that the error message matches the pattern | |
12 | # given in the expect.pat file. | |
13 | ||
14 | check_verify_failure () { | |
e9b20943 JH |
15 | expect="$2" |
16 | test_expect_success "$1" ' | |
30f882c1 ÆAB |
17 | test_must_fail env GIT_TEST_GETTEXT_POISON=false \ |
18 | git mktag <tag.sig 2>message && | |
525d4615 | 19 | grep "$expect" message |
e9b20943 | 20 | ' |
446c6fae RJ |
21 | } |
22 | ||
ca9a1ed9 ÆAB |
23 | test_expect_mktag_success() { |
24 | test_expect_success "$1" ' | |
25 | git hash-object -t tag -w --stdin <tag.sig >expected && | |
26 | git fsck --strict && | |
27 | ||
28 | git mktag <tag.sig >hash && | |
29 | test_cmp expected hash && | |
30 | test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" && | |
31 | git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) && | |
32 | git fsck --strict | |
33 | ' | |
34 | } | |
35 | ||
446c6fae RJ |
36 | ########################################################### |
37 | # first create a commit, so we have a valid object/type | |
38 | # for the tag. | |
4a45f7dd | 39 | test_expect_success 'setup' ' |
b5ca549c | 40 | test_commit A && |
692654dc ÆAB |
41 | test_commit B && |
42 | head=$(git rev-parse --verify HEAD) && | |
43 | head_parent=$(git rev-parse --verify HEAD~) && | |
44 | tree=$(git rev-parse HEAD^{tree}) && | |
45 | blob=$(git rev-parse --verify HEAD:B.t) | |
4a45f7dd | 46 | ' |
446c6fae | 47 | |
3f390a36 ÆAB |
48 | test_expect_success 'basic usage' ' |
49 | cat >tag.sig <<-EOF && | |
50 | object $head | |
51 | type commit | |
52 | tag mytag | |
53 | tagger T A Gger <tagger@example.com> 1206478233 -0500 | |
54 | EOF | |
55 | git mktag <tag.sig && | |
56 | git mktag --end-of-options <tag.sig && | |
57 | test_expect_code 129 git mktag --unknown-option | |
58 | ' | |
59 | ||
446c6fae RJ |
60 | ############################################################ |
61 | # 1. length check | |
62 | ||
63 | cat >tag.sig <<EOF | |
64 | too short for a tag | |
65 | EOF | |
66 | ||
e9b20943 | 67 | check_verify_failure 'Tag object length check' \ |
acf9de4c | 68 | '^error:.* missingObject:' |
446c6fae RJ |
69 | |
70 | ############################################################ | |
71 | # 2. object line label check | |
72 | ||
73 | cat >tag.sig <<EOF | |
0d35ccb5 | 74 | xxxxxx $head |
446c6fae RJ |
75 | type tag |
76 | tag mytag | |
e0aaf781 BC |
77 | tagger . <> 0 +0000 |
78 | ||
446c6fae RJ |
79 | EOF |
80 | ||
acf9de4c | 81 | check_verify_failure '"object" line label check' '^error:.* missingObject:' |
446c6fae RJ |
82 | |
83 | ############################################################ | |
0d35ccb5 | 84 | # 3. object line hash check |
446c6fae RJ |
85 | |
86 | cat >tag.sig <<EOF | |
0d35ccb5 | 87 | object $(echo $head | tr 0-9a-f z) |
446c6fae RJ |
88 | type tag |
89 | tag mytag | |
e0aaf781 BC |
90 | tagger . <> 0 +0000 |
91 | ||
446c6fae RJ |
92 | EOF |
93 | ||
acf9de4c | 94 | check_verify_failure '"object" line check' '^error:.* badObjectSha1:' |
446c6fae RJ |
95 | |
96 | ############################################################ | |
97 | # 4. type line label check | |
98 | ||
99 | cat >tag.sig <<EOF | |
acb49d1c | 100 | object $head |
446c6fae RJ |
101 | xxxx tag |
102 | tag mytag | |
e0aaf781 BC |
103 | tagger . <> 0 +0000 |
104 | ||
446c6fae RJ |
105 | EOF |
106 | ||
acf9de4c | 107 | check_verify_failure '"type" line label check' '^error:.* missingTypeEntry:' |
446c6fae RJ |
108 | |
109 | ############################################################ | |
110 | # 5. type line eol check | |
111 | ||
acb49d1c | 112 | echo "object $head" >tag.sig |
2aad957a | 113 | printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig |
446c6fae | 114 | |
acf9de4c | 115 | check_verify_failure '"type" line eol check' '^error:.* unterminatedHeader:' |
446c6fae RJ |
116 | |
117 | ############################################################ | |
118 | # 6. tag line label check #1 | |
119 | ||
120 | cat >tag.sig <<EOF | |
acb49d1c | 121 | object $head |
446c6fae RJ |
122 | type tag |
123 | xxx mytag | |
e0aaf781 BC |
124 | tagger . <> 0 +0000 |
125 | ||
446c6fae RJ |
126 | EOF |
127 | ||
e9b20943 | 128 | check_verify_failure '"tag" line label check #1' \ |
acf9de4c | 129 | '^error:.* missingTagEntry:' |
446c6fae RJ |
130 | |
131 | ############################################################ | |
132 | # 7. tag line label check #2 | |
133 | ||
134 | cat >tag.sig <<EOF | |
acb49d1c | 135 | object $head |
446c6fae RJ |
136 | type taggggggggggggggggggggggggggggggg |
137 | tag | |
138 | EOF | |
139 | ||
e9b20943 | 140 | check_verify_failure '"tag" line label check #2' \ |
acf9de4c | 141 | '^error:.* badType:' |
446c6fae RJ |
142 | |
143 | ############################################################ | |
144 | # 8. type line type-name length check | |
145 | ||
146 | cat >tag.sig <<EOF | |
acb49d1c | 147 | object $head |
446c6fae RJ |
148 | type taggggggggggggggggggggggggggggggg |
149 | tag mytag | |
150 | EOF | |
151 | ||
e9b20943 | 152 | check_verify_failure '"type" line type-name length check' \ |
acf9de4c | 153 | '^error:.* badType:' |
446c6fae RJ |
154 | |
155 | ############################################################ | |
30f882c1 | 156 | # 9. verify object (hash/type) check |
446c6fae RJ |
157 | |
158 | cat >tag.sig <<EOF | |
acb49d1c | 159 | object $(test_oid deadbeef) |
30f882c1 ÆAB |
160 | type tag |
161 | tag mytag | |
162 | tagger . <> 0 +0000 | |
163 | ||
164 | EOF | |
165 | ||
166 | check_verify_failure 'verify object (hash/type) check -- correct type, nonexisting object' \ | |
acf9de4c | 167 | '^fatal: could not read tagged object' |
30f882c1 ÆAB |
168 | |
169 | cat >tag.sig <<EOF | |
170 | object $head | |
446c6fae RJ |
171 | type tagggg |
172 | tag mytag | |
e0aaf781 BC |
173 | tagger . <> 0 +0000 |
174 | ||
446c6fae RJ |
175 | EOF |
176 | ||
30f882c1 | 177 | check_verify_failure 'verify object (hash/type) check -- made-up type, valid object' \ |
acf9de4c | 178 | '^error:.* badType:' |
30f882c1 ÆAB |
179 | |
180 | cat >tag.sig <<EOF | |
181 | object $(test_oid deadbeef) | |
182 | type tagggg | |
183 | tag mytag | |
184 | tagger . <> 0 +0000 | |
185 | ||
186 | EOF | |
187 | ||
188 | check_verify_failure 'verify object (hash/type) check -- made-up type, nonexisting object' \ | |
acf9de4c | 189 | '^error:.* badType:' |
446c6fae | 190 | |
30f882c1 ÆAB |
191 | cat >tag.sig <<EOF |
192 | object $head | |
193 | type tree | |
194 | tag mytag | |
195 | tagger . <> 0 +0000 | |
196 | ||
197 | EOF | |
198 | ||
692654dc | 199 | check_verify_failure 'verify object (hash/type) check -- mismatched type, valid object' \ |
acf9de4c | 200 | '^fatal: object.*tagged as.*tree.*but is.*commit' |
692654dc ÆAB |
201 | |
202 | ############################################################ | |
203 | # 9.5. verify object (hash/type) check -- replacement | |
204 | ||
205 | test_expect_success 'setup replacement of commit -> commit and tree -> blob' ' | |
206 | git replace $head_parent $head && | |
207 | git replace -f $tree $blob | |
208 | ' | |
209 | ||
210 | cat >tag.sig <<EOF | |
211 | object $head_parent | |
212 | type commit | |
213 | tag mytag | |
214 | tagger . <> 0 +0000 | |
215 | ||
216 | EOF | |
217 | ||
218 | test_expect_mktag_success 'tag to a commit replaced by another commit' | |
219 | ||
220 | cat >tag.sig <<EOF | |
221 | object $tree | |
222 | type tree | |
223 | tag mytag | |
224 | tagger . <> 0 +0000 | |
225 | ||
226 | EOF | |
227 | ||
30f882c1 | 228 | check_verify_failure 'verify object (hash/type) check -- mismatched type, valid object' \ |
acf9de4c | 229 | '^fatal: object.*tagged as.*tree.*but is.*blob' |
30f882c1 | 230 | |
446c6fae RJ |
231 | ############################################################ |
232 | # 10. verify tag-name check | |
233 | ||
234 | cat >tag.sig <<EOF | |
235 | object $head | |
236 | type commit | |
237 | tag my tag | |
e0aaf781 BC |
238 | tagger . <> 0 +0000 |
239 | ||
446c6fae RJ |
240 | EOF |
241 | ||
e9b20943 | 242 | check_verify_failure 'verify tag-name check' \ |
acf9de4c | 243 | '^error:.* badTagName:' |
446c6fae RJ |
244 | |
245 | ############################################################ | |
3dff5379 | 246 | # 11. tagger line label check #1 |
446c6fae RJ |
247 | |
248 | cat >tag.sig <<EOF | |
249 | object $head | |
250 | type commit | |
251 | tag mytag | |
e0aaf781 BC |
252 | |
253 | This is filler | |
446c6fae RJ |
254 | EOF |
255 | ||
e9b20943 | 256 | check_verify_failure '"tagger" line label check #1' \ |
acf9de4c | 257 | '^error:.* missingTaggerEntry:' |
446c6fae RJ |
258 | |
259 | ############################################################ | |
3dff5379 | 260 | # 12. tagger line label check #2 |
446c6fae RJ |
261 | |
262 | cat >tag.sig <<EOF | |
263 | object $head | |
264 | type commit | |
265 | tag mytag | |
266 | tagger | |
e0aaf781 BC |
267 | |
268 | This is filler | |
446c6fae RJ |
269 | EOF |
270 | ||
e9b20943 | 271 | check_verify_failure '"tagger" line label check #2' \ |
acf9de4c | 272 | '^error:.* missingTaggerEntry:' |
446c6fae RJ |
273 | |
274 | ############################################################ | |
acf9de4c | 275 | # 13. allow missing tag author name like fsck |
446c6fae RJ |
276 | |
277 | cat >tag.sig <<EOF | |
278 | object $head | |
279 | type commit | |
280 | tag mytag | |
e0aaf781 BC |
281 | tagger <> 0 +0000 |
282 | ||
283 | This is filler | |
284 | EOF | |
285 | ||
acf9de4c | 286 | test_expect_mktag_success 'allow missing tag author name' |
e0aaf781 BC |
287 | |
288 | ############################################################ | |
ba26ab99 | 289 | # 14. disallow missing tag author name |
e0aaf781 BC |
290 | |
291 | cat >tag.sig <<EOF | |
292 | object $head | |
293 | type commit | |
294 | tag mytag | |
295 | tagger T A Gger < | |
296 | > 0 +0000 | |
297 | ||
298 | EOF | |
299 | ||
ba26ab99 | 300 | check_verify_failure 'disallow malformed tagger' \ |
acf9de4c | 301 | '^error:.* badEmail:' |
e0aaf781 BC |
302 | |
303 | ############################################################ | |
304 | # 15. allow empty tag email | |
305 | ||
306 | cat >tag.sig <<EOF | |
307 | object $head | |
308 | type commit | |
309 | tag mytag | |
310 | tagger T A Gger <> 0 +0000 | |
311 | ||
312 | EOF | |
313 | ||
ca9a1ed9 | 314 | test_expect_mktag_success 'allow empty tag email' |
e0aaf781 BC |
315 | |
316 | ############################################################ | |
acf9de4c | 317 | # 16. allow spaces in tag email like fsck |
ba26ab99 BC |
318 | |
319 | cat >tag.sig <<EOF | |
320 | object $head | |
321 | type commit | |
322 | tag mytag | |
323 | tagger T A Gger <tag ger@example.com> 0 +0000 | |
324 | ||
325 | EOF | |
326 | ||
acf9de4c | 327 | test_expect_mktag_success 'allow spaces in tag email like fsck' |
ba26ab99 BC |
328 | |
329 | ############################################################ | |
330 | # 17. disallow missing tag timestamp | |
e0aaf781 | 331 | |
74f16b0c | 332 | tr '_' ' ' >tag.sig <<EOF |
e0aaf781 BC |
333 | object $head |
334 | type commit | |
335 | tag mytag | |
74f16b0c | 336 | tagger T A Gger <tagger@example.com>__ |
e0aaf781 BC |
337 | |
338 | EOF | |
339 | ||
ba26ab99 | 340 | check_verify_failure 'disallow missing tag timestamp' \ |
acf9de4c | 341 | '^error:.* badDate:' |
e0aaf781 BC |
342 | |
343 | ############################################################ | |
ba26ab99 | 344 | # 18. detect invalid tag timestamp1 |
e0aaf781 BC |
345 | |
346 | cat >tag.sig <<EOF | |
347 | object $head | |
348 | type commit | |
349 | tag mytag | |
350 | tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008 | |
351 | ||
352 | EOF | |
353 | ||
ba26ab99 | 354 | check_verify_failure 'detect invalid tag timestamp1' \ |
acf9de4c | 355 | '^error:.* badDate:' |
e0aaf781 BC |
356 | |
357 | ############################################################ | |
ba26ab99 BC |
358 | # 19. detect invalid tag timestamp2 |
359 | ||
360 | cat >tag.sig <<EOF | |
361 | object $head | |
362 | type commit | |
363 | tag mytag | |
364 | tagger T A Gger <tagger@example.com> 2008-03-31T12:20:15-0500 | |
365 | ||
366 | EOF | |
367 | ||
368 | check_verify_failure 'detect invalid tag timestamp2' \ | |
acf9de4c | 369 | '^error:.* badDate:' |
ba26ab99 BC |
370 | |
371 | ############################################################ | |
372 | # 20. detect invalid tag timezone1 | |
e0aaf781 BC |
373 | |
374 | cat >tag.sig <<EOF | |
375 | object $head | |
376 | type commit | |
377 | tag mytag | |
378 | tagger T A Gger <tagger@example.com> 1206478233 GMT | |
379 | ||
380 | EOF | |
381 | ||
ba26ab99 | 382 | check_verify_failure 'detect invalid tag timezone1' \ |
acf9de4c | 383 | '^error:.* badTimezone:' |
ba26ab99 BC |
384 | |
385 | ############################################################ | |
386 | # 21. detect invalid tag timezone2 | |
387 | ||
388 | cat >tag.sig <<EOF | |
389 | object $head | |
390 | type commit | |
391 | tag mytag | |
392 | tagger T A Gger <tagger@example.com> 1206478233 + 30 | |
393 | ||
394 | EOF | |
395 | ||
396 | check_verify_failure 'detect invalid tag timezone2' \ | |
acf9de4c | 397 | '^error:.* badTimezone:' |
ba26ab99 BC |
398 | |
399 | ############################################################ | |
acf9de4c | 400 | # 22. allow invalid tag timezone3 (the maximum is -1200/+1400) |
ba26ab99 BC |
401 | |
402 | cat >tag.sig <<EOF | |
403 | object $head | |
404 | type commit | |
405 | tag mytag | |
406 | tagger T A Gger <tagger@example.com> 1206478233 -1430 | |
407 | ||
408 | EOF | |
409 | ||
acf9de4c | 410 | test_expect_mktag_success 'allow invalid tag timezone' |
e0aaf781 BC |
411 | |
412 | ############################################################ | |
ba26ab99 | 413 | # 23. detect invalid header entry |
e0aaf781 BC |
414 | |
415 | cat >tag.sig <<EOF | |
416 | object $head | |
417 | type commit | |
418 | tag mytag | |
419 | tagger T A Gger <tagger@example.com> 1206478233 -0500 | |
420 | this line should not be here | |
421 | ||
422 | EOF | |
423 | ||
424 | check_verify_failure 'detect invalid header entry' \ | |
acf9de4c | 425 | '^error:.* extraHeaderEntry:' |
e0aaf781 | 426 | |
acfc0133 ÆAB |
427 | test_expect_success 'invalid header entry config & fsck' ' |
428 | test_must_fail git mktag <tag.sig && | |
429 | test_must_fail git -c fsck.extraHeaderEntry=error mktag <tag.sig && | |
430 | test_must_fail git -c fsck.extraHeaderEntry=warn mktag <tag.sig && | |
431 | git -c fsck.extraHeaderEntry=ignore mktag <tag.sig && | |
432 | git fsck && | |
433 | env GIT_TEST_GETTEXT_POISON=false \ | |
434 | git -c fsck.extraHeaderEntry=warn fsck 2>err && | |
435 | grep "warning .*extraHeaderEntry:" err && | |
436 | test_must_fail env GIT_TEST_GETTEXT_POISON=false \ | |
437 | git -c fsck.extraHeaderEntry=error 2>err fsck && | |
438 | grep "error .* extraHeaderEntry:" err | |
439 | ' | |
440 | ||
47c95e77 ÆAB |
441 | cat >tag.sig <<EOF |
442 | object $head | |
443 | type commit | |
444 | tag mytag | |
445 | tagger T A Gger <tagger@example.com> 1206478233 -0500 | |
446 | ||
447 | ||
448 | this line comes after an extra newline | |
449 | EOF | |
450 | ||
ca9a1ed9 | 451 | test_expect_mktag_success 'allow extra newlines at start of body' |
47c95e77 ÆAB |
452 | |
453 | cat >tag.sig <<EOF | |
454 | object $head | |
455 | type commit | |
456 | tag mytag | |
457 | tagger T A Gger <tagger@example.com> 1206478233 -0500 | |
458 | ||
459 | EOF | |
460 | ||
9a1a3a4d | 461 | test_expect_mktag_success 'allow a blank line before an empty body (1)' |
47c95e77 ÆAB |
462 | |
463 | cat >tag.sig <<EOF | |
464 | object $head | |
465 | type commit | |
466 | tag mytag | |
467 | tagger T A Gger <tagger@example.com> 1206478233 -0500 | |
468 | EOF | |
469 | ||
9a1a3a4d | 470 | test_expect_mktag_success 'allow no blank line before an empty body (2)' |
47c95e77 | 471 | |
e0aaf781 | 472 | ############################################################ |
ba26ab99 | 473 | # 24. create valid tag |
e0aaf781 BC |
474 | |
475 | cat >tag.sig <<EOF | |
476 | object $head | |
477 | type commit | |
478 | tag mytag | |
479 | tagger T A Gger <tagger@example.com> 1206478233 -0500 | |
446c6fae RJ |
480 | EOF |
481 | ||
ca9a1ed9 | 482 | test_expect_mktag_success 'create valid tag object' |
446c6fae RJ |
483 | |
484 | test_done |