]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7601-merge-pull-config.sh
Merge branch 'tr/submodule-relative-scp-url'
[thirdparty/git.git] / t / t7601-merge-pull-config.sh
CommitLineData
b2eabcc2
MV
1#!/bin/sh
2
47a528ad 3test_description='git merge
b2eabcc2
MV
4
5Testing pull.* configuration parsing.'
6
7. ./test-lib.sh
8
9test_expect_success 'setup' '
10 echo c0 >c0.c &&
11 git add c0.c &&
12 git commit -m c0 &&
13 git tag c0 &&
14 echo c1 >c1.c &&
15 git add c1.c &&
16 git commit -m c1 &&
17 git tag c1 &&
18 git reset --hard c0 &&
19 echo c2 >c2.c &&
20 git add c2.c &&
21 git commit -m c2 &&
22 git tag c2 &&
23 git reset --hard c0 &&
24 echo c3 >c3.c &&
25 git add c3.c &&
26 git commit -m c3 &&
27 git tag c3
28'
29
30test_expect_success 'merge c1 with c2' '
31 git reset --hard c1 &&
32 test -f c0.c &&
33 test -f c1.c &&
34 test ! -f c2.c &&
35 test ! -f c3.c &&
36 git merge c2 &&
37 test -f c1.c &&
38 test -f c2.c
39'
40
41test_expect_success 'merge c1 with c2 (ours in pull.twohead)' '
42 git reset --hard c1 &&
43 git config pull.twohead ours &&
44 git merge c2 &&
45 test -f c1.c &&
46 ! test -f c2.c
47'
48
49test_expect_success 'merge c1 with c2 and c3 (recursive in pull.octopus)' '
50 git reset --hard c1 &&
51 git config pull.octopus "recursive" &&
52 test_must_fail git merge c2 c3 &&
53 test "$(git rev-parse c1)" = "$(git rev-parse HEAD)"
54'
55
56test_expect_success 'merge c1 with c2 and c3 (recursive and octopus in pull.octopus)' '
57 git reset --hard c1 &&
58 git config pull.octopus "recursive octopus" &&
59 git merge c2 c3 &&
60 test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
61 test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
62 test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
63 test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
64 git diff --exit-code &&
65 test -f c0.c &&
66 test -f c1.c &&
67 test -f c2.c &&
68 test -f c3.c
69'
70
71conflict_count()
72{
1c666935 73 {
b2eabcc2
MV
74 git diff-files --name-only
75 git ls-files --unmerged
1c666935 76 } | wc -l
b2eabcc2
MV
77}
78
79# c4 - c5
80# \ c6
81#
82# There are two conflicts here:
83#
84# 1) Because foo.c is renamed to bar.c, recursive will handle this,
85# resolve won't.
86#
87# 2) One in conflict.c and that will always fail.
88
89test_expect_success 'setup conflicted merge' '
90 git reset --hard c0 &&
91 echo A >conflict.c &&
92 git add conflict.c &&
93 echo contents >foo.c &&
94 git add foo.c &&
95 git commit -m c4 &&
96 git tag c4 &&
97 echo B >conflict.c &&
98 git add conflict.c &&
99 git mv foo.c bar.c &&
100 git commit -m c5 &&
101 git tag c5 &&
102 git reset --hard c4 &&
103 echo C >conflict.c &&
104 git add conflict.c &&
105 echo secondline >> foo.c &&
106 git add foo.c &&
107 git commit -m c6 &&
108 git tag c6
109'
110
111# First do the merge with resolve and recursive then verify that
112# recusive is choosen.
113
114test_expect_success 'merge picks up the best result' '
4d175ef7
MV
115 git config --unset-all pull.twohead &&
116 git reset --hard c5 &&
af7b2526 117 test_must_fail git merge -s resolve c6 &&
4d175ef7
MV
118 resolve_count=$(conflict_count) &&
119 git reset --hard c5 &&
af7b2526 120 test_must_fail git merge -s recursive c6 &&
4d175ef7
MV
121 recursive_count=$(conflict_count) &&
122 git reset --hard c5 &&
af7b2526 123 test_must_fail git merge -s recursive -s resolve c6 &&
4d175ef7
MV
124 auto_count=$(conflict_count) &&
125 test $auto_count = $recursive_count &&
126 test $auto_count != $resolve_count
127'
128
129test_expect_success 'merge picks up the best result (from config)' '
b2eabcc2
MV
130 git config pull.twohead "recursive resolve" &&
131 git reset --hard c5 &&
af7b2526 132 test_must_fail git merge -s resolve c6 &&
1c666935 133 resolve_count=$(conflict_count) &&
b2eabcc2 134 git reset --hard c5 &&
af7b2526 135 test_must_fail git merge -s recursive c6 &&
1c666935 136 recursive_count=$(conflict_count) &&
b2eabcc2 137 git reset --hard c5 &&
af7b2526 138 test_must_fail git merge c6 &&
1c666935
MV
139 auto_count=$(conflict_count) &&
140 test $auto_count = $recursive_count &&
141 test $auto_count != $resolve_count
b2eabcc2
MV
142'
143
1719b5e4
MV
144test_expect_success 'merge errors out on invalid strategy' '
145 git config pull.twohead "foobar" &&
146 git reset --hard c5 &&
147 test_must_fail git merge c6
148'
149
150test_expect_success 'merge errors out on invalid strategy' '
151 git config --unset-all pull.twohead &&
152 git reset --hard c5 &&
153 test_must_fail git merge -s "resolve recursive" c6
154'
155
b2eabcc2 156test_done