add tests for rebasing with patch-equivalence present

Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Martin von Zweigbergk 2013-06-06 23:11:38 -07:00 committed by Junio C Hamano
parent 2aad7cace2
commit 5b5e1c7c78
2 changed files with 102 additions and 0 deletions

View file

@ -81,3 +81,20 @@ reset_rebase () {
git reset --hard &&
git clean -f
}
cherry_pick () {
git cherry-pick -n "$2" &&
git commit -m "$1" &&
git tag "$1"
}
revert () {
git revert -n "$2" &&
git commit -m "$1" &&
git tag "$1"
}
make_empty () {
git commit --allow-empty -m "$1" &&
git tag "$1"
}

View file

@ -75,4 +75,89 @@ test_run_rebase success -m
test_run_rebase success -i
test_run_rebase success -p
# f
# /
# a---b---c---g---h
# \
# d---G---i
#
# uppercase = cherry-picked
# h = reverted g
#
# Reverted patches are there for tests to be able to check if a commit
# that introduced the same change as another commit is
# dropped. Without reverted commits, we could get false positives
# because applying the patch succeeds, but simply results in no
# changes.
test_expect_success 'setup of linear history for range selection tests' '
git checkout c &&
test_commit g &&
revert h g &&
git checkout d &&
cherry_pick G g &&
test_commit i &&
git checkout b &&
test_commit f
'
test_run_rebase () {
result=$1
shift
test_expect_$result "rebase $* drops patches in upstream" "
reset_rebase &&
git rebase $* h i &&
test_cmp_rev h HEAD~2 &&
test_linear_range 'd i' h..
"
}
test_run_rebase success ''
test_run_rebase failure -m
test_run_rebase success -i
test_run_rebase success -p
test_run_rebase () {
result=$1
shift
test_expect_$result "rebase $* can drop last patch if in upstream" "
reset_rebase &&
git rebase $* h G &&
test_cmp_rev h HEAD^ &&
test_linear_range 'd' h..
"
}
test_run_rebase success ''
test_run_rebase failure -m
test_run_rebase success -i
test_run_rebase success -p
test_run_rebase () {
result=$1
shift
test_expect_$result "rebase $* --onto drops patches in upstream" "
reset_rebase &&
git rebase $* --onto f h i &&
test_cmp_rev f HEAD~2 &&
test_linear_range 'd i' f..
"
}
test_run_rebase success ''
test_run_rebase failure -m
test_run_rebase success -i
test_run_rebase success -p
test_run_rebase () {
result=$1
shift
test_expect_$result "rebase $* --onto does not drop patches in onto" "
reset_rebase &&
git rebase $* --onto h f i &&
test_cmp_rev h HEAD~3 &&
test_linear_range 'd G i' h..
"
}
test_run_rebase success ''
test_run_rebase success -m
test_run_rebase success -i
test_run_rebase success -p
test_done