#!/bin/sh # # Copyright(C) 2008 Stephen Habermann & Andreas Ericsson # test_description='git rebase -p should preserve merges Run "git rebase -p" and check that merges are properly carried along ' . ./test-lib.sh GIT_AUTHOR_EMAIL=bogus_email_address export GIT_AUTHOR_EMAIL # Clone 1 (trivial merge): # # A1--A2 <-- origin/master # \ \ # B1--M <-- topic # \ # B2 <-- origin/topic # # Clone 2 (conflicting merge): # # A1--A2--B3 <-- origin/master # \ \ # B1------M <-- topic # \ # B2 <-- origin/topic # # In both cases, 'topic' is rebased onto 'origin/topic'. test_expect_success 'setup for merge-preserving rebase' \ 'echo First > A && git add A && git-commit -m "Add A1" && git checkout -b topic && echo Second > B && git add B && git-commit -m "Add B1" && git checkout -f master && echo Third >> A && git-commit -a -m "Modify A2" && git clone ./. clone1 && cd clone1 && git checkout -b topic origin/topic && git merge origin/master && cd .. && echo Fifth > B && git add B && git commit -m "Add different B" && git clone ./. clone2 && cd clone2 && git checkout -b topic origin/topic && test_must_fail git merge origin/master && echo Resolved > B && git add B && git commit -m "Merge origin/master into topic" && cd .. && git checkout topic && echo Fourth >> B && git commit -a -m "Modify B2" ' test_expect_success 'rebase -p fakes interactive rebase' ' ( cd clone1 && git fetch && git rebase -p origin/topic && test 1 = $(git rev-list --all --pretty=oneline | grep "Modify A" | wc -l) && test 1 = $(git rev-list --all --pretty=oneline | grep "Merge commit" | wc -l) ) ' test_expect_failure '--continue works after a conflict' ' ( cd clone2 && git fetch && test_must_fail git rebase -p origin/topic && test 2 = $(git ls-files B | wc -l) && echo Resolved again > B && test_must_fail git rebase --continue && git add B && git rebase --continue && test 1 = $(git rev-list --all --pretty=oneline | grep "Modify A" | wc -l) && test 1 = $(git rev-list --all --pretty=oneline | grep "Add different" | wc -l) && test 1 = $(git rev-list --all --pretty=oneline | grep "Merge origin" | wc -l) ) ' test_done