(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'git mktag: tag object verify test' span_id:12))}
          spids: [10]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: check_verify_failure
      body: 
        (command.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 (Token id:Id.Lit_Chars val:'\n' span_id:55) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t( test_must_fail git mktag <tag.sig 2>message ) &&\n'
                    span_id: 56
                  ) (Token id:Id.Lit_Chars val:'\t\tgrep "$expect" message\n' span_id:57) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:58)
                )
              }
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:76))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:80) 
          (Token id:Id.Lit_Chars val:'\techo Hello >A &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\tgit update-index --add A &&\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "Initial commit" &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\thead=$(git rev-parse --verify HEAD)\n' span_id:84)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:97)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:100)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 105
          stdin_parts: [('too short for a tag\n')]
        )
      ]
    )
    (C {(check_verify_failure)} {(SQ (Token id:Id.Lit_Chars val:'Tag object length check' span_id:110))} 
      {(SQ (Token id:Id.Lit_Chars val:'^error: .*size wrong.*$' span_id:116))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:129)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:132)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 141
          stdin_parts: [
            ('xxxxxx 139e9b33986b1c2670fff52c5067603117b3e895\n')
            ('type tag\n')
            ('tag mytag\n')
            ('tagger . <> 0 +0000\n')
            ('\n')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'"object" line label check' span_id:146))} {(SQ (Token id:Id.Lit_Chars val:'^error: char0: .*"object "$' span_id:150))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:163)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:166)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 175
          stdin_parts: [
            ('object zz9e9b33986b1c2670fff52c5067603117b3e895\n')
            ('type tag\n')
            ('tag mytag\n')
            ('tagger . <> 0 +0000\n')
            ('\n')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'"object" line SHA1 check' span_id:180))} {(SQ (Token id:Id.Lit_Chars val:'^error: char7: .*SHA1 hash$' span_id:184))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:197)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:200)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 209
          stdin_parts: [
            ('object 779e9b33986b1c2670fff52c5067603117b3e895\n')
            ('xxxx tag\n')
            ('tag mytag\n')
            ('tagger . <> 0 +0000\n')
            ('\n')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} {(SQ (Token id:Id.Lit_Chars val:'"type" line label check' span_id:214))} 
      {(SQ (Token id:Id.Lit_Chars val:'^error: char47: .*"\\\\ntype "$' span_id:218))}
    )
    (command.Simple
      words: [{(echo)} {(DQ ('object 779e9b33986b1c2670fff52c5067603117b3e895'))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:235)
          fd: -1
          arg_word: {(tag.sig)}
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ ('type tagsssssssssssssssssssssssssssssss'))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_DGreat val:'>>' span_id:244)
          fd: -1
          arg_word: {(tag.sig)}
        )
      ]
    )
    (C {(check_verify_failure)} {(SQ (Token id:Id.Lit_Chars val:'"type" line eol check' span_id:251))} 
      {(SQ (Token id:Id.Lit_Chars val:'^error: char48: .*"\\\\n"$' span_id:255))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:268)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:271)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 280
          stdin_parts: [
            ('object 779e9b33986b1c2670fff52c5067603117b3e895\n')
            ('type tag\n')
            ('xxx mytag\n')
            ('tagger . <> 0 +0000\n')
            ('\n')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'"tag" line label check #1' span_id:285))} {(SQ (Token id:Id.Lit_Chars val:'^error: char57: no "tag " found$' span_id:291))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:304)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:307)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 314
          stdin_parts: [
            ('object 779e9b33986b1c2670fff52c5067603117b3e895\n')
            ('type taggggggggggggggggggggggggggggggg\n')
            ('tag\n')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'"tag" line label check #2' span_id:319))} {(SQ (Token id:Id.Lit_Chars val:'^error: char87: no "tag " found$' span_id:325))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:338)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:341)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 348
          stdin_parts: [
            ('object 779e9b33986b1c2670fff52c5067603117b3e895\n')
            ('type taggggggggggggggggggggggggggggggg\n')
            ('tag mytag\n')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'"type" line type-name length check' span_id:353))} {(SQ (Token id:Id.Lit_Chars val:'^error: char53: type too long$' span_id:359))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:372)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:375)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 384
          stdin_parts: [
            ('object 779e9b33986b1c2670fff52c5067603117b3e895\n')
            ('type tagggg\n')
            ('tag mytag\n')
            ('tagger . <> 0 +0000\n')
            ('\n')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'verify object (SHA1/type) check' span_id:389))} {(SQ (Token id:Id.Lit_Chars val:'^error: char7: could not verify object.*$' span_id:395))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:408)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:411)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} {(SQ (Token id:Id.Lit_Chars val:'verify tag-name check' span_id:427))} 
      {(SQ (Token id:Id.Lit_Chars val:'^error: char67: could not verify tag name$' span_id:433))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:446)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:449)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'"tagger" line label check #1' span_id:465))} {(SQ (Token id:Id.Lit_Chars val:'^error: char70: could not find "tagger "$' span_id:471))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:484)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:487)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'"tagger" line label check #2' span_id:504))} {(SQ (Token id:Id.Lit_Chars val:'^error: char70: could not find "tagger "$' span_id:510))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:523)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:526)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'disallow missing tag author name' span_id:543))} {(SQ (Token id:Id.Lit_Chars val:'^error: char77: missing tagger name$' span_id:549))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:562)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:565)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'disallow malformed tagger' span_id:582))} {(SQ (Token id:Id.Lit_Chars val:'^error: char77: malformed tagger field$' span_id:588))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:601)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:604)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'allow empty tag email' span_id:622))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git mktag <tag.sig >.git/refs/tags/mytag 2>message'
            span_id: 628
          )
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:641)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:644)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'disallow spaces in tag email' span_id:660))} {(SQ (Token id:Id.Lit_Chars val:'^error: char77: malformed tagger field$' span_id:666))}
    )
    (command.Simple
      words: [
        {(tr)}
        {(SQ (Token id:Id.Lit_Chars val:_ span_id:680))}
        {(SQ (Token id:Id.Lit_Chars val:' ' span_id:684))}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:687)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:690)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'disallow missing tag timestamp' span_id:706))} {(SQ (Token id:Id.Lit_Chars val:'^error: char107: missing tag timestamp$' span_id:712))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:725)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:728)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'detect invalid tag timestamp1' span_id:744))} {(SQ (Token id:Id.Lit_Chars val:'^error: char107: missing tag timestamp$' span_id:750))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:763)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:766)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'detect invalid tag timestamp2' span_id:782))} {(SQ (Token id:Id.Lit_Chars val:'^error: char111: malformed tag timestamp$' span_id:788))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:801)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:804)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'detect invalid tag timezone1' span_id:820))} {(SQ (Token id:Id.Lit_Chars val:'^error: char118: malformed tag timezone$' span_id:826))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:839)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:842)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'detect invalid tag timezone2' span_id:858))} {(SQ (Token id:Id.Lit_Chars val:'^error: char118: malformed tag timezone$' span_id:864))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:877)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:880)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'detect invalid tag timezone3' span_id:896))} {(SQ (Token id:Id.Lit_Chars val:'^error: char118: malformed tag timezone$' span_id:902))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:915)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:918)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(check_verify_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'detect invalid header entry' span_id:935))} {(SQ (Token id:Id.Lit_Chars val:'^error: char124: trailing garbage in tag header$' span_id:941))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:954)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:957)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create valid tag' span_id:975))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git mktag <tag.sig >.git/refs/tags/mytag 2>message'
            span_id: 981
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check mytag' span_id:997))} 
      {(SQ (Token id:Id.Lit_Chars val:'git tag -l | grep mytag' span_id:1003))}
    )
    (C {(test_done)})
  ]
)