(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 shortlog\n' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:27))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\techo 1 >a1 &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tgit add a1 &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\ttree=$(git write-tree) &&\n' span_id:34) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit=$(printf "%s\\n" "Test" "" | git commit-tree "$tree") &&\n'
            span_id: 35
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref HEAD "$commit" &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\n' span_id:37) (Token id:Id.Lit_Chars val:'\techo 2 >a1 &&\n' span_id:38) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit commit --quiet -m "This is a very, very long first line for the commit message to see if it is wrapped correctly" a1 &&\n'
            span_id: 39
          ) (Token id:Id.Lit_Chars val:'\n' span_id:40) 
          (Token
            id: Id.Lit_Chars
            val: '\t# test if the wrapping is still valid\n'
            span_id: 41
          ) (Token id:Id.Lit_Chars val:'\t# when replacing all is by treble clefs.\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\techo 3 >a1 &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\tgit commit --quiet -m "$(\n' span_id:44) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\techo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |\n'
            span_id: 45
          ) (Token id:Id.Lit_Chars val:'\t\tsed "s/i/1234/g" |\n' span_id:46) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttr 1234 "\\360\\235\\204\\236")" a1 &&\n'
            span_id: 47
          ) (Token id:Id.Lit_Chars val:'\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t# now fsck up the utf8\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit config i18n.commitencoding non-utf-8 &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\techo 4 >a1 &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\tgit commit --quiet -m "$(\n' span_id:52) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\techo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |\n'
            span_id: 53
          ) (Token id:Id.Lit_Chars val:'\t\tsed "s/i/1234/g" |\n' span_id:54) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttr 1234 "\\370\\235\\204\\236")" a1 &&\n'
            span_id: 55
          ) (Token id:Id.Lit_Chars val:'\n' span_id:56) (Token id:Id.Lit_Chars val:'\techo 5 >a1 &&\n' span_id:57) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --quiet -m "a\t\t\t\t\t\t\t\t12\t34\t56\t78" a1 &&\n'
            span_id: 58
          ) (Token id:Id.Lit_Chars val:'\n' span_id:59) (Token id:Id.Lit_Chars val:'\techo 6 >a1 &&\n' span_id:60) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --quiet -m "Commit by someone else" \\\n'
            span_id: 61
          ) (Token id:Id.Lit_Chars val:'\t\t--author="Someone else <not!me>" a1 &&\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\n' span_id:63) (Token id:Id.Lit_Chars val:'\tcat >expect.template <<-\\EOF\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\tA U Thor (5):\n' span_id:65) (Token id:Id.Lit_Chars val:'\t      SUBJECT\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\t      SUBJECT\n' span_id:67) (Token id:Id.Lit_Chars val:'\t      SUBJECT\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\t      SUBJECT\n' span_id:69) (Token id:Id.Lit_Chars val:'\t      SUBJECT\n' span_id:70) (Token id:Id.Lit_Chars val:'\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tSomeone else (1):\n' span_id:72) (Token id:Id.Lit_Chars val:'\t      SUBJECT\n' span_id:73) (Token id:Id.Lit_Chars val:'\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:75)
        )
      }
    )
    (command.ShFunction
      name: fuzz
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:file)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [86]
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(sed)}
                    {
                      (DQ ('\n') ('\t\t\ts/') ($ Id.VSub_DollarName '$_x40') ('/OBJECT_NAME/g\n') 
                        ('\t\t\ts/') ($ Id.VSub_DollarName '$_x05') ('/OBJID/g\n') ('\t\t\ts/^ ') (Id.Lit_Other '\\') ('{6') 
                        (Id.Lit_Other '\\') ('}[CTa].*/      SUBJECT/g\n') ('\t\t\ts/^ ') (Id.Lit_Other '\\') ('{8') (Id.Lit_Other '\\') 
                        ('}[^ ].*/        CONTINUATION/g\n') ('\t\t')
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:115)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$file'))}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:120)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$file') (.fuzzy))}
                    )
                  ]
                )
                (command.Simple
                  words: [{(sed)} {(DQ ('/CONTINUATION/ d'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:135)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$file') (.fuzzy))}
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'default output format' span_id:147))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >log &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\tfuzz log >log.predictable &&\n' span_id:153) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expect.template log.predictable\n'
            span_id: 154
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pretty format' span_id:161))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:165) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed s/SUBJECT/OBJECT_NAME/ expect.template >expect &&\n'
            span_id: 166
          ) (Token id:Id.Lit_Chars val:'\tgit shortlog --format="%H" HEAD >log &&\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\tfuzz log >log.predictable &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\ttest_cmp expect log.predictable\n' span_id:169)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--abbrev span_id:176))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed s/SUBJECT/OBJID/ expect.template >expect &&\n'
            span_id: 181
          ) (Token id:Id.Lit_Chars val:'\tgit shortlog --format="%h" --abbrev=5 HEAD >log &&\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\tfuzz log >log.predictable &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\ttest_cmp expect log.predictable\n' span_id:184)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'output from user-defined format is re-wrapped' span_id:191))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:195) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/SUBJECT/two lines/" expect.template >expect &&\n'
            span_id: 196
          ) (Token id:Id.Lit_Chars val:'\tgit shortlog --format="two%nlines" HEAD >log &&\n' span_id:197) 
          (Token id:Id.Lit_Chars val:'\tfuzz log >log.predictable &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\ttest_cmp expect log.predictable\n' span_id:199)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'shortlog wrapping' span_id:209))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<\\EOF &&\n' span_id:214) (Token id:Id.Lit_Chars val:'A U Thor (5):\n' span_id:215) 
          (Token id:Id.Lit_Chars val:'      Test\n' span_id:216) 
          (Token
            id: Id.Lit_Chars
            val: '      This is a very, very long first line for the commit message to see if\n'
            span_id: 217
          ) (Token id:Id.Lit_Chars val:'         it is wrapped correctly\n' span_id:218) 
          (Token
            id: Id.Lit_Chars
            val: 
'      Th\xf0\x9d\x84\x9es \xf0\x9d\x84\x9es a very, very long f\xf0\x9d\x84\x9erst l\xf0\x9d\x84\x9ene for the comm\xf0\x9d\x84\x9et message to see \xf0\x9d\x84\x9ef\n'
            span_id: 219
          ) 
          (Token
            id: Id.Lit_Chars
            val: '         \xf0\x9d\x84\x9et \xf0\x9d\x84\x9es wrapped correctly\n'
            span_id: 220
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'      Th\xf8\x9d\x84\x9es \xf8\x9d\x84\x9es a very, very long f\xf8\x9d\x84\x9erst l\xf8\x9d\x84\x9ene for the comm\xf8\x9d\x84\x9et\n'
            span_id: 221
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'         message to see \xf8\x9d\x84\x9ef \xf8\x9d\x84\x9et \xf8\x9d\x84\x9es wrapped correctly\n'
            span_id: 222
          ) (Token id:Id.Lit_Chars val:'      a\t\t\t\t\t\t\t\t12\t34\n' span_id:223) 
          (Token id:Id.Lit_Chars val:'         56\t78\n' span_id:224) (Token id:Id.Lit_Chars val:'\n' span_id:225) 
          (Token id:Id.Lit_Chars val:'Someone else (1):\n' span_id:226) (Token id:Id.Lit_Chars val:'      Commit by someone else\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'\n' span_id:228) (Token id:Id.Lit_Chars val:'EOF\n' span_id:229) 
          (Token id:Id.Lit_Chars val:'\tgit shortlog -w HEAD >out &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out\n' span_id:231)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'shortlog from non-git directory' span_id:241))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:245) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --no-expand-tabs HEAD >log &&\n'
            span_id: 246
          ) (Token id:Id.Lit_Chars val:'\tGIT_DIR=non-existing git shortlog -w <log >out &&\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect out\n' span_id:248)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'shortlog can read --format=raw output' span_id:258))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:262) 
          (Token id:Id.Lit_Chars val:'\tgit log --format=raw HEAD >log &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\tGIT_DIR=non-existing git shortlog -w <log >out &&\n' span_id:264) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect out\n' span_id:265)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'shortlog should add newline when input line matches wraplen'
            span_id: 272
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:276) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<\\EOF &&\n' span_id:277) (Token id:Id.Lit_Chars val:'A U Thor (2):\n' span_id:278) 
          (Token
            id: Id.Lit_Chars
            val: '      bbbbbbbbbbbbbbbbbb: bbbbbbbb bbb bbbb bbbbbbb bb bbbb bbb bbbbb bbbbbb\n'
            span_id: 279
          ) 
          (Token
            id: Id.Lit_Chars
            val: '      aaaaaaaaaaaaaaaaaaaaaa: aaaaaa aaaaaaaaaa aaaa aaaaaaaa aa aaaa aa aaa\n'
            span_id: 280
          ) (Token id:Id.Lit_Chars val:'\n' span_id:281) (Token id:Id.Lit_Chars val:'EOF\n' span_id:282) 
          (Token id:Id.Lit_Chars val:'\tgit shortlog -w >out <<\\EOF &&\n' span_id:283) (Token id:Id.Lit_Chars val:'commit 0000000000000000000000000000000000000001\n' span_id:284) 
          (Token id:Id.Lit_Chars val:'Author: A U Thor <author@example.com>\n' span_id:285) (Token id:Id.Lit_Chars val:'Date:   Thu Apr 7 15:14:13 2005 -0700\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\n' span_id:287) 
          (Token
            id: Id.Lit_Chars
            val: '    aaaaaaaaaaaaaaaaaaaaaa: aaaaaa aaaaaaaaaa aaaa aaaaaaaa aa aaaa aa aaa\n'
            span_id: 288
          ) (Token id:Id.Lit_Chars val:'\n' span_id:289) 
          (Token
            id: Id.Lit_Chars
            val: 'commit 0000000000000000000000000000000000000002\n'
            span_id: 290
          ) (Token id:Id.Lit_Chars val:'Author: A U Thor <author@example.com>\n' span_id:291) 
          (Token id:Id.Lit_Chars val:'Date:   Thu Apr 7 15:14:13 2005 -0700\n' span_id:292) (Token id:Id.Lit_Chars val:'\n' span_id:293) 
          (Token
            id: Id.Lit_Chars
            val: '    bbbbbbbbbbbbbbbbbb: bbbbbbbb bbb bbbb bbbbbbb bb bbbb bbb bbbbb bbbbbb\n'
            span_id: 294
          ) (Token id:Id.Lit_Chars val:'\n' span_id:295) (Token id:Id.Lit_Chars val:'EOF\n' span_id:296) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect out\n' span_id:297)
        )
      }
    )
    (command.ShFunction
      name: iconvfromutf8toiso88591
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(printf)} {(DQ ('%s'))} {(DQ ($ Id.VSub_Star '$*'))})
                (C {(iconv)} {(-f)} {(UTF-8)} {(-t)} {(ISO8859-1)})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DSCHO)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ('J\xc3\xb6h\xc3\xa4nn\xc3\xabs ') 
                (word_part.EscapedLiteral
                  token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:336)
                ) ('Dsch\xc3\xb6') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:338)) 
                (' Schind\xc3\xablin')
              )
            }
          spids: [333]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DSCHOE)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$DSCHO') (' <Johannes.Schindelin@gmx.de>'))}
          spids: [342]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MSG1)
          op: assign_op.Equal
          rhs: {(DQ ('set a1 to 2 and some non-ASCII chars: \xc3\x84\xc3\x9f\xc3\xb8'))}
          spids: [348]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MSG2)
          op: assign_op.Equal
          rhs: {(DQ ('set a1 to 3 and some non-ASCII chars: \xc3\xa1\xc3\xa6\xc3\xaf'))}
          spids: [353]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:360)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:364)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 378
          stdin_parts: [
            ($ Id.VSub_DollarName '$DSCHO')
            (' (2):\n')
            ('      ')
            ($ Id.VSub_DollarName '$MSG1')
            ('\n')
            ('      ')
            ($ Id.VSub_DollarName '$MSG2')
            ('\n')
            ('\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'shortlog encoding' span_id:386))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:390) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard "$commit" &&\n' span_id:391) (Token id:Id.Lit_Chars val:'\tgit config --unset i18n.commitencoding &&\n' span_id:392) 
          (Token id:Id.Lit_Chars val:'\techo 2 > a1 &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\tgit commit --quiet -m "$MSG1" --author="$DSCHOE" a1 &&\n' span_id:394) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config i18n.commitencoding "ISO8859-1" &&\n'
            span_id: 395
          ) (Token id:Id.Lit_Chars val:'\techo 3 > a1 &&\n' span_id:396) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --quiet -m "$(iconvfromutf8toiso88591 "$MSG2")" \\\n'
            span_id: 397
          ) (Token id:Id.Lit_Chars val:'\t\t--author="$(iconvfromutf8toiso88591 "$DSCHOE")" a1 &&\n' span_id:398) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --unset i18n.commitencoding &&\n'
            span_id: 399
          ) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD~2.. > out &&\n' span_id:400) 
          (Token id:Id.Lit_Chars val:'test_cmp expect out' span_id:401)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'shortlog with revision pseudo options' span_id:408))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:412) 
          (Token id:Id.Lit_Chars val:'\tgit shortlog --all &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\tgit shortlog --branches &&\n' span_id:414) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit shortlog --exclude=refs/heads/m* --all\n'
            span_id: 415
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'shortlog with --output=<file>' span_id:422))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:426) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit shortlog --output=shortlog -1 master >output &&\n'
            span_id: 427
          ) (Token id:Id.Lit_Chars val:'\ttest ! -s output &&\n' span_id:428) 
          (Token id:Id.Lit_Chars val:'\ttest_line_count = 3 shortlog\n' span_id:429)
        )
      }
    )
    (C {(test_done)})
  ]
)