(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <'merge-recursive backend test'>)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <'setup repo with criss-cross history'>)} { (SQ <'\n'> <'\tmkdir data &&\n'> <'\n'> <'\t# create a bunch of files\n'> <'\tn=1 &&\n'> <'\twhile test $n -le 10\n'> <'\tdo\n'> <'\t\techo $n > data/$n &&\n'> <'\t\tn=$(($n+1)) ||\n'> <'\t\treturn 1\n'> <'\tdone &&\n'> <'\n'> <'\t# check them in\n'> <'\tgit add data &&\n'> <'\tgit commit -m A &&\n'> <'\tgit branch A &&\n'> <'\n'> <'\t# a file in one branch\n'> <'\tgit checkout -b B A &&\n'> <'\tgit rm data/9 &&\n'> <'\tgit add data &&\n'> <'\tgit commit -m B &&\n'> <'\n'> <'\t# with a branch off of it\n'> <'\tgit branch D &&\n'> <'\n'> <'\t# put some commits on D\n'> <'\tgit checkout D &&\n'> <'\techo testD > data/testD &&\n'> <'\tgit add data &&\n'> <'\tgit commit -m D &&\n'> <'\n'> <'\t# back up to the top, create another branch and cause\n'> <'\t# a rename conflict with the file we deleted earlier\n'> <'\tgit checkout -b C A &&\n'> <'\tgit mv data/9 data/new-9 &&\n'> <'\tgit add data &&\n'> <'\tgit commit -m C &&\n'> <'\n'> <'\t# with a branch off of it\n'> <'\tgit branch E &&\n'> <'\n'> <'\t# put a commit on E\n'> <'\tgit checkout E &&\n'> <'\techo testE > data/testE &&\n'> <'\tgit add data &&\n'> <'\tgit commit -m E &&\n'> <'\n'> <'\t# now, merge E into B\n'> <'\tgit checkout B &&\n'> <'\ttest_must_fail git merge E &&\n'> <'\t# force-resolve\n'> <'\tgit add data &&\n'> <'\tgit commit -m F &&\n'> <'\tgit branch F &&\n'> <'\n'> <'\t# and merge D into C\n'> <'\tgit checkout C &&\n'> <'\ttest_must_fail git merge D &&\n'> <'\t# force-resolve\n'> <'\tgit add data &&\n'> <'\tgit commit -m G &&\n'> <'\tgit branch G\n'> ) } ) (C {(test_expect_success)} {(SQ <'recursive merge between F and G, causes segfault'>)} {(SQ <'\n'> <'\tgit merge F\n'>)} ) (C {(test_done)}) ] )