(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ <'git mktag: tag object verify test'>)} spids: [10] ) ] ) (C {<.>} {<'./test-lib.sh'>}) (command.ShFunction name: check_verify_failure body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expect) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [42] ) ] ) (C {<test_expect_success>} {(DQ ($ Id.VSub_Number '$1'))} { (SQ <'\n'> <'\t\t( test_must_fail git mktag <tag.sig 2>message ) &&\n'> <'\t\tgrep "$expect" message\n'> <'\t'> ) } ) ] ) ) (C {<test_expect_success>} {(SQ <setup>)} { (SQ <'\n'> <'\techo Hello >A &&\n'> <'\tgit update-index --add A &&\n'> <'\tgit commit -m "Initial commit" &&\n'> <'\thead=$(git rev-parse --verify HEAD)\n'> ) } ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 105 stdin_parts: [<'too short for a tag\n'>] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'Tag object length check'>)} {(SQ <'^error: .*size wrong.*$'>)}) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 141 stdin_parts: [ <'xxxxxx 139e9b33986b1c2670fff52c5067603117b3e895\n'> <'type tag\n'> <'tag mytag\n'> <'tagger . <> 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"object" line label check'>)} {(SQ <'^error: char0: .*"object "$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 175 stdin_parts: [ <'object zz9e9b33986b1c2670fff52c5067603117b3e895\n'> <'type tag\n'> <'tag mytag\n'> <'tagger . <> 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"object" line SHA1 check'>)} {(SQ <'^error: char7: .*SHA1 hash$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 209 stdin_parts: [ <'object 779e9b33986b1c2670fff52c5067603117b3e895\n'> <'xxxx tag\n'> <'tag mytag\n'> <'tagger . <> 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"type" line label check'>)} {(SQ <'^error: char47: .*"\\\\ntype "$'>)} ) (command.Simple words: [{<echo>} {(DQ <'object 779e9b33986b1c2670fff52c5067603117b3e895'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>})] do_fork: T ) (command.Simple words: [{<printf>} {(DQ <'type tagsssssssssssssssssssssssssssssss'>)}] redirects: [(redir op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>})] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"type" line eol check'>)} {(SQ <'^error: char48: .*"\\\\n"$'>)}) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 280 stdin_parts: [ <'object 779e9b33986b1c2670fff52c5067603117b3e895\n'> <'type tag\n'> <'xxx mytag\n'> <'tagger . <> 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"tag" line label check #1'>)} {(SQ <'^error: char57: no "tag " found$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 314 stdin_parts: [ <'object 779e9b33986b1c2670fff52c5067603117b3e895\n'> <'type taggggggggggggggggggggggggggggggg\n'> <'tag\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"tag" line label check #2'>)} {(SQ <'^error: char87: no "tag " found$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 348 stdin_parts: [ <'object 779e9b33986b1c2670fff52c5067603117b3e895\n'> <'type taggggggggggggggggggggggggggggggg\n'> <'tag mytag\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"type" line type-name length check'>)} {(SQ <'^error: char53: type too long$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 384 stdin_parts: [ <'object 779e9b33986b1c2670fff52c5067603117b3e895\n'> <'type tagggg\n'> <'tag mytag\n'> <'tagger . <> 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'verify object (SHA1/type) check'>)} {(SQ <'^error: char7: could not verify object.*$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 422 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag my\ttag\n'> <'tagger . <> 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'verify tag-name check'>)} {(SQ <'^error: char67: could not verify tag name$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 460 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'\n'> <'This is filler\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"tagger" line label check #1'>)} {(SQ <'^error: char70: could not find "tagger "$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 499 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger\n'> <'\n'> <'This is filler\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'"tagger" line label check #2'>)} {(SQ <'^error: char70: could not find "tagger "$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 538 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger <> 0 +0000\n'> <'\n'> <'This is filler\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'disallow missing tag author name'>)} {(SQ <'^error: char77: missing tagger name$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 577 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <\n'> <' > 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'disallow malformed tagger'>)} {(SQ <'^error: char77: malformed tagger field$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 615 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <> 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'allow empty tag email'>)} {(SQ <'git mktag <tag.sig >.git/refs/tags/mytag 2>message'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 655 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tag ger@example.com> 0 +0000\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'disallow spaces in tag email'>)} {(SQ <'^error: char77: malformed tagger field$'>)} ) (command.Simple words: [{<tr>} {(SQ <_>)} {(SQ <' '>)}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 701 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tagger@example.com>__\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'disallow missing tag timestamp'>)} {(SQ <'^error: char107: missing tag timestamp$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 739 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'detect invalid tag timestamp1'>)} {(SQ <'^error: char107: missing tag timestamp$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 777 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tagger@example.com> 2008-03-31T12:20:15-0500\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'detect invalid tag timestamp2'>)} {(SQ <'^error: char111: malformed tag timestamp$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 815 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tagger@example.com> 1206478233 GMT\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'detect invalid tag timezone1'>)} {(SQ <'^error: char118: malformed tag timezone$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 853 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tagger@example.com> 1206478233 + 30\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'detect invalid tag timezone2'>)} {(SQ <'^error: char118: malformed tag timezone$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 891 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tagger@example.com> 1206478233 -1430\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'detect invalid tag timezone3'>)} {(SQ <'^error: char118: malformed tag timezone$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 930 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tagger@example.com> 1206478233 -0500\n'> <'this line should not be here\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<check_verify_failure>} {(SQ <'detect invalid header entry'>)} {(SQ <'^error: char124: trailing garbage in tag header$'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag.sig>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 968 stdin_parts: [ <'object '> ($ Id.VSub_DollarName '$head') <'\n'> <'type commit\n'> <'tag mytag\n'> <'tagger T A Gger <tagger@example.com> 1206478233 -0500\n'> <'\n'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'create valid tag'>)} {(SQ <'git mktag <tag.sig >.git/refs/tags/mytag 2>message'>)} ) (C {<test_expect_success>} {(SQ <'check mytag'>)} {(SQ <'git tag -l | grep mytag'>)}) (C {<test_done>}) ] )