Browse Source
"git merge FETCH_HEAD" learned that the previous "git fetch" could be to create an Octopus merge, i.e. recording multiple branches that are not marked as "not-for-merge"; this allows us to lose an old style invocation "git merge <msg> HEAD $commits..." in the implementation of "git pull" script; the old style syntax can now be deprecated. * jc/merge: merge: deprecate 'git merge <message> HEAD <commit>' syntax merge: handle FETCH_HEAD internally merge: decide if we auto-generate the message early in collect_parents() merge: make collect_parents() auto-generate the merge message merge: extract prepare_merge_message() logic out merge: narrow scope of merge_names merge: split reduce_parents() out of collect_parents() merge: clarify collect_parents() logic merge: small leakfix and code simplification merge: do not check argc to determine number of remote heads merge: clarify "pulling into void" special case t5520: test pulling an octopus into an unborn branch t5520: style fixes merge: simplify code flow merge: test the top-level merge drivermaint
![gitster@pobox.com](/assets/img/avatar_default.png)
10 changed files with 324 additions and 112 deletions
@ -0,0 +1,136 @@
@@ -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_success '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_success '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_success '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_success '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_success '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 |
Loading…
Reference in new issue