5 test_description
='git mktag: tag object verify test'
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.
14 check_verify_failure
() {
15 test_expect_success
"$1" "
16 test_must_fail git mktag <tag.sig 2>message &&
18 if test '$3' != '--no-strict'
20 test_must_fail git mktag --no-strict <tag.sig 2>message.no-strict &&
21 grep '$2' message.no-strict
26 test_expect_mktag_success
() {
27 test_expect_success
"$1" '
28 git hash-object -t tag -w --stdin <tag.sig >expected &&
31 git mktag <tag.sig >hash &&
32 test_cmp expected hash &&
33 test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
34 git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
39 ###########################################################
40 # first create a commit, so we have a valid object/type
42 test_expect_success
'setup' '
45 head=$(git rev-parse --verify HEAD) &&
46 head_parent=$(git rev-parse --verify HEAD~) &&
47 tree=$(git rev-parse HEAD^{tree}) &&
48 blob=$(git rev-parse --verify HEAD:B.t)
51 test_expect_success
'basic usage' '
52 cat >tag.sig <<-EOF &&
56 tagger T A Gger <tagger@example.com> 1206478233 -0500
59 git mktag --end-of-options <tag.sig &&
60 test_expect_code 129 git mktag --unknown-option
63 ############################################################
70 check_verify_failure
'Tag object length check' \
71 '^error:.* missingObject:' 'strict'
73 ############################################################
74 # 2. object line label check
84 check_verify_failure
'"object" line label check' '^error:.* missingObject:'
86 ############################################################
87 # 3. object line hash check
90 object $(echo $head | tr 0-9a-f z)
97 check_verify_failure
'"object" line check' '^error:.* badObjectSha1:'
99 ############################################################
100 # 4. type line label check
110 check_verify_failure
'"type" line label check' '^error:.* missingTypeEntry:'
112 ############################################################
113 # 5. type line eol check
115 echo "object $head" >tag.sig
116 printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
118 check_verify_failure
'"type" line eol check' '^error:.* unterminatedHeader:'
120 ############################################################
121 # 6. tag line label check #1
131 check_verify_failure
'"tag" line label check #1' \
132 '^error:.* missingTagEntry:'
134 ############################################################
135 # 7. tag line label check #2
139 type taggggggggggggggggggggggggggggggg
143 check_verify_failure
'"tag" line label check #2' \
146 ############################################################
147 # 8. type line type-name length check
151 type taggggggggggggggggggggggggggggggg
155 check_verify_failure
'"type" line type-name length check' \
158 ############################################################
159 # 9. verify object (hash/type) check
162 object $(test_oid deadbeef)
169 check_verify_failure
'verify object (hash/type) check -- correct type, nonexisting object' \
170 '^fatal: could not read tagged object'
180 check_verify_failure
'verify object (hash/type) check -- made-up type, valid object' \
184 object $(test_oid deadbeef)
191 check_verify_failure
'verify object (hash/type) check -- made-up type, nonexisting object' \
202 check_verify_failure
'verify object (hash/type) check -- mismatched type, valid object' \
203 '^fatal: object.*tagged as.*tree.*but is.*commit'
205 ############################################################
206 # 9.5. verify object (hash/type) check -- replacement
208 test_expect_success
'setup replacement of commit -> commit and tree -> blob' '
209 git replace $head_parent $head &&
210 git replace -f $tree $blob
221 test_expect_mktag_success
'tag to a commit replaced by another commit'
231 check_verify_failure
'verify object (hash/type) check -- mismatched type, valid object' \
232 '^fatal: object.*tagged as.*tree.*but is.*blob'
234 ############################################################
235 # 10. verify tag-name check
245 check_verify_failure
'verify tag-name check' \
246 '^error:.* badTagName:' '--no-strict'
248 ############################################################
249 # 11. tagger line label check #1
259 check_verify_failure
'"tagger" line label check #1' \
260 '^error:.* missingTaggerEntry:' '--no-strict'
262 ############################################################
263 # 12. tagger line label check #2
274 check_verify_failure
'"tagger" line label check #2' \
275 '^error:.* missingTaggerEntry:' '--no-strict'
277 ############################################################
278 # 13. allow missing tag author name like fsck
289 test_expect_mktag_success
'allow missing tag author name'
291 ############################################################
292 # 14. disallow missing tag author name
303 check_verify_failure
'disallow malformed tagger' \
304 '^error:.* badEmail:' '--no-strict'
306 ############################################################
307 # 15. allow empty tag email
313 tagger T A Gger <> 0 +0000
317 test_expect_mktag_success
'allow empty tag email'
319 ############################################################
320 # 16. allow spaces in tag email like fsck
326 tagger T A Gger <tag ger@example.com> 0 +0000
330 test_expect_mktag_success
'allow spaces in tag email like fsck'
332 ############################################################
333 # 17. disallow missing tag timestamp
335 tr '_' ' ' >tag.sig
<<EOF
339 tagger T A Gger <tagger@example.com>__
343 check_verify_failure
'disallow missing tag timestamp' \
346 ############################################################
347 # 18. detect invalid tag timestamp1
353 tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008
357 check_verify_failure
'detect invalid tag timestamp1' \
360 ############################################################
361 # 19. detect invalid tag timestamp2
367 tagger T A Gger <tagger@example.com> 2008-03-31T12:20:15-0500
371 check_verify_failure
'detect invalid tag timestamp2' \
374 ############################################################
375 # 20. detect invalid tag timezone1
381 tagger T A Gger <tagger@example.com> 1206478233 GMT
385 check_verify_failure
'detect invalid tag timezone1' \
386 '^error:.* badTimezone:'
388 ############################################################
389 # 21. detect invalid tag timezone2
395 tagger T A Gger <tagger@example.com> 1206478233 + 30
399 check_verify_failure
'detect invalid tag timezone2' \
400 '^error:.* badTimezone:'
402 ############################################################
403 # 22. allow invalid tag timezone3 (the maximum is -1200/+1400)
409 tagger T A Gger <tagger@example.com> 1206478233 -1430
413 test_expect_mktag_success
'allow invalid tag timezone'
415 ############################################################
416 # 23. detect invalid header entry
422 tagger T A Gger <tagger@example.com> 1206478233 -0500
423 this line should not be here
427 check_verify_failure
'detect invalid header entry' \
428 '^error:.* extraHeaderEntry:' '--no-strict'
430 test_expect_success
'invalid header entry config & fsck' '
431 test_must_fail git mktag <tag.sig &&
432 git mktag --no-strict <tag.sig &&
434 test_must_fail git -c fsck.extraHeaderEntry=error mktag <tag.sig &&
435 test_must_fail git -c fsck.extraHeaderEntry=error mktag --no-strict <tag.sig &&
437 test_must_fail git -c fsck.extraHeaderEntry=warn mktag <tag.sig &&
438 git -c fsck.extraHeaderEntry=warn mktag --no-strict <tag.sig &&
440 git -c fsck.extraHeaderEntry=ignore mktag <tag.sig &&
441 git -c fsck.extraHeaderEntry=ignore mktag --no-strict <tag.sig &&
444 git -c fsck.extraHeaderEntry=warn fsck 2>err &&
445 grep "warning .*extraHeaderEntry:" err &&
446 test_must_fail git -c fsck.extraHeaderEntry=error 2>err fsck &&
447 grep "error .* extraHeaderEntry:" err
454 tagger T A Gger <tagger@example.com> 1206478233 -0500
457 this line comes after an extra newline
460 test_expect_mktag_success
'allow extra newlines at start of body'
466 tagger T A Gger <tagger@example.com> 1206478233 -0500
470 test_expect_mktag_success
'allow a blank line before an empty body (1)'
476 tagger T A Gger <tagger@example.com> 1206478233 -0500
479 test_expect_mktag_success
'allow no blank line before an empty body (2)'
481 ############################################################
482 # 24. create valid tag
488 tagger T A Gger <tagger@example.com> 1206478233 -0500
491 test_expect_mktag_success
'create valid tag object'