(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"test cherry-picking with --ff option">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <"\n"> <"\techo first > file1 &&\n"> <"\tgit add file1 &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m \"first\" &&\n"> <"\tgit tag first &&\n"> <"\n"> <"\tgit checkout -b other &&\n"> <"\techo second >> file1 &&\n"> 
          <"\tgit add file1 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m \"second\" &&\n"> <"\tgit tag second\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cherry-pick using --ff fast forwards">)} 
      {
        (SQ <"\n"> <"\tgit checkout master &&\n"> <"\tgit reset --hard first &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit cherry-pick --ff second &&\n"> <"\ttest \"$(git rev-parse --verify HEAD)\" = \"$(git rev-parse --verify second)\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cherry-pick not using --ff does not fast forwards">)} 
      {
        (SQ <"\n"> <"\tgit checkout master &&\n"> <"\tgit reset --hard first &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit cherry-pick second &&\n"> <"\ttest \"$(git rev-parse --verify HEAD)\" != \"$(git rev-parse --verify second)\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"merge setup">)} 
      {
        (SQ <"\n"> <"\tgit checkout master &&\n"> <"\tgit reset --hard first &&\n"> 
          <"\techo new line >A &&\n"> <"\tgit add A &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m \"add line to A\" A &&\n"> 
          <"\tgit tag A &&\n"> <"\tgit checkout -b side first &&\n"> <"\techo new line >B &&\n"> <"\tgit add B &&\n"> 
          <"\ttest_tick &&\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"> <"\tgit checkout -b new A\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cherry-pick a non-merge with --ff and -m should fail">)} 
      {
        (SQ <"\n"> <"\tgit reset --hard A -- &&\n"> 
          <"\ttest_must_fail git cherry-pick --ff -m 1 B &&\n"> <"\tgit diff --exit-code A --\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cherry pick a merge with --ff but without -m should fail">)} 
      {
        (SQ <"\n"> <"\tgit reset --hard A -- &&\n"> <"\ttest_must_fail git cherry-pick --ff C &&\n"> 
          <"\tgit diff --exit-code A --\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cherry pick with --ff a merge (1)">)} 
      {
        (SQ <"\n"> <"\tgit reset --hard A -- &&\n"> <"\tgit cherry-pick --ff -m 1 C &&\n"> 
          <"\tgit diff --exit-code C &&\n"> <"\ttest \"$(git rev-parse --verify HEAD)\" = \"$(git rev-parse --verify C)\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cherry pick with --ff a merge (2)">)} 
      {
        (SQ <"\n"> <"\tgit reset --hard B -- &&\n"> <"\tgit cherry-pick --ff -m 2 C &&\n"> 
          <"\tgit diff --exit-code C &&\n"> <"\ttest \"$(git rev-parse --verify HEAD)\" = \"$(git rev-parse --verify C)\"\n">
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <"cherry pick a merge relative to nonexistent parent with --ff should fail">)} {(SQ <"\n"> <"\tgit reset --hard B -- &&\n"> <"\ttest_must_fail git cherry-pick --ff -m 3 C\n">)}
    )
    (C {(test_expect_success)} {(SQ <"cherry pick a root commit with --ff">)} 
      {
        (SQ <"\n"> <"\tgit reset --hard first -- &&\n"> <"\tgit rm file1 &&\n"> 
          <"\techo first >file2 &&\n"> <"\tgit add file2 &&\n"> <"\tgit commit --amend -m \"file2\" &&\n"> 
          <"\tgit cherry-pick --ff first &&\n"> <"\ttest \"$(git rev-parse --verify HEAD)\" = \"1df192cd8bc58a2b275d842cede4d221ad9000d1\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cherry-pick --ff on unborn branch">)} 
      {
        (SQ <"\n"> <"\tgit checkout --orphan unborn &&\n"> <"\tgit rm --cached -r . &&\n"> 
          <"\trm -rf * &&\n"> <"\tgit cherry-pick --ff first &&\n"> <"\ttest_cmp_rev first HEAD\n">
        )
      }
    )
    (C {(test_done)})
  ]
)