(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'test cherry-pick and revert with renames\n'> <'\n'> <'  --\n'> 
                <'   + rename2: renames oops to opos\n'> <'  +  rename1: renames oops to spoo\n'> <'  +  added:   adds extra line to oops\n'> 
                <'  ++ initial: has lines in oops\n'> <'\n'>
              )
            }
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {<setup>} 
      {
        (SQ <'\n'> <'\n'> <'\tfor l in a b c d e f g h i j k l m n o\n'> <'\tdo\n'> 
          <'\t\techo $l$l$l$l$l$l$l$l$l\n'> <'\tdone >oops &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\tgit add oops &&\n'> 
          <'\tgit commit -m initial &&\n'> <'\tgit tag initial &&\n'> <'\n'> <'\ttest_tick &&\n'> 
          <'\techo "Add extra line at the end" >>oops &&\n'> <'\tgit commit -a -m added &&\n'> <'\tgit tag added &&\n'> <'\n'> <'\ttest_tick &&\n'> 
          <'\tgit mv oops spoo &&\n'> <'\tgit commit -m rename1 &&\n'> <'\tgit tag rename1 &&\n'> <'\n'> <'\ttest_tick &&\n'> 
          <'\tgit checkout -b side initial &&\n'> <'\tgit mv oops opos &&\n'> <'\tgit commit -m rename2 &&\n'> <'\tgit tag rename2\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry-pick --nonsense'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tpos=$(git rev-parse HEAD) &&\n'> <'\tgit diff --exit-code HEAD &&\n'> 
          <'\ttest_must_fail git cherry-pick --nonsense 2>msg &&\n'> <'\tgit diff --exit-code HEAD "$pos" &&\n'> <'\ttest_i18ngrep '>
        ) <Id.Lit_LBracket '['> <Uu> <Id.Lit_RBracket ']'> <sage> <Id.Lit_Colon ':'> (SQ <' msg\n'>)
      }
    )
    (C {<test_expect_success>} {(SQ <'revert --nonsense'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tpos=$(git rev-parse HEAD) &&\n'> <'\tgit diff --exit-code HEAD &&\n'> 
          <'\ttest_must_fail git revert --nonsense 2>msg &&\n'> <'\tgit diff --exit-code HEAD "$pos" &&\n'> <'\ttest_i18ngrep '>
        ) <Id.Lit_LBracket '['> <Uu> <Id.Lit_RBracket ']'> <sage> <Id.Lit_Colon ':'> (SQ <' msg\n'>)
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry-pick after renaming branch'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit checkout rename2 &&\n'> <'\tgit cherry-pick added &&\n'> 
          <'\ttest $(git rev-parse HEAD^) = $(git rev-parse rename2) &&\n'> <'\ttest -f opos &&\n'> <'\tgrep "Add extra line at the end" opos &&\n'> 
          <'\tgit reflog -1 | grep cherry-pick\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'revert after renaming branch'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit checkout rename1 &&\n'> <'\tgit revert added &&\n'> 
          <'\ttest $(git rev-parse HEAD^) = $(git rev-parse rename1) &&\n'> <'\ttest -f spoo &&\n'> <'\t! grep "Add extra line at the end" spoo &&\n'> 
          <'\tgit reflog -1 | grep revert\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry-pick on stat-dirty working tree'>)} 
      {
        (SQ <'\n'> <'\tgit clone . copy &&\n'> <'\t(\n'> <'\t\tcd copy &&\n'> 
          <'\t\tgit checkout initial &&\n'> <'\t\ttest-chmtime +40 oops &&\n'> <'\t\tgit cherry-pick added\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'revert forbidden on dirty working tree'>)} 
      {
        (SQ <'\n'> <'\n'> <'\techo content >extra_file &&\n'> <'\tgit add extra_file &&\n'> 
          <'\ttest_must_fail git revert HEAD 2>errors &&\n'> <'\ttest_i18ngrep "your local changes would be overwritten by " errors\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry-pick on unborn branch'>)} 
      {
        (SQ <'\n'> <'\tgit checkout --orphan unborn &&\n'> <'\tgit rm --cached -r . &&\n'> 
          <'\trm -rf * &&\n'> <'\tgit cherry-pick initial &&\n'> <'\tgit diff --quiet initial &&\n'> 
          <'\t! test_cmp_rev initial HEAD\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry-pick "-" to pick from previous branch'>)} 
      {
        (SQ <'\n'> <'\tgit checkout unborn &&\n'> <'\ttest_commit to-pick actual content &&\n'> 
          <'\tgit checkout master &&\n'> <'\tgit cherry-pick - &&\n'> <'\techo content >expect &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry-pick "-" is meaningless without checkout'>)} 
      {
        (SQ <'\n'> <'\ttest_create_repo afresh &&\n'> <'\t(\n'> <'\t\tcd afresh &&\n'> 
          <'\t\ttest_commit one &&\n'> <'\t\ttest_commit two &&\n'> <'\t\ttest_commit three &&\n'> <'\t\ttest_must_fail git cherry-pick -\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry-pick "-" works with arguments'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -b side-branch &&\n'> <'\ttest_commit change actual change &&\n'> 
          <'\tgit checkout master &&\n'> <'\tgit cherry-pick -s - &&\n'> 
          <'\techo "Signed-off-by: C O Mitter <committer@example.com>" >expect &&\n'> <'\tgit cat-file commit HEAD | grep ^Signed-off-by: >signoff &&\n'> <'\ttest_cmp expect signoff &&\n'> 
          <'\techo change >expect &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)