(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" top-level frontend' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: t3033_reset body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(git)} {(checkout)} {(-B)} {(master)} {(two)}) (C {(git)} {(branch)} {(-f)} {(left)} {(three)}) (C {(git)} {(branch)} {(-f)} {(right)} {(four)}) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) (Token id:Id.Lit_Chars val:'\ttest_commit one &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit branch left &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit branch right &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\ttest_commit two &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\tgit checkout left &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\ttest_commit three &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit checkout right &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\ttest_commit four &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan newroot &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\ttest_commit five &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tgit checkout master\n' span_id:78) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge an octopus into void' span_id:89))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan test &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge left right &&\n' span_id:97) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify HEAD &&\n' span_id: 98 ) (Token id:Id.Lit_Chars val:'\tgit diff --quiet &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse HEAD\n' span_id:100) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge an octopus, fast-forward (ff)' span_id:107))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\tgit reset --hard one &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit merge left right &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\t# one is ancestor of three (left) and four (right)\n' span_id:115) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify HEAD^3 &&\n' span_id: 116 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^1 HEAD^2 | sort >actual &&\n' span_id:117) (Token id: Id.Lit_Chars val: '\tgit rev-parse three four | sort >expect &&\n' span_id: 118 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:119) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge octopus, non-fast-forward (ff)' span_id:126))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:130) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\tgit reset --hard one &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\tgit merge --no-ff left right &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\t# one is ancestor of three (left) and four (right)\n' span_id:134) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify HEAD^4 &&\n' span_id: 135 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&\n' span_id:136) (Token id: Id.Lit_Chars val: '\tgit rev-parse one three four | sort >expect &&\n' span_id: 137 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:138) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge octopus, fast-forward (does not ff)' span_id:145))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\tgit merge left right &&\n' span_id:151) (Token id: Id.Lit_Chars val: '\t# two (master) is not an ancestor of three (left) and four (right)\n' span_id: 152 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify HEAD^4 &&\n' span_id:153) (Token id: Id.Lit_Chars val: '\tgit rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&\n' span_id: 154 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse two three four | sort >expect &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:156) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge octopus, non-fast-forward' span_id:163))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:167) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\tgit merge --no-ff left right &&\n' span_id:169) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify HEAD^4 &&\n' span_id: 170 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&\n' span_id:171) (Token id: Id.Lit_Chars val: '\tgit rev-parse two three four | sort >expect &&\n' span_id: 172 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:173) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge FETCH_HEAD octopus into void' span_id:184))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:188) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan test &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\tgit fetch . left right &&\n' span_id:192) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge FETCH_HEAD &&\n' span_id: 193 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify HEAD &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tgit diff --quiet &&\n' span_id:195) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse HEAD\n' span_id:196) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge FETCH_HEAD octopus fast-forward (ff)' span_id:203))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:207) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tgit reset --hard one &&\n' span_id:209) (Token id:Id.Lit_Chars val:'\tgit fetch . left right &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tgit merge FETCH_HEAD &&\n' span_id:211) (Token id: Id.Lit_Chars val: '\t# one is ancestor of three (left) and four (right)\n' span_id: 212 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify HEAD^3 &&\n' span_id:213) (Token id: Id.Lit_Chars val: '\tgit rev-parse HEAD^1 HEAD^2 | sort >actual &&\n' span_id: 214 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse three four | sort >expect &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:216) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge FETCH_HEAD octopus non-fast-forward (ff)' span_id:223))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:227) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:228) (Token id:Id.Lit_Chars val:'\tgit reset --hard one &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\tgit fetch . left right &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\tgit merge --no-ff FETCH_HEAD &&\n' span_id:231) (Token id: Id.Lit_Chars val: '\t# one is ancestor of three (left) and four (right)\n' span_id: 232 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify HEAD^4 &&\n' span_id:233) (Token id: Id.Lit_Chars val: '\tgit rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&\n' span_id: 234 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse one three four | sort >expect &&\n' span_id:235) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:236) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'merge FETCH_HEAD octopus fast-forward (does not ff)' span_id: 243 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:247) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\tgit fetch . left right &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\tgit merge FETCH_HEAD &&\n' span_id:250) (Token id: Id.Lit_Chars val: '\t# two (master) is not an ancestor of three (left) and four (right)\n' span_id: 251 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify HEAD^4 &&\n' span_id:252) (Token id: Id.Lit_Chars val: '\tgit rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&\n' span_id: 253 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse two three four | sort >expect &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:255) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge FETCH_HEAD octopus non-fast-forward' span_id:262))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:266) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\tgit fetch . left right &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tgit merge --no-ff FETCH_HEAD &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify HEAD^4 &&\n' span_id:270) (Token id: Id.Lit_Chars val: '\tgit rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&\n' span_id: 271 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse two three four | sort >expect &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:273) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'refuse two-project merge by default' span_id:283))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:287) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\tgit reset --hard four &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge five\n' span_id:290) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'two-project merge with --allow-unrelated-histories' span_id: 297 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:301) (Token id:Id.Lit_Chars val:'\tt3033_reset &&\n' span_id:302) (Token id:Id.Lit_Chars val:'\tgit reset --hard four &&\n' span_id:303) (Token id: Id.Lit_Chars val: '\tgit merge --allow-unrelated-histories five &&\n' span_id: 304 ) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code five\n' span_id:305) ) } ) (C {(test_done)}) ] )