|  | #!/bin/sh | 
|  | # | 
|  | # | 
|  |  | 
|  | test_description='git mktag: tag object verify test' | 
|  |  | 
|  | . ./test-lib.sh | 
|  |  | 
|  | ########################################################### | 
|  | # check the tag.sig file, expecting verify_tag() to fail, | 
|  | # and checking that the error message matches the pattern | 
|  | # given in the expect.pat file. | 
|  |  | 
|  | check_verify_failure () { | 
|  | expect="$2" | 
|  | test_expect_success "$1" ' | 
|  | ( test_must_fail git mktag <tag.sig 2>message ) && | 
|  | grep "$expect" message | 
|  | ' | 
|  | } | 
|  |  | 
|  | ########################################################### | 
|  | # first create a commit, so we have a valid object/type | 
|  | # for the tag. | 
|  | test_expect_success 'setup' ' | 
|  | echo Hello >A && | 
|  | git update-index --add A && | 
|  | git commit -m "Initial commit" && | 
|  | head=$(git rev-parse --verify HEAD) | 
|  | ' | 
|  |  | 
|  | ############################################################ | 
|  | #  1. length check | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | too short for a tag | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'Tag object length check' \ | 
|  | '^error: .*size wrong.*$' | 
|  |  | 
|  | ############################################################ | 
|  | #  2. object line label check | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | xxxxxx 139e9b33986b1c2670fff52c5067603117b3e895 | 
|  | type tag | 
|  | tag mytag | 
|  | tagger . <> 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure '"object" line label check' '^error: char0: .*"object "$' | 
|  |  | 
|  | ############################################################ | 
|  | #  3. object line SHA1 check | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object zz9e9b33986b1c2670fff52c5067603117b3e895 | 
|  | type tag | 
|  | tag mytag | 
|  | tagger . <> 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure '"object" line SHA1 check' '^error: char7: .*SHA1 hash$' | 
|  |  | 
|  | ############################################################ | 
|  | #  4. type line label check | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object 779e9b33986b1c2670fff52c5067603117b3e895 | 
|  | xxxx tag | 
|  | tag mytag | 
|  | tagger . <> 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure '"type" line label check' '^error: char47: .*"\\ntype "$' | 
|  |  | 
|  | ############################################################ | 
|  | #  5. type line eol check | 
|  |  | 
|  | echo "object 779e9b33986b1c2670fff52c5067603117b3e895" >tag.sig | 
|  | printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig | 
|  |  | 
|  | check_verify_failure '"type" line eol check' '^error: char48: .*"\\n"$' | 
|  |  | 
|  | ############################################################ | 
|  | #  6. tag line label check #1 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object 779e9b33986b1c2670fff52c5067603117b3e895 | 
|  | type tag | 
|  | xxx mytag | 
|  | tagger . <> 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure '"tag" line label check #1' \ | 
|  | '^error: char57: no "tag " found$' | 
|  |  | 
|  | ############################################################ | 
|  | #  7. tag line label check #2 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object 779e9b33986b1c2670fff52c5067603117b3e895 | 
|  | type taggggggggggggggggggggggggggggggg | 
|  | tag | 
|  | EOF | 
|  |  | 
|  | check_verify_failure '"tag" line label check #2' \ | 
|  | '^error: char87: no "tag " found$' | 
|  |  | 
|  | ############################################################ | 
|  | #  8. type line type-name length check | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object 779e9b33986b1c2670fff52c5067603117b3e895 | 
|  | type taggggggggggggggggggggggggggggggg | 
|  | tag mytag | 
|  | EOF | 
|  |  | 
|  | check_verify_failure '"type" line type-name length check' \ | 
|  | '^error: char53: type too long$' | 
|  |  | 
|  | ############################################################ | 
|  | #  9. verify object (SHA1/type) check | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object 779e9b33986b1c2670fff52c5067603117b3e895 | 
|  | type tagggg | 
|  | tag mytag | 
|  | tagger . <> 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'verify object (SHA1/type) check' \ | 
|  | '^error: char7: could not verify object.*$' | 
|  |  | 
|  | ############################################################ | 
|  | # 10. verify tag-name check | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag my	tag | 
|  | tagger . <> 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'verify tag-name check' \ | 
|  | '^error: char67: could not verify tag name$' | 
|  |  | 
|  | ############################################################ | 
|  | # 11. tagger line label check #1 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  |  | 
|  | This is filler | 
|  | EOF | 
|  |  | 
|  | check_verify_failure '"tagger" line label check #1' \ | 
|  | '^error: char70: could not find "tagger "$' | 
|  |  | 
|  | ############################################################ | 
|  | # 12. tagger line label check #2 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger | 
|  |  | 
|  | This is filler | 
|  | EOF | 
|  |  | 
|  | check_verify_failure '"tagger" line label check #2' \ | 
|  | '^error: char70: could not find "tagger "$' | 
|  |  | 
|  | ############################################################ | 
|  | # 13. disallow missing tag author name | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger  <> 0 +0000 | 
|  |  | 
|  | This is filler | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'disallow missing tag author name' \ | 
|  | '^error: char77: missing tagger name$' | 
|  |  | 
|  | ############################################################ | 
|  | # 14. disallow missing tag author name | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger < | 
|  | > 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'disallow malformed tagger' \ | 
|  | '^error: char77: malformed tagger field$' | 
|  |  | 
|  | ############################################################ | 
|  | # 15. allow empty tag email | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <> 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | test_expect_success \ | 
|  | 'allow empty tag email' \ | 
|  | 'git mktag <tag.sig >.git/refs/tags/mytag 2>message' | 
|  |  | 
|  | ############################################################ | 
|  | # 16. disallow spaces in tag email | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tag ger@example.com> 0 +0000 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'disallow spaces in tag email' \ | 
|  | '^error: char77: malformed tagger field$' | 
|  |  | 
|  | ############################################################ | 
|  | # 17. disallow missing tag timestamp | 
|  |  | 
|  | tr '_' ' ' >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tagger@example.com>__ | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'disallow missing tag timestamp' \ | 
|  | '^error: char107: missing tag timestamp$' | 
|  |  | 
|  | ############################################################ | 
|  | # 18. detect invalid tag timestamp1 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'detect invalid tag timestamp1' \ | 
|  | '^error: char107: missing tag timestamp$' | 
|  |  | 
|  | ############################################################ | 
|  | # 19. detect invalid tag timestamp2 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tagger@example.com> 2008-03-31T12:20:15-0500 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'detect invalid tag timestamp2' \ | 
|  | '^error: char111: malformed tag timestamp$' | 
|  |  | 
|  | ############################################################ | 
|  | # 20. detect invalid tag timezone1 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tagger@example.com> 1206478233 GMT | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'detect invalid tag timezone1' \ | 
|  | '^error: char118: malformed tag timezone$' | 
|  |  | 
|  | ############################################################ | 
|  | # 21. detect invalid tag timezone2 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tagger@example.com> 1206478233 +  30 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'detect invalid tag timezone2' \ | 
|  | '^error: char118: malformed tag timezone$' | 
|  |  | 
|  | ############################################################ | 
|  | # 22. detect invalid tag timezone3 | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tagger@example.com> 1206478233 -1430 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'detect invalid tag timezone3' \ | 
|  | '^error: char118: malformed tag timezone$' | 
|  |  | 
|  | ############################################################ | 
|  | # 23. detect invalid header entry | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tagger@example.com> 1206478233 -0500 | 
|  | this line should not be here | 
|  |  | 
|  | EOF | 
|  |  | 
|  | check_verify_failure 'detect invalid header entry' \ | 
|  | '^error: char124: trailing garbage in tag header$' | 
|  |  | 
|  | ############################################################ | 
|  | # 24. create valid tag | 
|  |  | 
|  | cat >tag.sig <<EOF | 
|  | object $head | 
|  | type commit | 
|  | tag mytag | 
|  | tagger T A Gger <tagger@example.com> 1206478233 -0500 | 
|  |  | 
|  | EOF | 
|  |  | 
|  | test_expect_success \ | 
|  | 'create valid tag' \ | 
|  | 'git mktag <tag.sig >.git/refs/tags/mytag 2>message' | 
|  |  | 
|  | ############################################################ | 
|  | # 25. check mytag | 
|  |  | 
|  | test_expect_success \ | 
|  | 'check mytag' \ | 
|  | 'git tag -l | grep mytag' | 
|  |  | 
|  |  | 
|  | test_done |