Merge git://repo.or.cz/git-gui
[git] / t / t6023-merge-file.sh
1 #!/bin/sh
2
3 test_description='RCS merge replacement: merge-file'
4 . ./test-lib.sh
5
6 cat > orig.txt << EOF
7 Dominus regit me,
8 et nihil mihi deerit.
9 In loco pascuae ibi me collocavit,
10 super aquam refectionis educavit me;
11 animam meam convertit,
12 deduxit me super semitas jusitiae,
13 propter nomen suum.
14 EOF
15
16 cat > new1.txt << EOF
17 Dominus regit me,
18 et nihil mihi deerit.
19 In loco pascuae ibi me collocavit,
20 super aquam refectionis educavit me;
21 animam meam convertit,
22 deduxit me super semitas jusitiae,
23 propter nomen suum.
24 Nam et si ambulavero in medio umbrae mortis,
25 non timebo mala, quoniam tu mecum es:
26 virga tua et baculus tuus ipsa me consolata sunt.
27 EOF
28
29 cat > new2.txt << EOF
30 Dominus regit me, et nihil mihi deerit.
31 In loco pascuae ibi me collocavit,
32 super aquam refectionis educavit me;
33 animam meam convertit,
34 deduxit me super semitas jusitiae,
35 propter nomen suum.
36 EOF
37
38 cat > new3.txt << EOF
39 DOMINUS regit me,
40 et nihil mihi deerit.
41 In loco pascuae ibi me collocavit,
42 super aquam refectionis educavit me;
43 animam meam convertit,
44 deduxit me super semitas jusitiae,
45 propter nomen suum.
46 EOF
47
48 cat > new4.txt << EOF
49 Dominus regit me, et nihil mihi deerit.
50 In loco pascuae ibi me collocavit,
51 super aquam refectionis educavit me;
52 animam meam convertit,
53 deduxit me super semitas jusitiae,
54 EOF
55 printf "propter nomen suum." >> new4.txt
56
57 cp new1.txt test.txt
58 test_expect_success "merge without conflict" \
59         "git merge-file test.txt orig.txt new2.txt"
60
61 cp new1.txt test2.txt
62 test_expect_success "merge without conflict (missing LF at EOF)" \
63         "git merge-file test2.txt orig.txt new2.txt"
64
65 test_expect_success "merge result added missing LF" \
66         "test_cmp test.txt test2.txt"
67
68 cp test.txt backup.txt
69 test_expect_success "merge with conflicts" \
70         "test_must_fail git merge-file test.txt orig.txt new3.txt"
71
72 cat > expect.txt << EOF
73 <<<<<<< test.txt
74 Dominus regit me, et nihil mihi deerit.
75 =======
76 DOMINUS regit me,
77 et nihil mihi deerit.
78 >>>>>>> new3.txt
79 In loco pascuae ibi me collocavit,
80 super aquam refectionis educavit me;
81 animam meam convertit,
82 deduxit me super semitas jusitiae,
83 propter nomen suum.
84 Nam et si ambulavero in medio umbrae mortis,
85 non timebo mala, quoniam tu mecum es:
86 virga tua et baculus tuus ipsa me consolata sunt.
87 EOF
88
89 test_expect_success "expected conflict markers" "test_cmp test.txt expect.txt"
90
91 cp backup.txt test.txt
92 test_expect_success "merge with conflicts, using -L" \
93         "test_must_fail git merge-file -L 1 -L 2 test.txt orig.txt new3.txt"
94
95 cat > expect.txt << EOF
96 <<<<<<< 1
97 Dominus regit me, et nihil mihi deerit.
98 =======
99 DOMINUS regit me,
100 et nihil mihi deerit.
101 >>>>>>> new3.txt
102 In loco pascuae ibi me collocavit,
103 super aquam refectionis educavit me;
104 animam meam convertit,
105 deduxit me super semitas jusitiae,
106 propter nomen suum.
107 Nam et si ambulavero in medio umbrae mortis,
108 non timebo mala, quoniam tu mecum es:
109 virga tua et baculus tuus ipsa me consolata sunt.
110 EOF
111
112 test_expect_success "expected conflict markers, with -L" \
113         "test_cmp test.txt expect.txt"
114
115 sed "s/ tu / TU /" < new1.txt > new5.txt
116 test_expect_success "conflict in removed tail" \
117         "test_must_fail git merge-file -p orig.txt new1.txt new5.txt > out"
118
119 cat > expect << EOF
120 Dominus regit me,
121 et nihil mihi deerit.
122 In loco pascuae ibi me collocavit,
123 super aquam refectionis educavit me;
124 animam meam convertit,
125 deduxit me super semitas jusitiae,
126 propter nomen suum.
127 <<<<<<< orig.txt
128 =======
129 Nam et si ambulavero in medio umbrae mortis,
130 non timebo mala, quoniam TU mecum es:
131 virga tua et baculus tuus ipsa me consolata sunt.
132 >>>>>>> new5.txt
133 EOF
134
135 test_expect_success "expected conflict markers" "test_cmp expect out"
136
137 test_expect_success 'binary files cannot be merged' '
138         test_must_fail git merge-file -p \
139                 orig.txt "$TEST_DIRECTORY"/test4012.png new1.txt 2> merge.err &&
140         grep "Cannot merge binary files" merge.err
141 '
142
143 sed -e "s/deerit.$/deerit;/" -e "s/me;$/me./" < new5.txt > new6.txt
144 sed -e "s/deerit.$/deerit,/" -e "s/me;$/me,/" < new5.txt > new7.txt
145
146 test_expect_success 'MERGE_ZEALOUS simplifies non-conflicts' '
147
148         test_must_fail git merge-file -p new6.txt new5.txt new7.txt > output &&
149         test 1 = $(grep ======= < output | wc -l)
150
151 '
152
153 sed -e 's/deerit./&%%%%/' -e "s/locavit,/locavit;/"< new6.txt | tr '%' '\012' > new8.txt
154 sed -e 's/deerit./&%%%%/' -e "s/locavit,/locavit --/" < new7.txt | tr '%' '\012' > new9.txt
155
156 test_expect_success 'ZEALOUS_ALNUM' '
157
158         test_must_fail git merge-file -p \
159                 new8.txt new5.txt new9.txt > merge.out &&
160         test 1 = $(grep ======= < merge.out | wc -l)
161
162 '
163
164 cat >expect <<\EOF
165 Dominus regit me,
166 <<<<<<< new8.txt
167 et nihil mihi deerit;
168
169
170
171
172 In loco pascuae ibi me collocavit;
173 super aquam refectionis educavit me.
174 |||||||
175 et nihil mihi deerit.
176 In loco pascuae ibi me collocavit,
177 super aquam refectionis educavit me;
178 =======
179 et nihil mihi deerit,
180
181
182
183
184 In loco pascuae ibi me collocavit --
185 super aquam refectionis educavit me,
186 >>>>>>> new9.txt
187 animam meam convertit,
188 deduxit me super semitas jusitiae,
189 propter nomen suum.
190 Nam et si ambulavero in medio umbrae mortis,
191 non timebo mala, quoniam TU mecum es:
192 virga tua et baculus tuus ipsa me consolata sunt.
193 EOF
194
195 test_expect_success '"diff3 -m" style output (1)' '
196         test_must_fail git merge-file -p --diff3 \
197                 new8.txt new5.txt new9.txt >actual &&
198         test_cmp expect actual
199 '
200
201 test_expect_success '"diff3 -m" style output (2)' '
202         git config merge.conflictstyle diff3 &&
203         test_must_fail git merge-file -p \
204                 new8.txt new5.txt new9.txt >actual &&
205         test_cmp expect actual
206 '
207
208 test_done