(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'cherry picking and reverting a merge\n'> <'\n'> <'\t\tb---c\n'> <'\t       /   /\n'> 
                <'\tinitial---a\n'> <'\n'>
              )
            }
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {<setup>} 
      {
        (SQ <'\n'> <'\n'> <'\t>A &&\n'> <'\t>B &&\n'> <'\tgit add A B &&\n'> 
          <'\tgit commit -m "Initial" &&\n'> <'\tgit tag initial &&\n'> <'\tgit branch side &&\n'> <'\techo new line >A &&\n'> 
          <'\tgit commit -m "add line to A" A &&\n'> <'\tgit tag a &&\n'> <'\tgit checkout side &&\n'> <'\techo new line >B &&\n'> 
          <'\tgit commit -m "add line to B" B &&\n'> <'\tgit tag b &&\n'> <'\tgit checkout master &&\n'> <'\tgit merge side &&\n'> <'\tgit tag c\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry-pick a non-merge with -m should fail'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout a^0 &&\n'> 
          <'\ttest_expect_code 128 git cherry-pick -m 1 b &&\n'> <'\tgit diff --exit-code a --\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry pick a merge without -m should fail'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout a^0 &&\n'> 
          <'\ttest_must_fail git cherry-pick c &&\n'> <'\tgit diff --exit-code a --\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry pick a merge (1)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout a^0 &&\n'> 
          <'\tgit cherry-pick -m 1 c &&\n'> <'\tgit diff --exit-code c\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry pick a merge (2)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout b^0 &&\n'> 
          <'\tgit cherry-pick -m 2 c &&\n'> <'\tgit diff --exit-code c\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry pick a merge relative to nonexistent parent should fail'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout b^0 &&\n'> 
          <'\ttest_must_fail git cherry-pick -m 3 c\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'revert a non-merge with -m should fail'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout c^0 &&\n'> 
          <'\ttest_must_fail git revert -m 1 b &&\n'> <'\tgit diff --exit-code c\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'revert a merge without -m should fail'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout c^0 &&\n'> 
          <'\ttest_must_fail git revert c &&\n'> <'\tgit diff --exit-code c\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'revert a merge (1)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout c^0 &&\n'> 
          <'\tgit revert -m 1 c &&\n'> <'\tgit diff --exit-code a --\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'revert a merge (2)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout c^0 &&\n'> 
          <'\tgit revert -m 2 c &&\n'> <'\tgit diff --exit-code b --\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'revert a merge relative to nonexistent parent should fail'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout c^0 &&\n'> 
          <'\ttest_must_fail git revert -m 3 c &&\n'> <'\tgit diff --exit-code c\n'> <'\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)