(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'Test merge without common ancestors' span_id:6))}
          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 (Token id:Id.Lit_Chars val:'\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'echo 1 > a1 &&\n' span_id:52) (Token id:Id.Lit_Chars val:'git add a1 &&\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:00" git commit -m 1 a1 &&\n'
            span_id: 54
          ) (Token id:Id.Lit_Chars val:'\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'git checkout -b A master &&\n' span_id:56) (Token id:Id.Lit_Chars val:'echo A > a1 &&\n' span_id:57) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:01" git commit -m A a1 &&\n'
            span_id: 58
          ) (Token id:Id.Lit_Chars val:'\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'git checkout -b B master &&\n' span_id:60) (Token id:Id.Lit_Chars val:'echo B > a1 &&\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:02" git commit -m B a1 &&\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'git checkout -b D A &&\n' span_id:64) (Token id:Id.Lit_Chars val:'git rev-parse B > .git/MERGE_HEAD &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'echo D > a1 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'git update-index a1 &&\n' span_id:67) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:03" git commit -m D &&\n'
            span_id: 68
          ) (Token id:Id.Lit_Chars val:'\n' span_id:69) 
          (Token
            id: Id.Lit_Chars
            val: 'git symbolic-ref HEAD refs/heads/other &&\n'
            span_id: 70
          ) (Token id:Id.Lit_Chars val:'echo 2 > a1 &&\n' span_id:71) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:04" git commit -m 2 a1 &&\n'
            span_id: 72
          ) (Token id:Id.Lit_Chars val:'\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'git checkout -b C &&\n' span_id:74) (Token id:Id.Lit_Chars val:'echo C > a1 &&\n' span_id:75) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:05" git commit -m C a1 &&\n'
            span_id: 76
          ) (Token id:Id.Lit_Chars val:'\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'git checkout -b E C &&\n' span_id:78) (Token id:Id.Lit_Chars val:'git rev-parse B > .git/MERGE_HEAD &&\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'echo E > a1 &&\n' span_id:80) (Token id:Id.Lit_Chars val:'git update-index a1 &&\n' span_id:81) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:06" git commit -m E &&\n'
            span_id: 82
          ) (Token id:Id.Lit_Chars val:'\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'git checkout -b G E &&\n' span_id:84) (Token id:Id.Lit_Chars val:'git rev-parse A > .git/MERGE_HEAD &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'echo G > a1 &&\n' span_id:86) (Token id:Id.Lit_Chars val:'git update-index a1 &&\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:07" git commit -m G &&\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'git checkout -b F D &&\n' span_id:90) (Token id:Id.Lit_Chars val:'git rev-parse C > .git/MERGE_HEAD &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'echo F > a1 &&\n' span_id:92) (Token id:Id.Lit_Chars val:'git update-index a1 &&\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F\n'
            span_id: 94
          )
        )
      }
    )
    (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.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:112)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:116)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 126
          stdin_parts: [('<<<<<<< HEAD\n') ('F\n') ('=======\n') ('G\n') ('>>>>>>> G\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('result contains a conflict'))} {(DQ ('test_cmp expect a1'))})
    (command.Simple
      words: [{(git)} {(ls-files)} {(--stage)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:145) fd:-1 arg_word:{(out)})]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:151)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:155)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('virtual trees were processed'))} {(DQ ('test_cmp expect out'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'refuse to merge binary files' span_id:179))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:183) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\tprintf "\\0" > binary-file &&\n' span_id:185) 
          (Token id:Id.Lit_Chars val:'\tgit add binary-file &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\tgit commit -m binary &&\n' span_id:187) 
          (Token id:Id.Lit_Chars val:'\tgit checkout G &&\n' span_id:188) (Token id:Id.Lit_Chars val:'\tprintf "\\0\\0" > binary-file &&\n' span_id:189) 
          (Token id:Id.Lit_Chars val:'\tgit add binary-file &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit commit -m binary2 &&\n' span_id:191) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge F > merge.out 2> merge.err &&\n'
            span_id: 192
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "Cannot merge binary files: binary-file (HEAD vs. F)" merge.err\n'
            span_id: 193
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'mark rename/delete as unmerged' span_id:200))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:204) (Token id:Id.Lit_Chars val:'\n' span_id:205) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\tgit checkout -b delete &&\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\tgit rm a1 &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m delete &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tgit checkout -b rename HEAD^ &&\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\tgit mv a1 a2 &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m rename &&\n' span_id:214) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge delete &&\n' span_id:215) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 1 = $(git ls-files --unmerged | wc -l) &&\n'
            span_id: 216
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify :2:a2 &&\n' span_id:217) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify :3:a2 &&\n'
            span_id: 218
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -f delete &&\n' span_id:219) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge rename &&\n' span_id:220) (Token id:Id.Lit_Chars val:'\ttest 1 = $(git ls-files --unmerged | wc -l) &&\n' span_id:221) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify :2:a2 &&\n'
            span_id: 222
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify :3:a2\n' span_id:223) 
          (Token id:Id.Lit_Chars val:'\n' span_id:224)
        )
      }
    )
    (C {(test_done)})
  ]
)