(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 log with invalid commit headers' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\ttest_commit foo &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD |\n' span_id:25) (Token id:Id.Lit_Chars val:'\tsed "/^author /s/>/>-<>/" >broken_email.commit &&\n' span_id:26) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit hash-object -w -t commit broken_email.commit >broken_email.hash &&\n'
            span_id: 27
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/broken_email $(cat broken_email.hash)\n'
            span_id: 28
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fsck notices broken commit' span_id:35))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck 2>actual &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep invalid.author actual\n' span_id:41)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log with broken author email' span_id:48))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:52) (Token id:Id.Lit_Chars val:'\t{\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo commit $(cat broken_email.hash)\n'
            span_id: 54
          ) (Token id:Id.Lit_Chars val:'\t\techo "Author: A U Thor <author@example.com>"\n' span_id:55) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "Date:   Thu Apr 7 15:13:13 2005 -0700"\n'
            span_id: 56
          ) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\t\techo "    foo"\n' span_id:58) (Token id:Id.Lit_Chars val:'\t} >expect.out &&\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\t: >expect.err &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log broken_email >actual.out 2>actual.err &&\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.out actual.out &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.err actual.err\n' span_id:65)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --format with broken author email' span_id:72))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:76) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo "A U Thor+author@example.com+Thu Apr 7 15:13:13 2005 -0700" >expect.out &&\n'
            span_id: 77
          ) (Token id:Id.Lit_Chars val:'\t: >expect.err &&\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\n' span_id:79) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --format="%an+%ae+%ad" broken_email >actual.out 2>actual.err &&\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.out actual.out &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.err actual.err\n' span_id:83)
        )
      }
    )
    (command.ShFunction
      name: munge_author_date
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(git)} {(cat-file)} {(commit)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:105)
                      fd: -1
                      arg_word: {(commit.orig)}
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(sed)}
                    {
                      (DQ ('s/^') (Id.Lit_Other '\\') ('(author .*>') (Id.Lit_Other '\\') (') [0-9]*/') 
                        (Id.Lit_Other '\\') ('1 ') ($ Id.VSub_Number '$2') (/)
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:125)
                      fd: -1
                      arg_word: {(commit.orig)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:128)
                      fd: -1
                      arg_word: {(commit.munge)}
                    )
                  ]
                )
                (C {(git)} {(hash-object)} {(-w)} {(-t)} {(commit)} {(commit.munge)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'unparsable dates produce sentinel value' span_id:152))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:156) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit=$(munge_author_date HEAD totally_bogus) &&\n'
            span_id: 157
          ) (Token id:Id.Lit_Chars val:'\techo "Date:   Thu Jan 1 00:00:00 1970 +0000" >expect &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\tgit log -1 $commit >actual.full &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\tgrep Date <actual.full >actual &&\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:161)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'unparsable dates produce sentinel value (%ad)' span_id:168))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:172) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit=$(munge_author_date HEAD totally_bogus) &&\n'
            span_id: 173
          ) (Token id:Id.Lit_Chars val:'\techo >expect &&\n' span_id:174) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log -1 --format=%ad $commit >actual &&\n'
            span_id: 175
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:176)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'date parser recognizes integer overflow' span_id:186))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:190) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit=$(munge_author_date HEAD 18446744073709551617) &&\n'
            span_id: 191
          ) (Token id:Id.Lit_Chars val:'\techo "Thu Jan 1 00:00:00 1970 +0000" >expect &&\n' span_id:192) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log -1 --format=%ad $commit >actual &&\n'
            span_id: 193
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:194)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'date parser recognizes time_t overflow' span_id:204))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:208) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit=$(munge_author_date HEAD 18446744073709551614) &&\n'
            span_id: 209
          ) (Token id:Id.Lit_Chars val:'\techo "Thu Jan 1 00:00:00 1970 +0000" >expect &&\n' span_id:210) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log -1 --format=%ad $commit >actual &&\n'
            span_id: 211
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:212)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'absurdly far-in-future date' span_id:222))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit=$(munge_author_date HEAD 999999999999999999) &&\n'
            span_id: 227
          ) (Token id:Id.Lit_Chars val:'\tgit log -1 --format=%ad $commit\n' span_id:228)
        )
      }
    )
    (C {(test_done)})
  ]
)