-
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.
merge: test the top-level merge driver
We seem to have tests for specific merge strategy backends (e.g. recursive), but not much test coverage for the "git merge" itself. As I am planning to update the semantics of merging "FETCH_HEAD" in such a way that these two git pull . topic_a topic_b... vs. git fetch . topic_a topic_b... git merge FETCH_HEAD are truly equivalent, let me add a few test cases to cover the tricky ones. Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Junio C Hamano
committed
Apr 29, 2015
1 parent
fdf96a2
commit 9e62316
Showing
1 changed file
with
136 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,136 @@ | ||
#!/bin/sh | ||
|
||
test_description='"git merge" top-level frontend' | ||
|
||
. ./test-lib.sh | ||
|
||
t3033_reset () { | ||
git checkout -B master two && | ||
git branch -f left three && | ||
git branch -f right four | ||
} | ||
|
||
test_expect_success setup ' | ||
test_commit one && | ||
git branch left && | ||
git branch right && | ||
test_commit two && | ||
git checkout left && | ||
test_commit three && | ||
git checkout right && | ||
test_commit four && | ||
git checkout master | ||
' | ||
|
||
# Local branches | ||
|
||
test_expect_success 'merge an octopus into void' ' | ||
t3033_reset && | ||
git checkout --orphan test && | ||
git rm -fr . && | ||
test_must_fail git merge left right && | ||
test_must_fail git rev-parse --verify HEAD && | ||
git diff --quiet && | ||
test_must_fail git rev-parse HEAD | ||
' | ||
|
||
test_expect_success 'merge an octopus, fast-forward (ff)' ' | ||
t3033_reset && | ||
git reset --hard one && | ||
git merge left right && | ||
# one is ancestor of three (left) and four (right) | ||
test_must_fail git rev-parse --verify HEAD^3 && | ||
git rev-parse HEAD^1 HEAD^2 | sort >actual && | ||
git rev-parse three four | sort >expect && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_success 'merge octopus, non-fast-forward (ff)' ' | ||
t3033_reset && | ||
git reset --hard one && | ||
git merge --no-ff left right && | ||
# one is ancestor of three (left) and four (right) | ||
test_must_fail git rev-parse --verify HEAD^4 && | ||
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual && | ||
git rev-parse one three four | sort >expect && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_success 'merge octopus, fast-forward (does not ff)' ' | ||
t3033_reset && | ||
git merge left right && | ||
# two (master) is not an ancestor of three (left) and four (right) | ||
test_must_fail git rev-parse --verify HEAD^4 && | ||
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual && | ||
git rev-parse two three four | sort >expect && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_success 'merge octopus, non-fast-forward' ' | ||
t3033_reset && | ||
git merge --no-ff left right && | ||
test_must_fail git rev-parse --verify HEAD^4 && | ||
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual && | ||
git rev-parse two three four | sort >expect && | ||
test_cmp expect actual | ||
' | ||
|
||
# The same set with FETCH_HEAD | ||
|
||
test_expect_failure 'merge FETCH_HEAD octopus into void' ' | ||
t3033_reset && | ||
git checkout --orphan test && | ||
git rm -fr . && | ||
git fetch . left right && | ||
test_must_fail git merge FETCH_HEAD && | ||
test_must_fail git rev-parse --verify HEAD && | ||
git diff --quiet && | ||
test_must_fail git rev-parse HEAD | ||
' | ||
|
||
test_expect_failure 'merge FETCH_HEAD octopus fast-forward (ff)' ' | ||
t3033_reset && | ||
git reset --hard one && | ||
git fetch . left right && | ||
git merge FETCH_HEAD && | ||
# one is ancestor of three (left) and four (right) | ||
test_must_fail git rev-parse --verify HEAD^3 && | ||
git rev-parse HEAD^1 HEAD^2 | sort >actual && | ||
git rev-parse three four | sort >expect && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_failure 'merge FETCH_HEAD octopus non-fast-forward (ff)' ' | ||
t3033_reset && | ||
git reset --hard one && | ||
git fetch . left right && | ||
git merge --no-ff FETCH_HEAD && | ||
# one is ancestor of three (left) and four (right) | ||
test_must_fail git rev-parse --verify HEAD^4 && | ||
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual && | ||
git rev-parse one three four | sort >expect && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_failure 'merge FETCH_HEAD octopus fast-forward (does not ff)' ' | ||
t3033_reset && | ||
git fetch . left right && | ||
git merge FETCH_HEAD && | ||
# two (master) is not an ancestor of three (left) and four (right) | ||
test_must_fail git rev-parse --verify HEAD^4 && | ||
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual && | ||
git rev-parse two three four | sort >expect && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_failure 'merge FETCH_HEAD octopus non-fast-forward' ' | ||
t3033_reset && | ||
git fetch . left right && | ||
git merge --no-ff FETCH_HEAD && | ||
test_must_fail git rev-parse --verify HEAD^4 && | ||
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual && | ||
git rev-parse two three four | sort >expect && | ||
test_cmp expect actual | ||
' | ||
|
||
test_done |