(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:'for-each-ref test' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-gpg.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:datestamp)
          op: assign_op.Equal
          rhs: {(1151968723)}
          spids: [34]
        )
      ]
    )
    (command.ShFunction
      name: setdate_and_increment
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_DATE)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$datestamp') (' +0200'))}
                  spids: [45]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:datestamp)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:53)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {(DQ ($ Id.VSub_DollarName '$datestamp'))} 
                                {(Id.Lit_Other '+')} {(1)}
                              )
                            ]
                          )
                      )
                    }
                  spids: [52]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GIT_AUTHOR_DATE)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$datestamp') (' +0200'))}
                  spids: [66]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:datestamp)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:74)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {(DQ ($ Id.VSub_DollarName '$datestamp'))} 
                                {(Id.Lit_Other '+')} {(1)}
                              )
                            ]
                          )
                      )
                    }
                  spids: [73]
                )
              ]
            )
            (C {(export)} {(GIT_COMMITTER_DATE)} {(GIT_AUTHOR_DATE)})
          ]
        )
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\tsetdate_and_increment &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\techo "Using $datestamp" > one &&\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit commit -m "Initial" &&\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\tsetdate_and_increment &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tgit tag -a -m "Tagging at $datestamp" testtag &&\n' span_id:107) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/remotes/origin/master master &&\n'
            span_id: 108
          ) (Token id:Id.Lit_Chars val:'\tgit remote add origin nowhere &&\n' span_id:109) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config branch.master.remote origin &&\n'
            span_id: 110
          ) (Token id:Id.Lit_Chars val:'\tgit config branch.master.merge refs/heads/master &&\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\tgit remote add myfork elsewhere &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\tgit config remote.pushdefault myfork &&\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\tgit config push.default current\n' span_id:114)
        )
      }
    )
    (command.ShFunction
      name: test_atom
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{(head)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ref)
                          op: assign_op.Equal
                          rhs: {(refs/heads/master)}
                          spids: [137]
                        )
                      ]
                    )
                  ]
                  spids: [134 135 140 -1]
                )
                (case_arm
                  pat_list: [{(tag)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ref)
                          op: assign_op.Equal
                          rhs: {(refs/tags/testtag)}
                          spids: [146]
                        )
                      ]
                    )
                  ]
                  spids: [143 144 149 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ref)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [155]
                        )
                      ]
                    )
                  ]
                  spids: [152 153 158 -1]
                )
              ]
            )
            (command.Simple
              words: [
                {(printf)}
                {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:167))}
                {(DQ ($ Id.VSub_Number '$3'))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:174)
                  fd: -1
                  arg_word: {(expected)}
                )
              ]
            )
            (C 
              {(test_expect_) 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:4 span_id:180)
                  suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(success)})
                )
              } {($ Id.VSub_DollarName '$PREREQ')} 
              {(DQ ('basic atom: ') ($ Id.VSub_Number '$1') (' ') ($ Id.VSub_Number '$2'))} 
              {
                (DQ ('\n') ("\t\tgit for-each-ref --format='%(") ($ Id.VSub_Number '$2') (")' ") 
                  ($ Id.VSub_DollarName '$ref') (' >actual &&\n') ('\t\tsanitize_pgp <actual >actual.clean &&\n') 
                  ('\t\ttest_cmp expected actual.clean\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (C {(test_atom)} {(head)} {(refname)} {(refs/heads/master)})
    (C {(test_atom)} {(head)} {(refname) (Id.Lit_Other ':') (short)} {(master)})
    (C {(test_atom)} {(head)} {(refname) (Id.Lit_Other ':') (Id.Lit_VarLike 'strip=') (1)} 
      {(heads/master)}
    )
    (C {(test_atom)} {(head)} {(refname) (Id.Lit_Other ':') (Id.Lit_VarLike 'strip=') (2)} {(master)})
    (C {(test_atom)} {(head)} {(upstream)} {(refs/remotes/origin/master)})
    (C {(test_atom)} {(head)} {(upstream) (Id.Lit_Other ':') (short)} {(origin/master)})
    (C {(test_atom)} {(head)} {(push)} {(refs/remotes/myfork/master)})
    (C {(test_atom)} {(head)} {(push) (Id.Lit_Other ':') (short)} {(myfork/master)})
    (C {(test_atom)} {(head)} {(objecttype)} {(commit)})
    (C {(test_atom)} {(head)} {(objectsize)} {(171)})
    (C {(test_atom)} {(head)} {(objectname)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:307)
          command_list: 
            (command.CommandList
              children: [(C {(git)} {(rev-parse)} {(refs/heads/master)})]
            )
        )
      }
    )
    (C {(test_atom)} {(head)} {(objectname) (Id.Lit_Other ':') (short)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:323)
          command_list: 
            (command.CommandList
              children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/heads/master)})]
            )
        )
      }
    )
    (C {(test_atom)} {(head)} {(tree)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:339)
          command_list: 
            (command.CommandList
              children: [
                (C {(git)} {(rev-parse)} 
                  {(refs/heads/master) (Id.Lit_Other '^') (Id.Lit_LBrace '{') (tree) (Id.Lit_RBrace '}')}
                )
              ]
            )
        )
      }
    )
    (C {(test_atom)} {(head)} {(parent)} {(SQ )})
    (C {(test_atom)} {(head)} {(numparent)} {(0)})
    (C {(test_atom)} {(head)} {(object)} {(SQ )})
    (C {(test_atom)} {(head)} {(type)} {(SQ )})
    (C {(test_atom)} {(head)} {(SQ (Token id:Id.Lit_Chars val:'*objectname' span_id:391))} {(SQ )})
    (C {(test_atom)} {(head)} {(SQ (Token id:Id.Lit_Chars val:'*objecttype' span_id:402))} {(SQ )})
    (C {(test_atom)} {(head)} {(author)} 
      {(SQ (Token id:Id.Lit_Chars val:'A U Thor <author@example.com> 1151968724 +0200' span_id:415))}
    )
    (C {(test_atom)} {(head)} {(authorname)} {(SQ (Token id:Id.Lit_Chars val:'A U Thor' span_id:425))})
    (C {(test_atom)} {(head)} {(authoremail)} 
      {(SQ (Token id:Id.Lit_Chars val:'<author@example.com>' span_id:435))}
    )
    (C {(test_atom)} {(head)} {(authordate)} 
      {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:44 2006 +0200' span_id:445))}
    )
    (C {(test_atom)} {(head)} {(committer)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'C O Mitter <committer@example.com> 1151968723 +0200'
            span_id: 455
          )
        )
      }
    )
    (C {(test_atom)} {(head)} {(committername)} 
      {(SQ (Token id:Id.Lit_Chars val:'C O Mitter' span_id:465))}
    )
    (C {(test_atom)} {(head)} {(committeremail)} 
      {(SQ (Token id:Id.Lit_Chars val:'<committer@example.com>' span_id:475))}
    )
    (C {(test_atom)} {(head)} {(committerdate)} 
      {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:43 2006 +0200' span_id:485))}
    )
    (C {(test_atom)} {(head)} {(tag)} {(SQ )})
    (C {(test_atom)} {(head)} {(tagger)} {(SQ )})
    (C {(test_atom)} {(head)} {(taggername)} {(SQ )})
    (C {(test_atom)} {(head)} {(taggeremail)} {(SQ )})
    (C {(test_atom)} {(head)} {(taggerdate)} {(SQ )})
    (C {(test_atom)} {(head)} {(creator)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'C O Mitter <committer@example.com> 1151968723 +0200'
            span_id: 540
          )
        )
      }
    )
    (C {(test_atom)} {(head)} {(creatordate)} 
      {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:43 2006 +0200' span_id:550))}
    )
    (C {(test_atom)} {(head)} {(subject)} {(SQ (Token id:Id.Lit_Chars val:Initial span_id:560))})
    (C {(test_atom)} {(head)} {(contents) (Id.Lit_Other ':') (subject)} 
      {(SQ (Token id:Id.Lit_Chars val:Initial span_id:572))}
    )
    (C {(test_atom)} {(head)} {(body)} {(SQ )})
    (C {(test_atom)} {(head)} {(contents) (Id.Lit_Other ':') (body)} {(SQ )})
    (C {(test_atom)} {(head)} {(contents) (Id.Lit_Other ':') (signature)} {(SQ )})
    (C {(test_atom)} {(head)} {(contents)} {(SQ (Token id:Id.Lit_Chars val:'Initial\n' span_id:613))})
    (C {(test_atom)} {(head)} {(HEAD)} {(SQ (Token id:Id.Lit_Chars val:'*' span_id:623))})
    (C {(test_atom)} {(tag)} {(refname)} {(refs/tags/testtag)})
    (C {(test_atom)} {(tag)} {(refname) (Id.Lit_Other ':') (short)} {(testtag)})
    (C {(test_atom)} {(tag)} {(upstream)} {(SQ )})
    (C {(test_atom)} {(tag)} {(push)} {(SQ )})
    (C {(test_atom)} {(tag)} {(objecttype)} {(tag)})
    (C {(test_atom)} {(tag)} {(objectsize)} {(154)})
    (C {(test_atom)} {(tag)} {(objectname)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:685)
          command_list: 
            (command.CommandList
              children: [(C {(git)} {(rev-parse)} {(refs/tags/testtag)})]
            )
        )
      }
    )
    (C {(test_atom)} {(tag)} {(objectname) (Id.Lit_Other ':') (short)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:701)
          command_list: 
            (command.CommandList
              children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/tags/testtag)})]
            )
        )
      }
    )
    (C {(test_atom)} {(tag)} {(tree)} {(SQ )})
    (C {(test_atom)} {(tag)} {(parent)} {(SQ )})
    (C {(test_atom)} {(tag)} {(numparent)} {(SQ )})
    (C {(test_atom)} {(tag)} {(object)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:744)
          command_list: 
            (command.CommandList
              children: [(C {(git)} {(rev-parse)} {(refs/tags/testtag) (Id.Lit_Other '^') (0)})]
            )
        )
      }
    )
    (C {(test_atom)} {(tag)} {(type)} {(SQ (Token id:Id.Lit_Chars val:commit span_id:761))})
    (C {(test_atom)} {(tag)} {(SQ (Token id:Id.Lit_Chars val:'*objectname' span_id:769))} 
      {(SQ (Token id:Id.Lit_Chars val:ea122842f48be4afb2d1fc6a4b96c05885ab7463 span_id:773))}
    )
    (C {(test_atom)} {(tag)} {(SQ (Token id:Id.Lit_Chars val:'*objecttype' span_id:781))} 
      {(SQ (Token id:Id.Lit_Chars val:commit span_id:785))}
    )
    (C {(test_atom)} {(tag)} {(author)} {(SQ )})
    (C {(test_atom)} {(tag)} {(authorname)} {(SQ )})
    (C {(test_atom)} {(tag)} {(authoremail)} {(SQ )})
    (C {(test_atom)} {(tag)} {(authordate)} {(SQ )})
    (C {(test_atom)} {(tag)} {(committer)} {(SQ )})
    (C {(test_atom)} {(tag)} {(committername)} {(SQ )})
    (C {(test_atom)} {(tag)} {(committeremail)} {(SQ )})
    (C {(test_atom)} {(tag)} {(committerdate)} {(SQ )})
    (C {(test_atom)} {(tag)} {(tag)} {(SQ (Token id:Id.Lit_Chars val:testtag span_id:867))})
    (C {(test_atom)} {(tag)} {(tagger)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'C O Mitter <committer@example.com> 1151968725 +0200'
            span_id: 877
          )
        )
      }
    )
    (C {(test_atom)} {(tag)} {(taggername)} {(SQ (Token id:Id.Lit_Chars val:'C O Mitter' span_id:887))})
    (C {(test_atom)} {(tag)} {(taggeremail)} 
      {(SQ (Token id:Id.Lit_Chars val:'<committer@example.com>' span_id:897))}
    )
    (C {(test_atom)} {(tag)} {(taggerdate)} 
      {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:45 2006 +0200' span_id:907))}
    )
    (C {(test_atom)} {(tag)} {(creator)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'C O Mitter <committer@example.com> 1151968725 +0200'
            span_id: 917
          )
        )
      }
    )
    (C {(test_atom)} {(tag)} {(creatordate)} 
      {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:45 2006 +0200' span_id:927))}
    )
    (C {(test_atom)} {(tag)} {(subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'Tagging at 1151968727' span_id:937))}
    )
    (C {(test_atom)} {(tag)} {(contents) (Id.Lit_Other ':') (subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'Tagging at 1151968727' span_id:949))}
    )
    (C {(test_atom)} {(tag)} {(body)} {(SQ )})
    (C {(test_atom)} {(tag)} {(contents) (Id.Lit_Other ':') (body)} {(SQ )})
    (C {(test_atom)} {(tag)} {(contents) (Id.Lit_Other ':') (signature)} {(SQ )})
    (C {(test_atom)} {(tag)} {(contents)} 
      {(SQ (Token id:Id.Lit_Chars val:'Tagging at 1151968727\n' span_id:990))}
    )
    (C {(test_atom)} {(tag)} {(HEAD)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:1000))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check invalid atoms names are errors' span_id:1007))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1011) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(INVALID)" refs/heads\n'
            span_id: 1012
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'arguments to :strip must be positive integers' span_id:1019))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1023) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(refname:strip=0)" &&\n'
            span_id: 1024
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(refname:strip=-1)" &&\n'
            span_id: 1025
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(refname:strip=foo)"\n'
            span_id: 1026
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stripping refnames too far gives an error' span_id:1033))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1037) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(refname:strip=3)"\n'
            span_id: 1038
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check format specifiers are ignored in naming date atoms'
            span_id: 1045
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1049) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate)" refs/heads &&\n'
            span_id: 1050
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:default) %(authordate)" refs/heads &&\n'
            span_id: 1051
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate) %(authordate:default)" refs/heads &&\n'
            span_id: 1052
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit for-each-ref --format="%(authordate:default) %(authordate:default)" refs/heads\n'
            span_id: 1053
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check valid format specifiers for date fields' span_id:1060))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1064) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:default)" refs/heads &&\n'
            span_id: 1065
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:relative)" refs/heads &&\n'
            span_id: 1066
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:short)" refs/heads &&\n'
            span_id: 1067
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:local)" refs/heads &&\n'
            span_id: 1068
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:iso8601)" refs/heads &&\n'
            span_id: 1069
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:rfc2822)" refs/heads\n'
            span_id: 1070
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check invalid format specifiers are errors' span_id:1077))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1081) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(authordate:INVALID)" refs/heads\n'
            span_id: 1082
          )
        )
      }
    )
    (command.ShFunction
      name: test_date
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:f)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1094]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:committer_date)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$2')}
                      spids: [1100]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:author_date)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$3')}
                      spids: [1106]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:tagger_date)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$4')}
                      spids: [1112]
                    )
                  ]
                )
                (command.Simple
                  words: [{(cat)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1120)
                      fd: -1
                      arg_word: {(expected)}
                    )
                    (redir.HereDoc
                      op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:1123)
                      fd: -1
                      here_begin: {(EOF)}
                      here_end_span_id: 1137
                      stdin_parts: [
                        ("'refs/heads/master' '")
                        ($ Id.VSub_DollarName '$committer_date')
                        ("' '")
                        ($ Id.VSub_DollarName '$author_date')
                        ("'\n")
                        ("'refs/tags/testtag' '")
                        ($ Id.VSub_DollarName '$tagger_date')
                        ("'\n")
                      ]
                    )
                  ]
                )
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(git)} {(for-each-ref)} {(--shell)} 
                              {(--format) (Id.Lit_Equals '=') 
                                (DQ ('%(refname) %(committerdate') 
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:f span_id:1155)
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op_id: Id.VTest_ColonPlus
                                        arg_word: {(':') ($ Id.VSub_DollarName '$f')}
                                      )
                                  ) (') %(authordate') 
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:f span_id:1162)
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op_id: Id.VTest_ColonPlus
                                        arg_word: {(':') ($ Id.VSub_DollarName '$f')}
                                      )
                                  ) (')')
                                )
                              } {(refs/heads)}
                            )
                            (C {(git)} {(for-each-ref)} {(--shell)} 
                              {(--format) (Id.Lit_Equals '=') 
                                (DQ ('%(refname) %(taggerdate') 
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:f span_id:1190)
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op_id: Id.VTest_ColonPlus
                                        arg_word: {(':') ($ Id.VSub_DollarName '$f')}
                                      )
                                  ) (')')
                                )
                              } {(refs/tags)}
                            )
                          ]
                        )
                      ]
                    )
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1205)
                      fd: -1
                      arg_word: {(actual)}
                    )
                  ]
                )
                (C {(test_cmp)} {(expected)} {(actual)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check unformatted date fields output' span_id:1223))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1227) 
          (Token id:Id.Lit_Chars val:'\ttest_date "" \\\n' span_id:1228) (Token id:Id.Lit_Chars val:'\t\t"Tue Jul 4 01:18:43 2006 +0200" \\\n' span_id:1229) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t"Tue Jul 4 01:18:44 2006 +0200" \\\n'
            span_id: 1230
          ) (Token id:Id.Lit_Chars val:'\t\t"Tue Jul 4 01:18:45 2006 +0200"\n' span_id:1231)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check format "default" formatted date fields output'
            span_id: 1238
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1242) 
          (Token id:Id.Lit_Chars val:'\ttest_date default \\\n' span_id:1243) (Token id:Id.Lit_Chars val:'\t\t"Tue Jul 4 01:18:43 2006 +0200" \\\n' span_id:1244) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t"Tue Jul 4 01:18:44 2006 +0200" \\\n'
            span_id: 1245
          ) (Token id:Id.Lit_Chars val:'\t\t"Tue Jul 4 01:18:45 2006 +0200"\n' span_id:1246)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check format "default-local" date fields output'
            span_id: 1253
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1257) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_date default-local "Mon Jul 3 23:18:43 2006" "Mon Jul 3 23:18:44 2006" "Mon Jul 3 23:18:45 2006"\n'
            span_id: 1258
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format "relative" date fields output' span_id:1277))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1281) 
          (Token id:Id.Lit_Chars val:'\tf=relative &&\n' span_id:1282) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t(git for-each-ref --shell --format="%(refname) %(committerdate:$f) %(authordate:$f)" refs/heads &&\n'
            span_id: 1283
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit for-each-ref --shell --format="%(refname) %(taggerdate:$f)" refs/tags) >actual\n'
            span_id: 1284
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check format "relative-local" date fields output'
            span_id: 1294
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1298) 
          (Token id:Id.Lit_Chars val:'\ttest_date relative-local \\\n' span_id:1299) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t"$(git for-each-ref --format="%(committerdate:relative)" refs/heads)" \\\n'
            span_id: 1300
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t"$(git for-each-ref --format="%(authordate:relative)" refs/heads)" \\\n'
            span_id: 1301
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t"$(git for-each-ref --format="%(taggerdate:relative)" refs/tags)"\n'
            span_id: 1302
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format "short" date fields output' span_id:1309))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1313) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_date short 2006-07-04 2006-07-04 2006-07-04\n'
            span_id: 1314
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format "short-local" date fields output' span_id:1321))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1325) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_date short-local 2006-07-03 2006-07-03 2006-07-03\n'
            span_id: 1326
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format "local" date fields output' span_id:1333))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1337) 
          (Token id:Id.Lit_Chars val:'\ttest_date local \\\n' span_id:1338) (Token id:Id.Lit_Chars val:'\t\t"Mon Jul 3 23:18:43 2006" \\\n' span_id:1339) 
          (Token id:Id.Lit_Chars val:'\t\t"Mon Jul 3 23:18:44 2006" \\\n' span_id:1340) (Token id:Id.Lit_Chars val:'\t\t"Mon Jul 3 23:18:45 2006"\n' span_id:1341)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format "iso8601" date fields output' span_id:1348))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1352) 
          (Token id:Id.Lit_Chars val:'\ttest_date iso8601 \\\n' span_id:1353) (Token id:Id.Lit_Chars val:'\t\t"2006-07-04 01:18:43 +0200" \\\n' span_id:1354) 
          (Token id:Id.Lit_Chars val:'\t\t"2006-07-04 01:18:44 +0200" \\\n' span_id:1355) (Token id:Id.Lit_Chars val:'\t\t"2006-07-04 01:18:45 +0200"\n' span_id:1356)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check format "iso8601-local" date fields output'
            span_id: 1363
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1367) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_date iso8601-local "2006-07-03 23:18:43 +0000" "2006-07-03 23:18:44 +0000" "2006-07-03 23:18:45 +0000"\n'
            span_id: 1368
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format "rfc2822" date fields output' span_id:1375))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1379) 
          (Token id:Id.Lit_Chars val:'\ttest_date rfc2822 \\\n' span_id:1380) (Token id:Id.Lit_Chars val:'\t\t"Tue, 4 Jul 2006 01:18:43 +0200" \\\n' span_id:1381) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t"Tue, 4 Jul 2006 01:18:44 +0200" \\\n'
            span_id: 1382
          ) (Token id:Id.Lit_Chars val:'\t\t"Tue, 4 Jul 2006 01:18:45 +0200"\n' span_id:1383)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check format "rfc2822-local" date fields output'
            span_id: 1390
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1394) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_date rfc2822-local "Mon, 3 Jul 2006 23:18:43 +0000" "Mon, 3 Jul 2006 23:18:44 +0000" "Mon, 3 Jul 2006 23:18:45 +0000"\n'
            span_id: 1395
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format "raw" date fields output' span_id:1402))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1406) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_date raw "1151968723 +0200" "1151968724 +0200" "1151968725 +0200"\n'
            span_id: 1407
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format "raw-local" date fields output' span_id:1414))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1418) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_date raw-local "1151968723 +0000" "1151968724 +0000" "1151968725 +0000"\n'
            span_id: 1419
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format of strftime date fields' span_id:1426))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1430) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "my date is 2006-07-04" >expected &&\n'
            span_id: 1431
          ) (Token id:Id.Lit_Chars val:'\tgit for-each-ref \\\n' span_id:1432) 
          (Token
            id: Id.Lit_Chars
            val: '\t  --format="%(authordate:format:my date is %Y-%m-%d)" \\\n'
            span_id: 1433
          ) (Token id:Id.Lit_Chars val:'\t  refs/heads >actual &&\n' span_id:1434) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1435)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check format of strftime-local date fields' span_id:1442))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1446) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "my date is 2006-07-03" >expected &&\n'
            span_id: 1447
          ) (Token id:Id.Lit_Chars val:'\tgit for-each-ref \\\n' span_id:1448) 
          (Token
            id: Id.Lit_Chars
            val: '\t  --format="%(authordate:format-local:my date is %Y-%m-%d)" \\\n'
            span_id: 1449
          ) (Token id:Id.Lit_Chars val:'\t  refs/heads >actual &&\n' span_id:1450) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1451)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'exercise strftime with odd fields' span_id:1458))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1462) 
          (Token id:Id.Lit_Chars val:'\techo >expected &&\n' span_id:1463) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:format:)" refs/heads >actual &&\n'
            span_id: 1464
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual &&\n' span_id:1465) 
          (Token
            id: Id.Lit_Chars
            val: '\tlong="long format -- $_z40$_z40$_z40$_z40$_z40$_z40$_z40" &&\n'
            span_id: 1466
          ) (Token id:Id.Lit_Chars val:'\techo $long >expected &&\n' span_id:1467) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(authordate:format:$long)" refs/heads >actual &&\n'
            span_id: 1468
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1469)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1475)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1478)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1479)) 
              (OF)
            }
          here_end_span_id: 1485
          stdin_parts: [
            ('refs/heads/master\n')
            ('refs/remotes/origin/master\n')
            ('refs/tags/testtag\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Verify ascending sort' span_id:1490))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1494) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(refname)" --sort=refname >actual &&\n'
            span_id: 1495
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1496)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1503)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1506)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1507)) 
              (OF)
            }
          here_end_span_id: 1513
          stdin_parts: [
            ('refs/tags/testtag\n')
            ('refs/remotes/origin/master\n')
            ('refs/heads/master\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Verify descending sort' span_id:1518))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1522) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --format="%(refname)" --sort=-refname >actual &&\n'
            span_id: 1523
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1524)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1530)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1533)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1534)) 
              (OF)
            }
          here_end_span_id: 1540
          stdin_parts: [
            ("'refs/heads/master'\n")
            ("'refs/remotes/origin/master'\n")
            ("'refs/tags/testtag'\n")
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Quoting style: shell' span_id:1545))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1549) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --shell --format="%(refname)" >actual &&\n'
            span_id: 1550
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1551)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Quoting style: perl' span_id:1558))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1562) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --perl --format="%(refname)" >actual &&\n'
            span_id: 1563
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1564)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Quoting style: python' span_id:1571))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1575) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --python --format="%(refname)" >actual &&\n'
            span_id: 1576
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1577)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1583)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1586)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1587)) 
              (OF)
            }
          here_end_span_id: 1593
          stdin_parts: [
            ('"refs/heads/master"\n')
            ('"refs/remotes/origin/master"\n')
            ('"refs/tags/testtag"\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Quoting style: tcl' span_id:1598))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1602) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --tcl --format="%(refname)" >actual &&\n'
            span_id: 1603
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1604)
        )
      }
    )
    (command.ForEach
      iter_name: i
      iter_words: [
        {(DQ ('--perl --shell'))}
        {(DQ ('-s --python'))}
        {(DQ ('--python --tcl'))}
        {(DQ ('--tcl --perl'))}
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ('more than one quoting style: ') ($ Id.VSub_DollarName '$i'))} 
              {
                (DQ ('\n') ('\t\tgit for-each-ref ') ($ Id.VSub_DollarName '$i') 
                  (' 2>&1 | (read line &&\n') ('\t\tcase ') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:1647)) 
                  ('line in\n') ('\t\t') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:1650)) 
                  ('error: more than one quoting style') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:1652)) 
                  ('*) : happy;;\n') ('\t\t*) false\n') ('\t\tesac)\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup for upstream:track[short]' span_id:1665))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1669) 
          (Token id:Id.Lit_Chars val:'\ttest_commit two\n' span_id:1670)
        )
      }
    )
    (C {(test_atom)} {(head)} {(upstream) (Id.Lit_Other ':') (track)} 
      {(SQ (Token id:Id.Lit_Chars val:'[ahead 1]' span_id:1683))}
    )
    (C {(test_atom)} {(head)} {(upstream) (Id.Lit_Other ':') (trackshort)} 
      {(SQ (Token id:Id.Lit_Chars val:'>' span_id:1695))}
    )
    (C {(test_atom)} {(head)} {(push) (Id.Lit_Other ':') (track)} 
      {(SQ (Token id:Id.Lit_Chars val:'[ahead 1]' span_id:1707))}
    )
    (C {(test_atom)} {(head)} {(push) (Id.Lit_Other ':') (trackshort)} 
      {(SQ (Token id:Id.Lit_Chars val:'>' span_id:1719))}
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check that :track[short] cannot be used with other atoms'
            span_id: 1726
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1730) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(refname:track)" 2>/dev/null &&\n'
            span_id: 1731
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(refname:trackshort)" 2>/dev/null\n'
            span_id: 1732
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check that :track[short] works when upstream is invalid'
            span_id: 1739
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1743) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-\\EOF &&\n' span_id:1744) (Token id:Id.Lit_Chars val:'\n' span_id:1745) (Token id:Id.Lit_Chars val:'\n' span_id:1746) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1747) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git config branch.master.merge refs/heads/master" &&\n'
            span_id: 1748
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config branch.master.merge refs/heads/does-not-exist &&\n'
            span_id: 1749
          ) (Token id:Id.Lit_Chars val:'\tgit for-each-ref \\\n' span_id:1750) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t--format="%(upstream:track)$LF%(upstream:trackshort)" \\\n'
            span_id: 1751
          ) (Token id:Id.Lit_Chars val:'\t\trefs/heads >actual &&\n' span_id:1752) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1753)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check for invalid refname format' span_id:1760))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1764) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git for-each-ref --format="%(refname:INVALID)"\n'
            span_id: 1765
          )
        )
      }
    )
    (command.ShFunction
      name: get_color
      body: 
        (command.BraceGroup
          children: [
            (C {(git)} {(config)} {(--get-color)} {(no.such.slot)} {(DQ ($ Id.VSub_Number '$1'))})
          ]
        )
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1794)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1797)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1889
          stdin_parts: [
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1800)
              command_list: 
                (command.CommandList
                  children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/heads/master)})]
                )
            )
            (' ')
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1810)
              command_list: (command.CommandList children:[(C {(get_color)} {(green)})])
            )
            (master)
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1816)
              command_list: (command.CommandList children:[(C {(get_color)} {(reset)})])
            )
            ('\n')
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1822)
              command_list: 
                (command.CommandList
                  children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/remotes/origin/master)})]
                )
            )
            (' ')
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1832)
              command_list: (command.CommandList children:[(C {(get_color)} {(green)})])
            )
            (origin/master)
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1838)
              command_list: (command.CommandList children:[(C {(get_color)} {(reset)})])
            )
            ('\n')
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1844)
              command_list: 
                (command.CommandList
                  children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/tags/testtag)})]
                )
            )
            (' ')
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1854)
              command_list: (command.CommandList children:[(C {(get_color)} {(green)})])
            )
            (testtag)
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1860)
              command_list: (command.CommandList children:[(C {(get_color)} {(reset)})])
            )
            ('\n')
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1866)
              command_list: 
                (command.CommandList
                  children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/tags/two)})]
                )
            )
            (' ')
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1876)
              command_list: (command.CommandList children:[(C {(get_color)} {(green)})])
            )
            (two)
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1882)
              command_list: (command.CommandList children:[(C {(get_color)} {(reset)})])
            )
            ('\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check %(color:...) ' span_id:1894))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1898) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit for-each-ref --format="%(objectname:short) %(color:green)%(refname:short)" >actual &&\n'
            span_id: 1899
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1900)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1906)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1909)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1910)) 
              (OF)
            }
          here_end_span_id: 1915
          stdin_parts: [('heads/master\n') ('tags/master\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check ambiguous head and tag refs (strict)' span_id:1920))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1924) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --bool core.warnambiguousrefs true &&\n'
            span_id: 1925
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -b newtag &&\n' span_id:1926) 
          (Token id:Id.Lit_Chars val:'\techo "Using $datestamp" > one &&\n' span_id:1927) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:1928) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "Branch" &&\n' span_id:1929) (Token id:Id.Lit_Chars val:'\tsetdate_and_increment &&\n' span_id:1930) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit tag -m "Tagging at $datestamp" master &&\n'
            span_id: 1931
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit for-each-ref --format "%(refname:short)" refs/heads/master refs/tags/master >actual &&\n'
            span_id: 1932
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1933)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1939)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1942)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1943)) 
              (OF)
            }
          here_end_span_id: 1948
          stdin_parts: [('heads/master\n') ('master\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check ambiguous head and tag refs (loose)' span_id:1953))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1957) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --bool core.warnambiguousrefs false &&\n'
            span_id: 1958
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit for-each-ref --format "%(refname:short)" refs/heads/master refs/tags/master >actual &&\n'
            span_id: 1959
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1960)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1966)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1969)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1970)) 
              (OF)
            }
          here_end_span_id: 1975
          stdin_parts: [('heads/ambiguous\n') ('ambiguous\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Check ambiguous head and tag refs II (loose)' span_id:1980))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1984) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:1985) (Token id:Id.Lit_Chars val:'\tgit tag ambiguous testtag^0 &&\n' span_id:1986) 
          (Token id:Id.Lit_Chars val:'\tgit branch ambiguous testtag^0 &&\n' span_id:1987) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit for-each-ref --format "%(refname:short)" refs/heads/ambiguous refs/tags/ambiguous >actual &&\n'
            span_id: 1988
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1989)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'an unusual tag with an incomplete line' span_id:1996))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2000) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2001) (Token id:Id.Lit_Chars val:'\tgit tag -m "bogo" bogo &&\n' span_id:2002) 
          (Token id:Id.Lit_Chars val:'\tbogo=$(git cat-file tag bogo) &&\n' span_id:2003) (Token id:Id.Lit_Chars val:'\tbogo=$(printf "%s" "$bogo" | git mktag) &&\n' span_id:2004) 
          (Token id:Id.Lit_Chars val:'\tgit tag -f bogo "$bogo" &&\n' span_id:2005) (Token id:Id.Lit_Chars val:'\tgit for-each-ref --format "%(body)" refs/tags/bogo\n' span_id:2006) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2007)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create tag with subject and body content' span_id:2014))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2018) 
          (Token id:Id.Lit_Chars val:'\tcat >>msg <<-\\EOF &&\n' span_id:2019) (Token id:Id.Lit_Chars val:'\t\tthe subject line\n' span_id:2020) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2021) (Token id:Id.Lit_Chars val:'\t\tfirst body line\n' span_id:2022) 
          (Token id:Id.Lit_Chars val:'\t\tsecond body line\n' span_id:2023) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2024) 
          (Token id:Id.Lit_Chars val:'\tgit tag -F msg subject-body\n' span_id:2025)
        )
      }
    )
    (C {(test_atom)} {(refs/tags/subject-body)} {(subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'the subject line' span_id:2035))}
    )
    (C {(test_atom)} {(refs/tags/subject-body)} {(body)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'first body line\n' span_id:2045) 
          (Token id:Id.Lit_Chars val:'second body line\n' span_id:2046)
        )
      }
    )
    (C {(test_atom)} {(refs/tags/subject-body)} {(contents)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'the subject line\n' span_id:2056) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2057) (Token id:Id.Lit_Chars val:'first body line\n' span_id:2058) 
          (Token id:Id.Lit_Chars val:'second body line\n' span_id:2059)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create tag with multiline subject' span_id:2066))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2070) 
          (Token id:Id.Lit_Chars val:'\tcat >msg <<-\\EOF &&\n' span_id:2071) (Token id:Id.Lit_Chars val:'\t\tfirst subject line\n' span_id:2072) 
          (Token id:Id.Lit_Chars val:'\t\tsecond subject line\n' span_id:2073) (Token id:Id.Lit_Chars val:'\n' span_id:2074) 
          (Token id:Id.Lit_Chars val:'\t\tfirst body line\n' span_id:2075) (Token id:Id.Lit_Chars val:'\t\tsecond body line\n' span_id:2076) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2077) (Token id:Id.Lit_Chars val:'\tgit tag -F msg multiline\n' span_id:2078)
        )
      }
    )
    (C {(test_atom)} {(refs/tags/multiline)} {(subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'first subject line second subject line' span_id:2088))}
    )
    (C {(test_atom)} {(refs/tags/multiline)} {(contents) (Id.Lit_Other ':') (subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'first subject line second subject line' span_id:2100))}
    )
    (C {(test_atom)} {(refs/tags/multiline)} {(body)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'first body line\n' span_id:2110) 
          (Token id:Id.Lit_Chars val:'second body line\n' span_id:2111)
        )
      }
    )
    (C {(test_atom)} {(refs/tags/multiline)} {(contents) (Id.Lit_Other ':') (body)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'first body line\n' span_id:2123) 
          (Token id:Id.Lit_Chars val:'second body line\n' span_id:2124)
        )
      }
    )
    (C {(test_atom)} {(refs/tags/multiline)} {(contents) (Id.Lit_Other ':') (signature)} {(SQ )})
    (C {(test_atom)} {(refs/tags/multiline)} {(contents)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'first subject line\n' span_id:2145) 
          (Token id:Id.Lit_Chars val:'second subject line\n' span_id:2146) (Token id:Id.Lit_Chars val:'\n' span_id:2147) 
          (Token id:Id.Lit_Chars val:'first body line\n' span_id:2148) (Token id:Id.Lit_Chars val:'second body line\n' span_id:2149)
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} 
      {(SQ (Token id:Id.Lit_Chars val:'create signed tags' span_id:2158))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2162) 
          (Token id:Id.Lit_Chars val:'\tgit tag -s -m "" signed-empty &&\n' span_id:2163) (Token id:Id.Lit_Chars val:'\tgit tag -s -m "subject line" signed-short &&\n' span_id:2164) 
          (Token id:Id.Lit_Chars val:'\tcat >msg <<-\\EOF &&\n' span_id:2165) (Token id:Id.Lit_Chars val:'\tsubject line\n' span_id:2166) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2167) (Token id:Id.Lit_Chars val:'\tbody contents\n' span_id:2168) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2169) (Token id:Id.Lit_Chars val:'\tgit tag -s -F msg signed-long\n' span_id:2170)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:sig)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'-----BEGIN PGP SIGNATURE-----\n' span_id:2176) 
                (Token
                  id: Id.Lit_Chars
                  val: '-----END PGP SIGNATURE-----\n'
                  span_id: 2177
                )
              )
            }
          spids: [2174]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PREREQ)
          op: assign_op.Equal
          rhs: {(GPG)}
          spids: [2181]
        )
      ]
    )
    (C {(test_atom)} {(refs/tags/signed-empty)} {(subject)} {(SQ )})
    (C {(test_atom)} {(refs/tags/signed-empty)} {(contents) (Id.Lit_Other ':') (subject)} {(SQ )})
    (C {(test_atom)} {(refs/tags/signed-empty)} {(body)} {(DQ ($ Id.VSub_DollarName '$sig'))})
    (C {(test_atom)} {(refs/tags/signed-empty)} {(contents) (Id.Lit_Other ':') (body)} {(SQ )})
    (C {(test_atom)} {(refs/tags/signed-empty)} {(contents) (Id.Lit_Other ':') (signature)} 
      {(DQ ($ Id.VSub_DollarName '$sig'))}
    )
    (C {(test_atom)} {(refs/tags/signed-empty)} {(contents)} {(DQ ($ Id.VSub_DollarName '$sig'))})
    (C {(test_atom)} {(refs/tags/signed-short)} {(subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'subject line' span_id:2255))}
    )
    (C {(test_atom)} {(refs/tags/signed-short)} {(contents) (Id.Lit_Other ':') (subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'subject line' span_id:2267))}
    )
    (C {(test_atom)} {(refs/tags/signed-short)} {(body)} {(DQ ($ Id.VSub_DollarName '$sig'))})
    (C {(test_atom)} {(refs/tags/signed-short)} {(contents) (Id.Lit_Other ':') (body)} {(SQ )})
    (C {(test_atom)} {(refs/tags/signed-short)} {(contents) (Id.Lit_Other ':') (signature)} 
      {(DQ ($ Id.VSub_DollarName '$sig'))}
    )
    (C {(test_atom)} {(refs/tags/signed-short)} {(contents)} 
      {(DQ ('subject line\n') ($ Id.VSub_DollarName '$sig'))}
    )
    (C {(test_atom)} {(refs/tags/signed-long)} {(subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'subject line' span_id:2322))}
    )
    (C {(test_atom)} {(refs/tags/signed-long)} {(contents) (Id.Lit_Other ':') (subject)} 
      {(SQ (Token id:Id.Lit_Chars val:'subject line' span_id:2334))}
    )
    (C {(test_atom)} {(refs/tags/signed-long)} {(body)} 
      {(DQ ('body contents\n') ($ Id.VSub_DollarName '$sig'))}
    )
    (C {(test_atom)} {(refs/tags/signed-long)} {(contents) (Id.Lit_Other ':') (body)} 
      {(SQ (Token id:Id.Lit_Chars val:'body contents\n' span_id:2357))}
    )
    (C {(test_atom)} {(refs/tags/signed-long)} {(contents) (Id.Lit_Other ':') (signature)} 
      {(DQ ($ Id.VSub_DollarName '$sig'))}
    )
    (C {(test_atom)} {(refs/tags/signed-long)} {(contents)} 
      {(DQ ('subject line\n') ('\n') ('body contents\n') ($ Id.VSub_DollarName '$sig'))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2388)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2391)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2411
          stdin_parts: [
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2394)
              command_list: 
                (command.CommandList
                  children: [(C {(git)} {(rev-parse)} {(refs/tags/bogo)})]
                )
            )
            (' <committer@example.com> refs/tags/bogo\n')
            (command_sub
              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2402)
              command_list: 
                (command.CommandList
                  children: [(C {(git)} {(rev-parse)} {(refs/tags/master)})]
                )
            )
            (' <committer@example.com> refs/tags/master\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Verify sort with multiple keys' span_id:2416))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2420) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit for-each-ref --format="%(objectname) %(taggeremail) %(refname)" --sort=objectname --sort=taggeremail \\\n'
            span_id: 2421
          ) (Token id:Id.Lit_Chars val:'\t\trefs/tags/bogo refs/tags/master > actual &&\n' span_id:2422) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2423)
        )
      }
    )
    (C {(test_done)})
  ]
)