(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:'test git rev-list --cherry-pick -- file' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\techo Hallo > foo &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\tgit commit -m "A" &&\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tgit checkout -b branch &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\techo Bello > foo &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\techo Cello > bar &&\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tgit add foo bar &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "C" &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\tgit tag C &&\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\techo Dello > bar &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\tgit add bar &&\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit commit -m "E" &&\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\tgit tag E &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tgit checkout branch foo &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "B" &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tgit tag B &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\techo Cello > bar &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit add bar &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\tgit commit -m "D" &&\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tgit tag D &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\techo Nello > bar &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\tgit add bar &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "F" &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\tgit tag F\n' span_id:77)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:83) fd:-1 arg_word:{(expect)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:86)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 92
          stdin_parts: [('<tags/B\n') ('>tags/C\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--left-right span_id:97))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:101) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --left-right B...C > actual &&\n'
            span_id: 102
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:105)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--count span_id:112))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:116) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --count B...C > actual &&\n'
            span_id: 117
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat actual)" = 2\n' span_id:118)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick foo comes up empty' span_id:125))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:129) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -z "$(git rev-list --left-right --cherry-pick B...C -- foo)"\n'
            span_id: 130
          )
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:136)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:139)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 144
          stdin_parts: [('>tags/C\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick bar does not come up empty' span_id:149))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:153) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --left-right --cherry-pick B...C -- bar > actual &&\n'
            span_id: 154
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:157)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'bar does not come up empty' span_id:164))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:168) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --left-right B...C -- bar > actual &&\n'
            span_id: 169
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:170) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:172)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:178)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:181)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 187
          stdin_parts: [('<tags/F\n') ('>tags/E\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick bar does not come up empty (II)' span_id:192))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:196) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --left-right --cherry-pick F...E -- bar > actual &&\n'
            span_id: 197
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:198) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:200)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:206)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:209)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 217
          stdin_parts: [('+tags/F\n') ('=tags/D\n') ('+tags/E\n') ('=tags/C\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--cherry-mark span_id:222))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry-mark F...E -- bar > actual &&\n'
            span_id: 227
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:230)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:236)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:239)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 247
          stdin_parts: [('<tags/F\n') ('=tags/D\n') ('>tags/E\n') ('=tags/C\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--cherry-mark --left-right' span_id:252))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:256) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry-mark --left-right F...E -- bar > actual &&\n'
            span_id: 257
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:258) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:260)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:266)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:269)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 274
          stdin_parts: [('tags/E\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick --right-only' span_id:279))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:283) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry-pick --right-only F...E -- bar > actual &&\n'
            span_id: 284
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:285) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:287)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick --left-only' span_id:294))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry-pick --left-only E...F -- bar > actual &&\n'
            span_id: 299
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:302)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:308)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:311)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 317
          stdin_parts: [('+tags/E\n') ('=tags/C\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--cherry span_id:322))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:326) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry F...E -- bar > actual &&\n'
            span_id: 327
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:328) 
          (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:329) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:330)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:336)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:339)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 344
          stdin_parts: [('1\t1\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry --count' span_id:349))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:353) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry --count F...E -- bar > actual &&\n'
            span_id: 354
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:355)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:361)
          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: 369
          stdin_parts: [('2\t2\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-mark --count' span_id:374))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:378) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry-mark --count F...E -- bar > actual &&\n'
            span_id: 379
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:380)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:386)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:389)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 394
          stdin_parts: [('1\t1\t2\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--cherry-mark --left-right --count' span_id:399))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:403) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry-mark --left-right --count F...E -- bar > actual &&\n'
            span_id: 404
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:405)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--cherry-pick with independent, but identical branches'
            span_id: 412
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:416) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit symbolic-ref HEAD refs/heads/independent &&\n'
            span_id: 417
          ) (Token id:Id.Lit_Chars val:'\trm .git/index &&\n' span_id:418) 
          (Token id:Id.Lit_Chars val:'\techo Hallo > foo &&\n' span_id:419) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:420) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:421) (Token id:Id.Lit_Chars val:'\tgit commit -m "independent" &&\n' span_id:422) 
          (Token id:Id.Lit_Chars val:'\techo Bello > foo &&\n' span_id:423) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:424) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "independent, too" foo &&\n'
            span_id: 425
          ) (Token id:Id.Lit_Chars val:'\ttest -z "$(git rev-list --left-right --cherry-pick \\\n' span_id:426) 
          (Token id:Id.Lit_Chars val:'\t\tHEAD...master -- foo)"\n' span_id:427)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:433)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:436)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 441
          stdin_parts: [('1\t2\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--count --left-right' span_id:446))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:450) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --count --left-right C...D > actual &&\n'
            span_id: 451
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:452)
        )
      }
    )
    (command.ShFunction
      name: remove_loose_object
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:sha1)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:472)
                              command_list: 
                                (command.CommandList
                                  children: [(C {(git)} {(rev-parse)} {(DQ ($ Id.VSub_Number '$1'))})]
                                )
                            )
                          )
                        }
                      spids: [470]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:remainder)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:sha1 span_id:488)
                            suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('??')})
                          )
                        }
                      spids: [486]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:firsttwo)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:sha1 span_id:498)
                            suffix_op: 
                              (suffix_op.Unary
                                op_id: Id.VOp1_Percent
                                arg_word: {($ Id.VSub_DollarName '$remainder')}
                              )
                          )
                        }
                      spids: [496]
                    )
                  ]
                )
                (C {(rm)} 
                  {(.git/objects/) ($ Id.VSub_DollarName '$firsttwo') (/) 
                    ($ Id.VSub_DollarName '$remainder')
                  }
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick avoids looking at full diffs' span_id:519))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:523) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b shy-diff &&\n' span_id:524) (Token id:Id.Lit_Chars val:'\ttest_commit dont-look-at-me &&\n' span_id:525) 
          (Token id:Id.Lit_Chars val:'\techo Hello >dont-look-at-me.t &&\n' span_id:526) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:527) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m tip dont-look-at-me.t &&\n'
            span_id: 528
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -b mainline HEAD^ &&\n' span_id:529) 
          (Token id:Id.Lit_Chars val:'\ttest_commit to-cherry-pick &&\n' span_id:530) (Token id:Id.Lit_Chars val:'\tremove_loose_object shy-diff^:dont-look-at-me.t &&\n' span_id:531) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --cherry-pick ...shy-diff\n'
            span_id: 532
          )
        )
      }
    )
    (C {(test_done)})
  ]
)