(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"Test criss-cross merge">)}
          spids: [21]
        )
      ]
      spids: [21]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <"prepare repository">)} 
      {
        (SQ <"echo \"1\n"> <"2\n"> <"3\n"> <"4\n"> <"5\n"> <"6\n"> <"7\n"> <"8\n"> <"9\" > file &&\n"> 
          <"git add file &&\n"> <"git commit -m \"Initial commit\" file &&\n"> <"git branch A &&\n"> <"git branch B &&\n"> 
          <"git checkout A &&\n"> <"echo \"1\n"> <"2\n"> <"3\n"> <"4\n"> <"5\n"> <"6\n"> <"7\n"> <"8 changed in B8, branch A\n"> 
          <"9\" > file &&\n"> <"git commit -m \"B8\" file &&\n"> <"git checkout B &&\n"> <"echo \"1\n"> <"2\n"> 
          <"3 changed in C3, branch B\n"> <"4\n"> <"5\n"> <"6\n"> <"7\n"> <"8\n"> <"9\n"> <"\" > file &&\n"> <"git commit -m \"C3\" file &&\n"> 
          <"git branch C3 &&\n"> <"git merge -m \"pre E3 merge\" A &&\n"> <"echo \"1\n"> <"2\n"> 
          <"3 changed in E3, branch B. New file size\n"> <"4\n"> <"5\n"> <"6\n"> <"7\n"> <"8 changed in B8, branch A\n"> <"9\n"> <"\" > file &&\n"> 
          <"git commit -m \"E3\" file &&\n"> <"git checkout A &&\n"> <"git merge -m \"pre D8 merge\" C3 &&\n"> <"echo \"1\n"> <"2\n"> 
          <"3 changed in C3, branch B\n"> <"4\n"> <"5\n"> <"6\n"> <"7\n"> <"8 changed in D8, branch A. New file size 2\n"> <"9\" > file &&\n"> 
          <"git commit -m D8 file">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"Criss-cross merge">)} {(SQ <"git merge -m \"final merge\" B">)})
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(file-expect)} spids:[116])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("1\n") ("2\n") ("3 changed in E3, branch B. New file size\n") ("4\n") ("5\n") ("6\n") 
                ("7\n") ("8 changed in D8, branch A. New file size 2\n") ("9\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [120]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"Criss-cross merge result">)} {(SQ <"cmp file file-expect">)})
    (C {(test_expect_success)} {(SQ <"Criss-cross merge fails (-s resolve)">)} 
      {
        (SQ <"git reset --hard A^ &&\n"> <"test_must_fail git merge -s resolve -m \"final merge\" B">)
      }
    )
    (C {(test_done)})
  ]
)