(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:'git merge\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id: Id.Lit_Chars val: 'Testing octopus merge when reducing parents to independent branches.' span_id: 8 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:39))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) (Token id:Id.Lit_Chars val:'\techo c0 > c0.c &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tgit add c0.c &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tgit commit -m c0 &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\tgit tag c0 &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\techo c1 > c1.c &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\tgit add c1.c &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit commit -m c1 &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tgit tag c1 &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\techo c2 > c2.c &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit add c2.c &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\tgit commit -m c2 &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\tgit tag c2 &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\techo c3 > c3.c &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\tgit add c3.c &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\tgit commit -m c3 &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit tag c3 &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\techo c4 > c4.c &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\tgit add c4.c &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\tgit commit -m c4 &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit tag c4 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\techo c5 > c5.c &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit add c5.c &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit commit -m c5 &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit tag c5\n' span_id:70) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2, c3, c4, c5' span_id:77))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\tgit merge c2 c3 c4 c5 &&\n' span_id:83) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&\n' span_id: 84 ) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&\n' span_id: 85 ) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&\n' span_id: 86 ) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&\n' span_id: 87 ) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&\n' span_id: 88 ) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\ttest -f c0.c &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\ttest -f c1.c &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\ttest -f c2.c &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\ttest -f c3.c &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\ttest -f c4.c &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\ttest -f c5.c &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit show --format=%s -s >actual &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\t! grep c1 actual &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\tgrep c2 actual &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\tgrep c3 actual &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\t! grep c4 actual &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\tgrep c5 actual\n' span_id:101) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pull c2, c3, c4, c5 into c1' span_id:108))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:112) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit pull . c2 c3 c4 c5 &&\n' span_id:114) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&\n' span_id: 115 ) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&\n' span_id: 116 ) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&\n' span_id: 117 ) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&\n' span_id: 118 ) (Token id: Id.Lit_Chars val: '\ttest "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&\n' span_id: 119 ) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\ttest -f c0.c &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\ttest -f c1.c &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest -f c2.c &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\ttest -f c3.c &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\ttest -f c4.c &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\ttest -f c5.c &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\tgit show --format=%s -s >actual &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t! grep c1 actual &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\tgrep c2 actual &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\tgrep c3 actual &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\t! grep c4 actual &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\tgrep c5 actual\n' span_id:132) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:139))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:143) (Token id:Id.Lit_Chars val:'\tfor i in A B C D E\n' span_id:144) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:145) (Token id:Id.Lit_Chars val:'\t\techo $i > $i.c &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\t\tgit add $i.c &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\t\tgit commit -m $i &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\t\tgit tag $i\n' span_id:149) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\tgit reset --hard A &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\tfor i in F G H I\n' span_id:152) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:153) (Token id:Id.Lit_Chars val:'\t\techo $i > $i.c &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\t\tgit add $i.c &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\t\tgit commit -m $i &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\t\tgit tag $i\n' span_id:157) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:158) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge E and I' span_id:165))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:169) (Token id:Id.Lit_Chars val:'\tgit reset --hard A &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\tgit merge E I\n' span_id:171) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify merge result' span_id:178))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:182) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD^1) = $(git rev-parse E) &&\n' span_id: 183 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse HEAD^2) = $(git rev-parse I)\n' span_id:184) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add conflicts' span_id:191))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:195) (Token id:Id.Lit_Chars val:'\tgit reset --hard E &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\techo foo > file.c &&\n' span_id:197) (Token id:Id.Lit_Chars val:'\tgit add file.c &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\tgit commit -m E2 &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\tgit tag E2 &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit reset --hard I &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\techo bar >file.c &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\tgit add file.c &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\tgit commit -m I2 &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\tgit tag I2\n' span_id:205) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'merge E2 and I2, causing a conflict and resolve it' span_id: 212 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) (Token id:Id.Lit_Chars val:'\tgit reset --hard A &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge E2 I2 &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\techo baz > file.c &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\tgit add file.c &&\n' span_id:220) (Token id:Id.Lit_Chars val:'\tgit commit -m "resolve conflict"\n' span_id:221) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify merge result' span_id:228))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:232) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD^1) = $(git rev-parse E2) &&\n' span_id: 233 ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse HEAD^2) = $(git rev-parse I2)\n' span_id:234) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fast-forward to redundant refs' span_id:241))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:245) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\tgit merge c4 c5\n' span_id:247) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify merge result' span_id:254))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD) = $(git rev-parse c5)\n' span_id: 259 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge up-to-date redundant refs' span_id:266))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:270) (Token id:Id.Lit_Chars val:'\tgit reset --hard c5 &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\tgit merge c0 c4\n' span_id:272) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify merge result' span_id:279))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:283) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD) = $(git rev-parse c5)\n' span_id: 284 ) ) } ) (C {(test_done)}) ] )