Skip to content

Commit 9e62316

Browse files
committed
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 <[email protected]>
1 parent fdf96a2 commit 9e62316

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed

t/t3033-merge-toplevel.sh

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
#!/bin/sh
2+
3+
test_description='"git merge" top-level frontend'
4+
5+
. ./test-lib.sh
6+
7+
t3033_reset () {
8+
git checkout -B master two &&
9+
git branch -f left three &&
10+
git branch -f right four
11+
}
12+
13+
test_expect_success setup '
14+
test_commit one &&
15+
git branch left &&
16+
git branch right &&
17+
test_commit two &&
18+
git checkout left &&
19+
test_commit three &&
20+
git checkout right &&
21+
test_commit four &&
22+
git checkout master
23+
'
24+
25+
# Local branches
26+
27+
test_expect_success 'merge an octopus into void' '
28+
t3033_reset &&
29+
git checkout --orphan test &&
30+
git rm -fr . &&
31+
test_must_fail git merge left right &&
32+
test_must_fail git rev-parse --verify HEAD &&
33+
git diff --quiet &&
34+
test_must_fail git rev-parse HEAD
35+
'
36+
37+
test_expect_success 'merge an octopus, fast-forward (ff)' '
38+
t3033_reset &&
39+
git reset --hard one &&
40+
git merge left right &&
41+
# one is ancestor of three (left) and four (right)
42+
test_must_fail git rev-parse --verify HEAD^3 &&
43+
git rev-parse HEAD^1 HEAD^2 | sort >actual &&
44+
git rev-parse three four | sort >expect &&
45+
test_cmp expect actual
46+
'
47+
48+
test_expect_success 'merge octopus, non-fast-forward (ff)' '
49+
t3033_reset &&
50+
git reset --hard one &&
51+
git merge --no-ff left right &&
52+
# one is ancestor of three (left) and four (right)
53+
test_must_fail git rev-parse --verify HEAD^4 &&
54+
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
55+
git rev-parse one three four | sort >expect &&
56+
test_cmp expect actual
57+
'
58+
59+
test_expect_success 'merge octopus, fast-forward (does not ff)' '
60+
t3033_reset &&
61+
git merge left right &&
62+
# two (master) is not an ancestor of three (left) and four (right)
63+
test_must_fail git rev-parse --verify HEAD^4 &&
64+
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
65+
git rev-parse two three four | sort >expect &&
66+
test_cmp expect actual
67+
'
68+
69+
test_expect_success 'merge octopus, non-fast-forward' '
70+
t3033_reset &&
71+
git merge --no-ff left right &&
72+
test_must_fail git rev-parse --verify HEAD^4 &&
73+
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
74+
git rev-parse two three four | sort >expect &&
75+
test_cmp expect actual
76+
'
77+
78+
# The same set with FETCH_HEAD
79+
80+
test_expect_failure 'merge FETCH_HEAD octopus into void' '
81+
t3033_reset &&
82+
git checkout --orphan test &&
83+
git rm -fr . &&
84+
git fetch . left right &&
85+
test_must_fail git merge FETCH_HEAD &&
86+
test_must_fail git rev-parse --verify HEAD &&
87+
git diff --quiet &&
88+
test_must_fail git rev-parse HEAD
89+
'
90+
91+
test_expect_failure 'merge FETCH_HEAD octopus fast-forward (ff)' '
92+
t3033_reset &&
93+
git reset --hard one &&
94+
git fetch . left right &&
95+
git merge FETCH_HEAD &&
96+
# one is ancestor of three (left) and four (right)
97+
test_must_fail git rev-parse --verify HEAD^3 &&
98+
git rev-parse HEAD^1 HEAD^2 | sort >actual &&
99+
git rev-parse three four | sort >expect &&
100+
test_cmp expect actual
101+
'
102+
103+
test_expect_failure 'merge FETCH_HEAD octopus non-fast-forward (ff)' '
104+
t3033_reset &&
105+
git reset --hard one &&
106+
git fetch . left right &&
107+
git merge --no-ff FETCH_HEAD &&
108+
# one is ancestor of three (left) and four (right)
109+
test_must_fail git rev-parse --verify HEAD^4 &&
110+
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
111+
git rev-parse one three four | sort >expect &&
112+
test_cmp expect actual
113+
'
114+
115+
test_expect_failure 'merge FETCH_HEAD octopus fast-forward (does not ff)' '
116+
t3033_reset &&
117+
git fetch . left right &&
118+
git merge FETCH_HEAD &&
119+
# two (master) is not an ancestor of three (left) and four (right)
120+
test_must_fail git rev-parse --verify HEAD^4 &&
121+
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
122+
git rev-parse two three four | sort >expect &&
123+
test_cmp expect actual
124+
'
125+
126+
test_expect_failure 'merge FETCH_HEAD octopus non-fast-forward' '
127+
t3033_reset &&
128+
git fetch . left right &&
129+
git merge --no-ff FETCH_HEAD &&
130+
test_must_fail git rev-parse --verify HEAD^4 &&
131+
git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
132+
git rev-parse two three four | sort >expect &&
133+
test_cmp expect actual
134+
'
135+
136+
test_done

0 commit comments

Comments
 (0)