(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (DQ ('git merge\n') ('\n') ('Testing a custom strategy.\n') ('\n') 
                ("*   (HEAD, master) Merge commit 'c3'\n") ('|') ('| * (tag: c3) c3\n') ('* | (tag: c1) c1\n') ('|/\n') ('| * tag: c2) c2\n') ('|/\n') 
                ('* (tag: c0) c0\n')
              )
            }
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <'set up custom strategy'>)} 
      {
        (SQ <'\n'> <'\tcat >git-merge-theirs <<-EOF &&\n'> <'\t#!$SHELL_PATH\n'> 
          <'\teval git read-tree --reset -u \\\\\\$\\$#\n'> <'\tEOF\n'> <'\n'> <'\tchmod +x git-merge-theirs &&\n'> <'\tPATH=.:$PATH &&\n'> <'\texport PATH\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\ttest_commit c0 c0.c &&\n'> <'\ttest_commit c1 c1.c &&\n'> 
          <'\tgit reset --keep c0 &&\n'> <'\techo c1c1 >c1.c &&\n'> <'\tgit add c1.c &&\n'> <'\ttest_commit c2 c2.c &&\n'> 
          <'\tgit reset --keep c0 &&\n'> <'\ttest_commit c3 c3.c\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge c2 with a custom strategy'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\n'> <'\tgit rev-parse c1 >head.old &&\n'> 
          <'\tgit rev-parse c2 >second-parent.expected &&\n'> <'\tgit rev-parse c2^{tree} >tree.expected &&\n'> <'\tgit merge -s theirs c2 &&\n'> <'\n'> 
          <'\tgit rev-parse HEAD >head.new &&\n'> <'\tgit rev-parse HEAD^1 >first-parent &&\n'> <'\tgit rev-parse HEAD^2 >second-parent &&\n'> 
          <'\tgit rev-parse HEAD^{tree} >tree &&\n'> <'\tgit update-index --refresh &&\n'> <'\tgit diff --exit-code &&\n'> 
          <'\tgit diff --exit-code c2 HEAD &&\n'> <'\tgit diff --exit-code c2 &&\n'> <'\n'> <'\t! test_cmp head.old head.new &&\n'> 
          <'\ttest_cmp head.old first-parent &&\n'> <'\ttest_cmp second-parent.expected second-parent &&\n'> <'\ttest_cmp tree.expected tree &&\n'> 
          <'\ttest -f c0.c &&\n'> <'\tgrep c1c1 c1.c &&\n'> <'\ttest -f c2.c\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'trivial merge with custom strategy'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\n'> <'\tgit rev-parse c1 >head.old &&\n'> 
          <'\tgit rev-parse c3 >second-parent.expected &&\n'> <'\tgit rev-parse c3^{tree} >tree.expected &&\n'> <'\tgit merge -s theirs c3 &&\n'> <'\n'> 
          <'\tgit rev-parse HEAD >head.new &&\n'> <'\tgit rev-parse HEAD^1 >first-parent &&\n'> <'\tgit rev-parse HEAD^2 >second-parent &&\n'> 
          <'\tgit rev-parse HEAD^{tree} >tree &&\n'> <'\tgit update-index --refresh &&\n'> <'\tgit diff --exit-code &&\n'> 
          <'\tgit diff --exit-code c3 HEAD &&\n'> <'\tgit diff --exit-code c3 &&\n'> <'\n'> <'\t! test_cmp head.old head.new &&\n'> 
          <'\ttest_cmp head.old first-parent &&\n'> <'\ttest_cmp second-parent.expected second-parent &&\n'> <'\ttest_cmp tree.expected tree &&\n'> 
          <'\ttest -f c0.c &&\n'> <'\t! test -e c1.c &&\n'> <'\ttest -f c3.c\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)