-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add new test to ensure git-merge handles pull.twohead and pull.octopus
Test if the given strategies are used and test the case when multiple strategies are configured using a space separated list. Also test if the best strategy is picked if none is specified. This is done by adding a simple test case where recursive detects a rename, but resolve does not, and verify that finally merge will pick up the previous. Signed-off-by: Miklos Vajna <vmiklos@frugalware.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Miklos Vajna
authored and
Junio C Hamano
committed
Jul 1, 2008
1 parent
fbca583
commit b2eabcc
Showing
1 changed file
with
129 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
#!/bin/sh | ||
|
||
test_description='git-merge | ||
Testing pull.* configuration parsing.' | ||
|
||
. ./test-lib.sh | ||
|
||
test_expect_success 'setup' ' | ||
echo c0 >c0.c && | ||
git add c0.c && | ||
git commit -m c0 && | ||
git tag c0 && | ||
echo c1 >c1.c && | ||
git add c1.c && | ||
git commit -m c1 && | ||
git tag c1 && | ||
git reset --hard c0 && | ||
echo c2 >c2.c && | ||
git add c2.c && | ||
git commit -m c2 && | ||
git tag c2 && | ||
git reset --hard c0 && | ||
echo c3 >c3.c && | ||
git add c3.c && | ||
git commit -m c3 && | ||
git tag c3 | ||
' | ||
|
||
test_expect_success 'merge c1 with c2' ' | ||
git reset --hard c1 && | ||
test -f c0.c && | ||
test -f c1.c && | ||
test ! -f c2.c && | ||
test ! -f c3.c && | ||
git merge c2 && | ||
test -f c1.c && | ||
test -f c2.c | ||
' | ||
|
||
test_expect_success 'merge c1 with c2 (ours in pull.twohead)' ' | ||
git reset --hard c1 && | ||
git config pull.twohead ours && | ||
git merge c2 && | ||
test -f c1.c && | ||
! test -f c2.c | ||
' | ||
|
||
test_expect_success 'merge c1 with c2 and c3 (recursive in pull.octopus)' ' | ||
git reset --hard c1 && | ||
git config pull.octopus "recursive" && | ||
test_must_fail git merge c2 c3 && | ||
test "$(git rev-parse c1)" = "$(git rev-parse HEAD)" | ||
' | ||
|
||
test_expect_success 'merge c1 with c2 and c3 (recursive and octopus in pull.octopus)' ' | ||
git reset --hard c1 && | ||
git config pull.octopus "recursive octopus" && | ||
git merge c2 c3 && | ||
test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" && | ||
test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" && | ||
test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" && | ||
test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" && | ||
git diff --exit-code && | ||
test -f c0.c && | ||
test -f c1.c && | ||
test -f c2.c && | ||
test -f c3.c | ||
' | ||
|
||
conflict_count() | ||
{ | ||
eval $1=`{ | ||
git diff-files --name-only | ||
git ls-files --unmerged | ||
} | wc -l` | ||
} | ||
|
||
# c4 - c5 | ||
# \ c6 | ||
# | ||
# There are two conflicts here: | ||
# | ||
# 1) Because foo.c is renamed to bar.c, recursive will handle this, | ||
# resolve won't. | ||
# | ||
# 2) One in conflict.c and that will always fail. | ||
|
||
test_expect_success 'setup conflicted merge' ' | ||
git reset --hard c0 && | ||
echo A >conflict.c && | ||
git add conflict.c && | ||
echo contents >foo.c && | ||
git add foo.c && | ||
git commit -m c4 && | ||
git tag c4 && | ||
echo B >conflict.c && | ||
git add conflict.c && | ||
git mv foo.c bar.c && | ||
git commit -m c5 && | ||
git tag c5 && | ||
git reset --hard c4 && | ||
echo C >conflict.c && | ||
git add conflict.c && | ||
echo secondline >> foo.c && | ||
git add foo.c && | ||
git commit -m c6 && | ||
git tag c6 | ||
' | ||
|
||
# First do the merge with resolve and recursive then verify that | ||
# recusive is choosen. | ||
|
||
test_expect_success 'merge picks up the best result' ' | ||
git config pull.twohead "recursive resolve" && | ||
git reset --hard c5 && | ||
git merge -s resolve c6 | ||
conflict_count resolve_count && | ||
git reset --hard c5 && | ||
git merge -s recursive c6 | ||
conflict_count recursive_count && | ||
git reset --hard c5 && | ||
git merge c6 | ||
conflict_count auto_count && | ||
test "$auto_count" = "$recursive_count" && | ||
test "$auto_count" != "$resolve_count" | ||
' | ||
|
||
test_done |