(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:'cherry picking and reverting a merge\n' span_id:6) 
                (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:'\t\tb---c\n' span_id:8) 
                (Token id:Id.Lit_Chars val:'\t       /   /\n' span_id:9) (Token id:Id.Lit_Chars val:'\tinitial---a\n' span_id:10) (Token id:Id.Lit_Chars val:'\n' span_id:11)
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:25) (Token id:Id.Lit_Chars val:'\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\t>A &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\t>B &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\tgit add A B &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tgit commit -m "Initial" &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\tgit tag initial &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tgit branch side &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\techo new line >A &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit commit -m "add line to A" A &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tgit tag a &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\tgit checkout side &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\techo new line >B &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit commit -m "add line to B" B &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\tgit tag b &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\tgit merge side &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tgit tag c\n' span_id:42) (Token id:Id.Lit_Chars val:'\n' span_id:43)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cherry-pick a non-merge with -m should fail' span_id:50))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:54) (Token id:Id.Lit_Chars val:'\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\tgit checkout a^0 &&\n' span_id:57) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_expect_code 128 git cherry-pick -m 1 b &&\n'
            span_id: 58
          ) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code a --\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\n' span_id:60)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cherry pick a merge without -m should fail' span_id:67))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:71) (Token id:Id.Lit_Chars val:'\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit checkout a^0 &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git cherry-pick c &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code a --\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\n' span_id:77)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cherry pick a merge (1)' span_id:84))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:88) (Token id:Id.Lit_Chars val:'\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tgit checkout a^0 &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\tgit cherry-pick -m 1 c &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\n' span_id:94)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cherry pick a merge (2)' span_id:101))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:105) (Token id:Id.Lit_Chars val:'\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\tgit checkout b^0 &&\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\tgit cherry-pick -m 2 c &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\n' span_id:111)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cherry pick a merge relative to nonexistent parent should fail'
            span_id: 118
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:122) (Token id:Id.Lit_Chars val:'\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\tgit checkout b^0 &&\n' span_id:125) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git cherry-pick -m 3 c\n'
            span_id: 126
          ) (Token id:Id.Lit_Chars val:'\n' span_id:127)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'revert a non-merge with -m should fail' span_id:134))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:138) (Token id:Id.Lit_Chars val:'\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\tgit checkout c^0 &&\n' span_id:141) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert -m 1 b &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c\n' span_id:143) 
          (Token id:Id.Lit_Chars val:'\n' span_id:144)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'revert a merge without -m should fail' span_id:151))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:155) (Token id:Id.Lit_Chars val:'\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tgit checkout c^0 &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert c &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'\n' span_id:161)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'revert a merge (1)' span_id:168))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:172) (Token id:Id.Lit_Chars val:'\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\tgit checkout c^0 &&\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\tgit revert -m 1 c &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code a --\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'\n' span_id:178)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'revert a merge (2)' span_id:185))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:189) (Token id:Id.Lit_Chars val:'\n' span_id:190) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\tgit checkout c^0 &&\n' span_id:192) 
          (Token id:Id.Lit_Chars val:'\tgit revert -m 2 c &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code b --\n' span_id:194) 
          (Token id:Id.Lit_Chars val:'\n' span_id:195)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'revert a merge relative to nonexistent parent should fail'
            span_id: 202
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:206) (Token id:Id.Lit_Chars val:'\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tgit checkout c^0 &&\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert -m 3 c &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\n' span_id:212)
        )
      }
    )
    (C {(test_done)})
  ]
)