(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'Test merge without common ancestors'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_DATE)
          op: assign_op.Equal
          rhs: {(DQ <'2006-12-12 23:28:00 +0100'>)}
          spids: [34]
        )
      ]
    )
    (C {<export>} {<GIT_COMMITTER_DATE>})
    (C {<test_expect_success>} {(DQ <'setup tests'>)} 
      {
        (SQ <'\n'> <'echo 1 > a1 &&\n'> <'git add a1 &&\n'> 
          <'GIT_AUTHOR_DATE="2006-12-12 23:00:00" git commit -m 1 a1 &&\n'> <'\n'> <'git checkout -b A master &&\n'> <'echo A > a1 &&\n'> 
          <'GIT_AUTHOR_DATE="2006-12-12 23:00:01" git commit -m A a1 &&\n'> <'\n'> <'git checkout -b B master &&\n'> <'echo B > a1 &&\n'> 
          <'GIT_AUTHOR_DATE="2006-12-12 23:00:02" git commit -m B a1 &&\n'> <'\n'> <'git checkout -b D A &&\n'> <'git rev-parse B > .git/MERGE_HEAD &&\n'> <'echo D > a1 &&\n'> 
          <'git update-index a1 &&\n'> <'GIT_AUTHOR_DATE="2006-12-12 23:00:03" git commit -m D &&\n'> <'\n'> 
          <'git symbolic-ref HEAD refs/heads/other &&\n'> <'echo 2 > a1 &&\n'> <'GIT_AUTHOR_DATE="2006-12-12 23:00:04" git commit -m 2 a1 &&\n'> <'\n'> 
          <'git checkout -b C &&\n'> <'echo C > a1 &&\n'> <'GIT_AUTHOR_DATE="2006-12-12 23:00:05" git commit -m C a1 &&\n'> <'\n'> 
          <'git checkout -b E C &&\n'> <'git rev-parse B > .git/MERGE_HEAD &&\n'> <'echo E > a1 &&\n'> <'git update-index a1 &&\n'> 
          <'GIT_AUTHOR_DATE="2006-12-12 23:00:06" git commit -m E &&\n'> <'\n'> <'git checkout -b G E &&\n'> <'git rev-parse A > .git/MERGE_HEAD &&\n'> <'echo G > a1 &&\n'> 
          <'git update-index a1 &&\n'> <'GIT_AUTHOR_DATE="2006-12-12 23:00:07" git commit -m G &&\n'> <'\n'> <'git checkout -b F D &&\n'> 
          <'git rev-parse C > .git/MERGE_HEAD &&\n'> <'echo F > a1 &&\n'> <'git update-index a1 &&\n'> 
          <'GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F\n'>
        )
      }
    )
    (C {<test_expect_success>} {(DQ <'combined merge conflicts'>)} 
      {(DQ <'\n'> <'\ttest_must_fail git merge -m final G\n'>)}
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 126
              stdin_parts: [<'<<<<<<< HEAD\n'> <'F\n'> <'=======\n'> <'G\n'> <'>>>>>>> G\n'>]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(DQ <'result contains a conflict'>)} {(DQ <'test_cmp expect a1'>)})
    (command.Simple
      words: [{<git>} {<ls-files>} {<--stage>}]
      redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<out>})]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 163
              stdin_parts: [
                <'100644 ec3fe2a791706733f2d8fa7ad45d9a9672031f5e 1\ta1\n'>
                <'100644 cf84443e49e1b366fac938711ddf4be2d4d1d9e9 2\ta1\n'>
                <'100644 fd7923529855d0b274795ae3349c5e0438333979 3\ta1\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(DQ <'virtual trees were processed'>)} {(DQ <'test_cmp expect out'>)})
    (C {<test_expect_success>} {(SQ <'refuse to merge binary files'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tprintf "\\0" > binary-file &&\n'> 
          <'\tgit add binary-file &&\n'> <'\tgit commit -m binary &&\n'> <'\tgit checkout G &&\n'> <'\tprintf "\\0\\0" > binary-file &&\n'> 
          <'\tgit add binary-file &&\n'> <'\tgit commit -m binary2 &&\n'> <'\ttest_must_fail git merge F > merge.out 2> merge.err &&\n'> 
          <'\tgrep "Cannot merge binary files: binary-file (HEAD vs. F)" merge.err\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'mark rename/delete as unmerged'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout -b delete &&\n'> 
          <'\tgit rm a1 &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m delete &&\n'> <'\tgit checkout -b rename HEAD^ &&\n'> 
          <'\tgit mv a1 a2 &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m rename &&\n'> <'\ttest_must_fail git merge delete &&\n'> 
          <'\ttest 1 = $(git ls-files --unmerged | wc -l) &&\n'> <'\tgit rev-parse --verify :2:a2 &&\n'> <'\ttest_must_fail git rev-parse --verify :3:a2 &&\n'> 
          <'\tgit checkout -f delete &&\n'> <'\ttest_must_fail git merge rename &&\n'> <'\ttest 1 = $(git ls-files --unmerged | wc -l) &&\n'> 
          <'\ttest_must_fail git rev-parse --verify :2:a2 &&\n'> <'\tgit rev-parse --verify :3:a2\n'> <'\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)