(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:'merge-recursive backend test' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup repo with criss-cross history' span_id:73))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\tmkdir data &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\t# create a bunch of files\n' span_id:80) (Token id:Id.Lit_Chars val:'\tn=1 &&\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\twhile test $n -le 10\n' span_id:82) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t\techo $n > data/$n &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\t\tn=$(($n+1)) ||\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\t\treturn 1\n' span_id:86) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\t# check them in\n' span_id:89) (Token id:Id.Lit_Chars val:'\tgit add data &&\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m A &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit branch A &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\t# a file in one branch\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b B A &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit rm data/9 &&\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\tgit add data &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\tgit commit -m B &&\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id:Id.Lit_Chars val:'\t# with a branch off of it\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\tgit branch D &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\t# put some commits on D\n' span_id:103) (Token id:Id.Lit_Chars val:'\tgit checkout D &&\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\techo testD > data/testD &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\tgit add data &&\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m D &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\n' span_id:108) 
          (Token
            id: Id.Lit_Chars
            val: '\t# back up to the top, create another branch and cause\n'
            span_id: 109
          ) (Token id:Id.Lit_Chars val:'\t# a rename conflict with the file we deleted earlier\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b C A &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tgit mv data/9 data/new-9 &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\tgit add data &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit commit -m C &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\n' span_id:115) (Token id:Id.Lit_Chars val:'\t# with a branch off of it\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\tgit branch E &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\t# put a commit on E\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit checkout E &&\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\techo testE > data/testE &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\tgit add data &&\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m E &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\t# now, merge E into B\n' span_id:125) (Token id:Id.Lit_Chars val:'\tgit checkout B &&\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge E &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t# force-resolve\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\tgit add data &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\tgit commit -m F &&\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\tgit branch F &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\t# and merge D into C\n' span_id:133) (Token id:Id.Lit_Chars val:'\tgit checkout C &&\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge D &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\t# force-resolve\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\tgit add data &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\tgit commit -m G &&\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\tgit branch G\n' span_id:139)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'recursive merge between F and G, causes segfault'
            span_id: 146
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\tgit merge F\n' span_id:151)
        )
      }
    )
    (C {(test_done)})
  ]
)