(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git rebase --merge test">)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:T) op: Equal rhs: {(DQ ("A quick brown fox\n") ("jumps over the lazy dog."))} spids: [24] ) ] spids: [24] ) (ForEach iter_name: i iter_words: [{(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)} {(10)}] do_arg_iter: False body: (DoGroup children: [(C {(echo)} {(DQ ($ VSub_Name "$i") (" ") ($ VSub_Name "$T"))})] spids: [56 67] ) redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(original)} spids:[69])] spids: [35 -1] ) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\tgit add original &&\n"> <"\tgit commit -m\"initial\" &&\n"> <"\tgit branch side &&\n"> <"\techo \"11 $T\" >>original &&\n"> <"\tgit commit -a -m\"master updates a bit.\" &&\n"> <"\n"> <"\techo \"12 $T\" >>original &&\n"> <"\tgit commit -a -m\"master updates a bit more.\" &&\n"> <"\n"> <"\tgit checkout side &&\n"> <"\t(echo \"0 $T\" ; cat original) >renamed &&\n"> <"\tgit add renamed &&\n"> <"\tgit update-index --force-remove original &&\n"> <"\tgit commit -a -m\"side renames and edits.\" &&\n"> <"\n"> <"\ttr \"[a-z]\" \"[A-Z]\" <original >newfile &&\n"> <"\tgit add newfile &&\n"> <"\tgit commit -a -m\"side edits further.\" &&\n"> <"\tgit branch second-side &&\n"> <"\n"> <"\ttr \"[a-m]\" \"[A-M]\" <original >newfile &&\n"> <"\trm -f original &&\n"> <"\tgit commit -a -m\"side edits once again.\" &&\n"> <"\n"> <"\tgit branch test-rebase side &&\n"> <"\tgit branch test-rebase-pick side &&\n"> <"\tgit branch test-reference-pick side &&\n"> <"\tgit branch test-conflicts side &&\n"> <"\tgit checkout -b test-merge side\n"> ) } ) (C {(test_expect_success)} {(SQ <"reference merge">)} {(SQ <"\n"> <"\tgit merge -s recursive -m \"reference merge\" master\n">)} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PRE_REBASE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(test-rebase)})]) left_token: <Left_CommandSub "$("> spids: [124 130] ) } spids: [123] ) ] spids: [123] ) (C {(test_expect_success)} {(rebase)} {(SQ <"\n"> <"\tgit checkout test-rebase &&\n"> <"\tGIT_TRACE=1 git rebase --merge master\n">)} ) (C {(test_expect_success)} {(SQ <"test-rebase@{1} is pre rebase">)} {(SQ <"\n"> <"\ttest $PRE_REBASE = $(git rev-parse test-rebase@{1})\n">)} ) (C {(test_expect_success)} {(SQ <"merge and rebase should match">)} { (SQ <"\n"> <"\tgit diff-tree -r test-rebase test-merge >difference &&\n"> <"\tif test -s difference\n"> <"\tthen\n"> <"\t\tcat difference\n"> <"\t\t(exit 1)\n"> <"\telse\n"> <"\t\techo happy\n"> <"\tfi\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase the other way">)} {(SQ <"\n"> <"\tgit reset --hard master &&\n"> <"\tgit rebase --merge side\n">)} ) (C {(test_expect_success)} {(SQ <"rebase -Xtheirs">)} { (SQ <"\n"> <"\tgit checkout -b conflicting master~2 &&\n"> <"\techo \"AB $T\" >> original &&\n"> <"\tgit commit -mconflicting original &&\n"> <"\tgit rebase -Xtheirs master &&\n"> <"\tgrep AB original &&\n"> <"\t! grep 11 original\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase -Xtheirs from orphan">)} { (SQ <"\n"> <"\tgit checkout --orphan orphan-conflicting master~2 &&\n"> <"\techo \"AB $T\" >> original &&\n"> <"\tgit commit -morphan-conflicting original &&\n"> <"\tgit rebase -Xtheirs master &&\n"> <"\tgrep AB original &&\n"> <"\t! grep 11 original\n"> ) } ) (C {(test_expect_success)} {(SQ <"merge and rebase should match">)} { (SQ <"\n"> <"\tgit diff-tree -r test-rebase test-merge >difference &&\n"> <"\tif test -s difference\n"> <"\tthen\n"> <"\t\tcat difference\n"> <"\t\t(exit 1)\n"> <"\telse\n"> <"\t\techo happy\n"> <"\tfi\n"> ) } ) (C {(test_expect_success)} {(SQ <"picking rebase">)} { (SQ <"\n"> <"\tgit reset --hard side &&\n"> <"\tgit rebase --merge --onto master side^^ &&\n"> <"\tmb=$(git merge-base master HEAD) &&\n"> <"\tif test \"$mb\" = \"$(git rev-parse master)\"\n"> <"\tthen\n"> <"\t\techo happy\n"> <"\telse\n"> <"\t\tgit show-branch\n"> <"\t\t(exit 1)\n"> <"\tfi &&\n"> <"\tf=$(git diff-tree --name-only HEAD^ HEAD) &&\n"> <"\tg=$(git diff-tree --name-only HEAD^^ HEAD^) &&\n"> <"\tcase \"$f,$g\" in\n"> <"\tnewfile,newfile)\n"> <"\t\techo happy ;;\n"> <"\t*)\n"> <"\t\techo \"$f\"\n"> <"\t\techo \"$g\"\n"> <"\t\t(exit 1)\n"> <"\tesac\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase -s funny -Xopt">)} { (SQ <"\n"> <"\ttest_when_finished \"rm -fr test-bin funny.was.run\" &&\n"> <"\tmkdir test-bin &&\n"> <"\tcat >test-bin/git-merge-funny <<-EOF &&\n"> <"\t#!$SHELL_PATH\n"> <"\tcase \"\\$1\" in --opt) ;; *) exit 2 ;; esac\n"> <"\tshift &&\n"> <"\t>funny.was.run &&\n"> <"\texec git merge-recursive \"\\$@\"\n"> <"\tEOF\n"> <"\tchmod +x test-bin/git-merge-funny &&\n"> <"\tgit reset --hard &&\n"> <"\tgit checkout -b test-funny master^ &&\n"> <"\ttest_commit funny &&\n"> <"\t(\n"> <"\t\tPATH=./test-bin:$PATH\n"> <"\t\tgit rebase -s funny -Xopt master\n"> <"\t) &&\n"> <"\ttest -f funny.was.run\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase --skip works with two conflicts in a row">)} { (SQ <"\n"> <"\tgit checkout second-side &&\n"> <"\ttr \"[A-Z]\" \"[a-z]\" <newfile >tmp &&\n"> <"\tmv tmp newfile &&\n"> <"\tgit commit -a -m\"edit conflicting with side\" &&\n"> <"\ttr \"[d-f]\" \"[D-F]\" <newfile >tmp &&\n"> <"\tmv tmp newfile &&\n"> <"\tgit commit -a -m\"another edit conflicting with side\" &&\n"> <"\ttest_must_fail git rebase --merge test-conflicts &&\n"> <"\ttest_must_fail git rebase --skip &&\n"> <"\tgit rebase --skip\n"> ) } ) (C {(test_done)}) ] )