(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 cherry-picking (and reverting) a root commit'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\techo first > file1 &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\tgit add file1 &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\tgit commit -m "first" &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit symbolic-ref HEAD refs/heads/second &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\trm .git/index file1 &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\techo second > file2 &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "second" &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\n' span_id:33) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit symbolic-ref HEAD refs/heads/third &&\n'
            span_id: 34
          ) (Token id:Id.Lit_Chars val:'\trm .git/index file2 &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\techo third > file3 &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit add file3 &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\tgit commit -m "third"\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\n' span_id:40)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cherry-pick a root commit' span_id:47))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:51) (Token id:Id.Lit_Chars val:'\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\tgit checkout second^0 &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit cherry-pick master &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\techo first >expect &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\ttest_cmp expect file1\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\n' span_id:57)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'revert a root commit' span_id:64))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:68) (Token id:Id.Lit_Chars val:'\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\tgit revert master &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing file1\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\n' span_id:72)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cherry-pick a root commit with an external strategy'
            span_id: 79
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:83) (Token id:Id.Lit_Chars val:'\n' span_id:84) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cherry-pick --strategy=resolve master &&\n'
            span_id: 85
          ) (Token id:Id.Lit_Chars val:'\techo first >expect &&\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect file1\n' span_id:87) (Token id:Id.Lit_Chars val:'\n' span_id:88)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'revert a root commit with an external strategy' span_id:95))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id:Id.Lit_Chars val:'\n' span_id:100) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit revert --strategy=resolve master &&\n'
            span_id: 101
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing file1\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\n' span_id:103)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cherry-pick two root commits' span_id:110))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:114) (Token id:Id.Lit_Chars val:'\n' span_id:115) 
          (Token id:Id.Lit_Chars val:'\techo first >expect.file1 &&\n' span_id:116) (Token id:Id.Lit_Chars val:'\techo second >expect.file2 &&\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\techo third >expect.file3 &&\n' span_id:118) (Token id:Id.Lit_Chars val:'\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tgit checkout second^0 &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\tgit cherry-pick master third &&\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.file1 file1 &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.file2 file2 &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.file3 file3 &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify HEAD^^ &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify HEAD^^^\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\n' span_id:128)
        )
      }
    )
    (C {(test_done)})
  ]
)