(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: { (SQ <"git rebase -p should preserve merges\n"> <"\n"> <"Run \"git rebase -p\" and check that merges are properly carried along\n"> ) } spids: [12] ) ] spids: [12] ) (C {(.)} {(./test-lib.sh)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GIT_AUTHOR_EMAIL) op: Equal rhs: {(bogus_email_address)} spids: [24] ) ] spids: [24] ) (C {(export)} {(GIT_AUTHOR_EMAIL)}) (C {(test_expect_success)} {(SQ <"setup for merge-preserving rebase">)} { (SQ <"echo First > A &&\n"> <"\tgit add A &&\n"> <"\tgit commit -m \"Add A1\" &&\n"> <"\tgit checkout -b topic &&\n"> <"\techo Second > B &&\n"> <"\tgit add B &&\n"> <"\tgit commit -m \"Add B1\" &&\n"> <"\tgit checkout -f master &&\n"> <"\techo Third >> A &&\n"> <"\tgit commit -a -m \"Modify A2\" &&\n"> <"\techo Fifth > B &&\n"> <"\tgit add B &&\n"> <"\tgit commit -m \"Add different B\" &&\n"> <"\n"> <"\tgit clone ./. clone2 &&\n"> <"\t(\n"> <"\t\tcd clone2 &&\n"> <"\t\tgit checkout -b topic origin/topic &&\n"> <"\t\ttest_must_fail git merge origin/master &&\n"> <"\t\techo Resolved >B &&\n"> <"\t\tgit add B &&\n"> <"\t\tgit commit -m \"Merge origin/master into topic\"\n"> <"\t) &&\n"> <"\n"> <"\tgit clone ./. clone3 &&\n"> <"\t(\n"> <"\t\tcd clone3 &&\n"> <"\t\tgit checkout -b topic2 origin/topic &&\n"> <"\t\techo Sixth > A &&\n"> <"\t\tgit commit -a -m \"Modify A3\" &&\n"> <"\t\tgit checkout -b topic origin/topic &&\n"> <"\t\tgit merge --no-ff topic2\n"> <"\t) &&\n"> <"\n"> <"\tgit clone ./. clone4 &&\n"> <"\t(\n"> <"\t\tcd clone4 &&\n"> <"\t\tgit checkout -b topic2 origin/topic &&\n"> <"\t\techo Sixth > A &&\n"> <"\t\tgit commit -a -m \"Modify A3\" &&\n"> <"\t\tgit checkout -b topic origin/topic &&\n"> <"\t\tgit merge --no-ff topic2\n"> <"\t) &&\n"> <"\n"> <"\tgit checkout topic &&\n"> <"\techo Fourth >> B &&\n"> <"\tgit commit -a -m \"Modify B2\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue works after a conflict">)} { (SQ <"\n"> <"\t(\n"> <"\tcd clone2 &&\n"> <"\tgit fetch &&\n"> <"\ttest_must_fail git rebase -p origin/topic &&\n"> <"\ttest 2 = $(git ls-files B | wc -l) &&\n"> <"\techo Resolved again > B &&\n"> <"\ttest_must_fail git rebase --continue &&\n"> <"\tgrep \"^@@@ \" .git/rebase-merge/patch &&\n"> <"\tgit add B &&\n"> <"\tgit rebase --continue &&\n"> <"\ttest 1 = $(git rev-list --all --pretty=oneline | grep \"Modify A\" | wc -l) &&\n"> <"\ttest 1 = $(git rev-list --all --pretty=oneline | grep \"Add different\" | wc -l) &&\n"> <"\ttest 1 = $(git rev-list --all --pretty=oneline | grep \"Merge origin\" | wc -l)\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase -p preserves no-ff merges">)} { (SQ <"\n"> <"\t(\n"> <"\tcd clone3 &&\n"> <"\tgit fetch &&\n"> <"\tgit rebase -p origin/topic &&\n"> <"\ttest 3 = $(git rev-list --all --pretty=oneline | grep \"Modify A\" | wc -l) &&\n"> <"\ttest 1 = $(git rev-list --all --pretty=oneline | grep \"Merge branch\" | wc -l)\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"rebase -p ignores merge.log config">)} { (SQ <"\n"> <"\t(\n"> <"\tcd clone4 &&\n"> <"\tgit fetch &&\n"> <"\tgit -c merge.log=1 rebase -p origin/topic &&\n"> <"\techo >expected &&\n"> <"\tgit log --format=\"%b\" -1 >current &&\n"> <"\ttest_cmp expected current\n"> <"\t)\n"> ) } ) (C {(test_done)}) ] )