##// END OF EJS Templates
test-merge-tools: adapt for Windows
Adrian Buehlmann -
r16967:30cfa286 default
parent child Browse files
Show More
@@ -1,806 +1,802 b''
1 $ "$TESTDIR/hghave" system-sh || exit 80
2
3 test merge-tools configuration - mostly exercising filemerge.py
1 test merge-tools configuration - mostly exercising filemerge.py
4
2
5 $ unset HGMERGE # make sure HGMERGE doesn't interfere with the test
3 $ unset HGMERGE # make sure HGMERGE doesn't interfere with the test
6 $ hg init
4 $ hg init
7
5
8 revision 0
6 revision 0
9
7
10 $ echo "revision 0" > f
8 $ echo "revision 0" > f
11 $ echo "space" >> f
9 $ echo "space" >> f
12 $ hg commit -Am "revision 0"
10 $ hg commit -Am "revision 0"
13 adding f
11 adding f
14
12
15 revision 1
13 revision 1
16
14
17 $ echo "revision 1" > f
15 $ echo "revision 1" > f
18 $ echo "space" >> f
16 $ echo "space" >> f
19 $ hg commit -Am "revision 1"
17 $ hg commit -Am "revision 1"
20 $ hg update 0 > /dev/null
18 $ hg update 0 > /dev/null
21
19
22 revision 2
20 revision 2
23
21
24 $ echo "revision 2" > f
22 $ echo "revision 2" > f
25 $ echo "space" >> f
23 $ echo "space" >> f
26 $ hg commit -Am "revision 2"
24 $ hg commit -Am "revision 2"
27 created new head
25 created new head
28 $ hg update 0 > /dev/null
26 $ hg update 0 > /dev/null
29
27
30 revision 3 - simple to merge
28 revision 3 - simple to merge
31
29
32 $ echo "revision 3" >> f
30 $ echo "revision 3" >> f
33 $ hg commit -Am "revision 3"
31 $ hg commit -Am "revision 3"
34 created new head
32 created new head
35 $ echo "[merge-tools]" > .hg/hgrc
33 $ echo "[merge-tools]" > .hg/hgrc
36
34
37 $ beforemerge() {
35 $ beforemerge() {
38 > cat .hg/hgrc
36 > cat .hg/hgrc
39 > echo "# hg update -C 1"
37 > echo "# hg update -C 1"
40 > hg update -C 1 > /dev/null
38 > hg update -C 1 > /dev/null
41 > }
39 > }
42 $ aftermerge() {
40 $ aftermerge() {
43 > echo "# cat f"
41 > echo "# cat f"
44 > cat f
42 > cat f
45 > echo "# hg stat"
43 > echo "# hg stat"
46 > hg stat
44 > hg stat
47 > rm -f f.orig
45 > rm -f f.orig
48 > }
46 > }
49
47
50 Tool selection
48 Tool selection
51
49
52 default is internal merge:
50 default is internal merge:
53
51
54 $ beforemerge
52 $ beforemerge
55 [merge-tools]
53 [merge-tools]
56 # hg update -C 1
54 # hg update -C 1
57
55
58 hg merge -r 2
56 hg merge -r 2
59 override $PATH to ensure hgmerge not visible; use $PYTHON in case we're
57 override $PATH to ensure hgmerge not visible; use $PYTHON in case we're
60 running from a devel copy, not a temp installation
58 running from a devel copy, not a temp installation
61
59
62 $ PATH="$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2
60 $ PATH="$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2
63 merging f
61 merging f
64 warning: conflicts during merge.
62 warning: conflicts during merge.
65 merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
63 merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
66 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
64 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
67 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
65 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
68 [1]
66 [1]
69 $ aftermerge
67 $ aftermerge
70 # cat f
68 # cat f
71 <<<<<<< local
69 <<<<<<< local
72 revision 1
70 revision 1
73 =======
71 =======
74 revision 2
72 revision 2
75 >>>>>>> other
73 >>>>>>> other
76 space
74 space
77 # hg stat
75 # hg stat
78 M f
76 M f
79 ? f.orig
77 ? f.orig
80
78
81 simplest hgrc using false for merge:
79 simplest hgrc using false for merge:
82
80
83 $ echo "false.whatever=" >> .hg/hgrc
81 $ echo "false.whatever=" >> .hg/hgrc
84 $ beforemerge
82 $ beforemerge
85 [merge-tools]
83 [merge-tools]
86 false.whatever=
84 false.whatever=
87 # hg update -C 1
85 # hg update -C 1
88 $ hg merge -r 2
86 $ hg merge -r 2
89 merging f
87 merging f
90 merging f failed!
88 merging f failed!
91 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
89 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
92 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
90 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
93 [1]
91 [1]
94 $ aftermerge
92 $ aftermerge
95 # cat f
93 # cat f
96 revision 1
94 revision 1
97 space
95 space
98 # hg stat
96 # hg stat
99 M f
97 M f
100 ? f.orig
98 ? f.orig
101
99
102 unexecutable file in $PATH shouldn't be found:
100 unexecutable file in $PATH shouldn't be found:
103
101
104 $ touch false
102 $ touch false
105 $ hg up -qC 1
103 $ hg up -qC 1
106 $ PATH="`pwd`:$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2
104 $ PATH="`pwd`:$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2
107 merging f
105 merging f
108 warning: conflicts during merge.
106 warning: conflicts during merge.
109 merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
107 merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
110 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
108 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
111 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
109 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
112 [1]
110 [1]
113 $ rm false
111 $ rm false
114
112
115 executable directory in $PATH shouldn't be found:
113 executable directory in $PATH shouldn't be found:
116
114
117 $ mkdir false
115 $ mkdir false
118 $ hg up -qC 1
116 $ hg up -qC 1
119 $ PATH="`pwd`:$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2
117 $ PATH="`pwd`:$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2
120 merging f
118 merging f
121 warning: conflicts during merge.
119 warning: conflicts during merge.
122 merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
120 merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
123 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
121 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
124 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
122 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
125 [1]
123 [1]
126 $ rmdir false
124 $ rmdir false
127
125
128 true with higher .priority gets precedence:
126 true with higher .priority gets precedence:
129
127
130 $ echo "true.priority=1" >> .hg/hgrc
128 $ echo "true.priority=1" >> .hg/hgrc
131 $ beforemerge
129 $ beforemerge
132 [merge-tools]
130 [merge-tools]
133 false.whatever=
131 false.whatever=
134 true.priority=1
132 true.priority=1
135 # hg update -C 1
133 # hg update -C 1
136 $ hg merge -r 2
134 $ hg merge -r 2
137 merging f
135 merging f
138 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
136 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
139 (branch merge, don't forget to commit)
137 (branch merge, don't forget to commit)
140 $ aftermerge
138 $ aftermerge
141 # cat f
139 # cat f
142 revision 1
140 revision 1
143 space
141 space
144 # hg stat
142 # hg stat
145 M f
143 M f
146
144
147 unless lowered on command line:
145 unless lowered on command line:
148
146
149 $ beforemerge
147 $ beforemerge
150 [merge-tools]
148 [merge-tools]
151 false.whatever=
149 false.whatever=
152 true.priority=1
150 true.priority=1
153 # hg update -C 1
151 # hg update -C 1
154 $ hg merge -r 2 --config merge-tools.true.priority=-7
152 $ hg merge -r 2 --config merge-tools.true.priority=-7
155 merging f
153 merging f
156 merging f failed!
154 merging f failed!
157 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
155 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
158 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
156 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
159 [1]
157 [1]
160 $ aftermerge
158 $ aftermerge
161 # cat f
159 # cat f
162 revision 1
160 revision 1
163 space
161 space
164 # hg stat
162 # hg stat
165 M f
163 M f
166 ? f.orig
164 ? f.orig
167
165
168 or false set higher on command line:
166 or false set higher on command line:
169
167
170 $ beforemerge
168 $ beforemerge
171 [merge-tools]
169 [merge-tools]
172 false.whatever=
170 false.whatever=
173 true.priority=1
171 true.priority=1
174 # hg update -C 1
172 # hg update -C 1
175 $ hg merge -r 2 --config merge-tools.false.priority=117
173 $ hg merge -r 2 --config merge-tools.false.priority=117
176 merging f
174 merging f
177 merging f failed!
175 merging f failed!
178 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
176 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
179 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
177 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
180 [1]
178 [1]
181 $ aftermerge
179 $ aftermerge
182 # cat f
180 # cat f
183 revision 1
181 revision 1
184 space
182 space
185 # hg stat
183 # hg stat
186 M f
184 M f
187 ? f.orig
185 ? f.orig
188
186
189 or true.executable not found in PATH:
187 or true.executable not found in PATH:
190
188
191 $ beforemerge
189 $ beforemerge
192 [merge-tools]
190 [merge-tools]
193 false.whatever=
191 false.whatever=
194 true.priority=1
192 true.priority=1
195 # hg update -C 1
193 # hg update -C 1
196 $ hg merge -r 2 --config merge-tools.true.executable=nonexistingmergetool
194 $ hg merge -r 2 --config merge-tools.true.executable=nonexistingmergetool
197 merging f
195 merging f
198 merging f failed!
196 merging f failed!
199 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
197 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
200 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
198 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
201 [1]
199 [1]
202 $ aftermerge
200 $ aftermerge
203 # cat f
201 # cat f
204 revision 1
202 revision 1
205 space
203 space
206 # hg stat
204 # hg stat
207 M f
205 M f
208 ? f.orig
206 ? f.orig
209
207
210 or true.executable with bogus path:
208 or true.executable with bogus path:
211
209
212 $ beforemerge
210 $ beforemerge
213 [merge-tools]
211 [merge-tools]
214 false.whatever=
212 false.whatever=
215 true.priority=1
213 true.priority=1
216 # hg update -C 1
214 # hg update -C 1
217 $ hg merge -r 2 --config merge-tools.true.executable=/nonexisting/mergetool
215 $ hg merge -r 2 --config merge-tools.true.executable=/nonexisting/mergetool
218 merging f
216 merging f
219 merging f failed!
217 merging f failed!
220 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
218 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
221 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
219 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
222 [1]
220 [1]
223 $ aftermerge
221 $ aftermerge
224 # cat f
222 # cat f
225 revision 1
223 revision 1
226 space
224 space
227 # hg stat
225 # hg stat
228 M f
226 M f
229 ? f.orig
227 ? f.orig
230
228
231 but true.executable set to cat found in PATH works:
229 but true.executable set to cat found in PATH works:
232
230
233 $ echo "true.executable=cat" >> .hg/hgrc
231 $ echo "true.executable=cat" >> .hg/hgrc
234 $ beforemerge
232 $ beforemerge
235 [merge-tools]
233 [merge-tools]
236 false.whatever=
234 false.whatever=
237 true.priority=1
235 true.priority=1
238 true.executable=cat
236 true.executable=cat
239 # hg update -C 1
237 # hg update -C 1
240 $ hg merge -r 2
238 $ hg merge -r 2
241 merging f
239 merging f
242 revision 1
240 revision 1
243 space
241 space
244 revision 0
242 revision 0
245 space
243 space
246 revision 2
244 revision 2
247 space
245 space
248 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
246 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
249 (branch merge, don't forget to commit)
247 (branch merge, don't forget to commit)
250 $ aftermerge
248 $ aftermerge
251 # cat f
249 # cat f
252 revision 1
250 revision 1
253 space
251 space
254 # hg stat
252 # hg stat
255 M f
253 M f
256
254
257 and true.executable set to cat with path works:
255 and true.executable set to cat with path works:
258
256
259 $ beforemerge
257 $ beforemerge
260 [merge-tools]
258 [merge-tools]
261 false.whatever=
259 false.whatever=
262 true.priority=1
260 true.priority=1
263 true.executable=cat
261 true.executable=cat
264 # hg update -C 1
262 # hg update -C 1
265 $ hg merge -r 2 --config merge-tools.true.executable=cat
263 $ hg merge -r 2 --config merge-tools.true.executable=cat
266 merging f
264 merging f
267 revision 1
265 revision 1
268 space
266 space
269 revision 0
267 revision 0
270 space
268 space
271 revision 2
269 revision 2
272 space
270 space
273 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
271 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
274 (branch merge, don't forget to commit)
272 (branch merge, don't forget to commit)
275 $ aftermerge
273 $ aftermerge
276 # cat f
274 # cat f
277 revision 1
275 revision 1
278 space
276 space
279 # hg stat
277 # hg stat
280 M f
278 M f
281
279
282 environment variables in true.executable are handled:
280 environment variables in true.executable are handled:
283
281
284 $ cat > $HGTMP/merge.sh <<EOF
282 $ echo 'echo "custom merge tool"' > "$HGTMP/merge.sh"
285 > #!/bin/sh
286 > echo 'custom merge tool'
287 > EOF
288 $ chmod +x $HGTMP/merge.sh
289 $ beforemerge
283 $ beforemerge
290 [merge-tools]
284 [merge-tools]
291 false.whatever=
285 false.whatever=
292 true.priority=1
286 true.priority=1
293 true.executable=cat
287 true.executable=cat
294 # hg update -C 1
288 # hg update -C 1
295 $ hg merge -r 2 --config merge-tools.true.executable=$HGTMP/merge.sh
289 $ hg --config merge-tools.true.executable='sh' \
290 > --config merge-tools.true.args="$HGTMP/merge.sh" \
291 > merge -r 2
296 merging f
292 merging f
297 custom merge tool
293 custom merge tool
298 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
294 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
299 (branch merge, don't forget to commit)
295 (branch merge, don't forget to commit)
300 $ aftermerge
296 $ aftermerge
301 # cat f
297 # cat f
302 revision 1
298 revision 1
303 space
299 space
304 # hg stat
300 # hg stat
305 M f
301 M f
306
302
307 Tool selection and merge-patterns
303 Tool selection and merge-patterns
308
304
309 merge-patterns specifies new tool false:
305 merge-patterns specifies new tool false:
310
306
311 $ beforemerge
307 $ beforemerge
312 [merge-tools]
308 [merge-tools]
313 false.whatever=
309 false.whatever=
314 true.priority=1
310 true.priority=1
315 true.executable=cat
311 true.executable=cat
316 # hg update -C 1
312 # hg update -C 1
317 $ hg merge -r 2 --config merge-patterns.f=false
313 $ hg merge -r 2 --config merge-patterns.f=false
318 merging f
314 merging f
319 merging f failed!
315 merging f failed!
320 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
316 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
321 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
317 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
322 [1]
318 [1]
323 $ aftermerge
319 $ aftermerge
324 # cat f
320 # cat f
325 revision 1
321 revision 1
326 space
322 space
327 # hg stat
323 # hg stat
328 M f
324 M f
329 ? f.orig
325 ? f.orig
330
326
331 merge-patterns specifies executable not found in PATH and gets warning:
327 merge-patterns specifies executable not found in PATH and gets warning:
332
328
333 $ beforemerge
329 $ beforemerge
334 [merge-tools]
330 [merge-tools]
335 false.whatever=
331 false.whatever=
336 true.priority=1
332 true.priority=1
337 true.executable=cat
333 true.executable=cat
338 # hg update -C 1
334 # hg update -C 1
339 $ hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=nonexistingmergetool
335 $ hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=nonexistingmergetool
340 couldn't find merge tool true specified for f
336 couldn't find merge tool true specified for f
341 merging f
337 merging f
342 merging f failed!
338 merging f failed!
343 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
339 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
344 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
340 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
345 [1]
341 [1]
346 $ aftermerge
342 $ aftermerge
347 # cat f
343 # cat f
348 revision 1
344 revision 1
349 space
345 space
350 # hg stat
346 # hg stat
351 M f
347 M f
352 ? f.orig
348 ? f.orig
353
349
354 merge-patterns specifies executable with bogus path and gets warning:
350 merge-patterns specifies executable with bogus path and gets warning:
355
351
356 $ beforemerge
352 $ beforemerge
357 [merge-tools]
353 [merge-tools]
358 false.whatever=
354 false.whatever=
359 true.priority=1
355 true.priority=1
360 true.executable=cat
356 true.executable=cat
361 # hg update -C 1
357 # hg update -C 1
362 $ hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/nonexisting/mergetool
358 $ hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/nonexisting/mergetool
363 couldn't find merge tool true specified for f
359 couldn't find merge tool true specified for f
364 merging f
360 merging f
365 merging f failed!
361 merging f failed!
366 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
362 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
367 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
363 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
368 [1]
364 [1]
369 $ aftermerge
365 $ aftermerge
370 # cat f
366 # cat f
371 revision 1
367 revision 1
372 space
368 space
373 # hg stat
369 # hg stat
374 M f
370 M f
375 ? f.orig
371 ? f.orig
376
372
377 ui.merge overrules priority
373 ui.merge overrules priority
378
374
379 ui.merge specifies false:
375 ui.merge specifies false:
380
376
381 $ beforemerge
377 $ beforemerge
382 [merge-tools]
378 [merge-tools]
383 false.whatever=
379 false.whatever=
384 true.priority=1
380 true.priority=1
385 true.executable=cat
381 true.executable=cat
386 # hg update -C 1
382 # hg update -C 1
387 $ hg merge -r 2 --config ui.merge=false
383 $ hg merge -r 2 --config ui.merge=false
388 merging f
384 merging f
389 merging f failed!
385 merging f failed!
390 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
386 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
391 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
387 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
392 [1]
388 [1]
393 $ aftermerge
389 $ aftermerge
394 # cat f
390 # cat f
395 revision 1
391 revision 1
396 space
392 space
397 # hg stat
393 # hg stat
398 M f
394 M f
399 ? f.orig
395 ? f.orig
400
396
401 ui.merge specifies internal:fail:
397 ui.merge specifies internal:fail:
402
398
403 $ beforemerge
399 $ beforemerge
404 [merge-tools]
400 [merge-tools]
405 false.whatever=
401 false.whatever=
406 true.priority=1
402 true.priority=1
407 true.executable=cat
403 true.executable=cat
408 # hg update -C 1
404 # hg update -C 1
409 $ hg merge -r 2 --config ui.merge=internal:fail
405 $ hg merge -r 2 --config ui.merge=internal:fail
410 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
406 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
411 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
407 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
412 [1]
408 [1]
413 $ aftermerge
409 $ aftermerge
414 # cat f
410 # cat f
415 revision 1
411 revision 1
416 space
412 space
417 # hg stat
413 # hg stat
418 M f
414 M f
419
415
420 ui.merge specifies internal:local:
416 ui.merge specifies internal:local:
421
417
422 $ beforemerge
418 $ beforemerge
423 [merge-tools]
419 [merge-tools]
424 false.whatever=
420 false.whatever=
425 true.priority=1
421 true.priority=1
426 true.executable=cat
422 true.executable=cat
427 # hg update -C 1
423 # hg update -C 1
428 $ hg merge -r 2 --config ui.merge=internal:local
424 $ hg merge -r 2 --config ui.merge=internal:local
429 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
425 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
430 (branch merge, don't forget to commit)
426 (branch merge, don't forget to commit)
431 $ aftermerge
427 $ aftermerge
432 # cat f
428 # cat f
433 revision 1
429 revision 1
434 space
430 space
435 # hg stat
431 # hg stat
436 M f
432 M f
437
433
438 ui.merge specifies internal:other:
434 ui.merge specifies internal:other:
439
435
440 $ beforemerge
436 $ beforemerge
441 [merge-tools]
437 [merge-tools]
442 false.whatever=
438 false.whatever=
443 true.priority=1
439 true.priority=1
444 true.executable=cat
440 true.executable=cat
445 # hg update -C 1
441 # hg update -C 1
446 $ hg merge -r 2 --config ui.merge=internal:other
442 $ hg merge -r 2 --config ui.merge=internal:other
447 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
443 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
448 (branch merge, don't forget to commit)
444 (branch merge, don't forget to commit)
449 $ aftermerge
445 $ aftermerge
450 # cat f
446 # cat f
451 revision 2
447 revision 2
452 space
448 space
453 # hg stat
449 # hg stat
454 M f
450 M f
455
451
456 ui.merge specifies internal:prompt:
452 ui.merge specifies internal:prompt:
457
453
458 $ beforemerge
454 $ beforemerge
459 [merge-tools]
455 [merge-tools]
460 false.whatever=
456 false.whatever=
461 true.priority=1
457 true.priority=1
462 true.executable=cat
458 true.executable=cat
463 # hg update -C 1
459 # hg update -C 1
464 $ hg merge -r 2 --config ui.merge=internal:prompt
460 $ hg merge -r 2 --config ui.merge=internal:prompt
465 no tool found to merge f
461 no tool found to merge f
466 keep (l)ocal or take (o)ther? l
462 keep (l)ocal or take (o)ther? l
467 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
463 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
468 (branch merge, don't forget to commit)
464 (branch merge, don't forget to commit)
469 $ aftermerge
465 $ aftermerge
470 # cat f
466 # cat f
471 revision 1
467 revision 1
472 space
468 space
473 # hg stat
469 # hg stat
474 M f
470 M f
475
471
476 ui.merge specifies internal:dump:
472 ui.merge specifies internal:dump:
477
473
478 $ beforemerge
474 $ beforemerge
479 [merge-tools]
475 [merge-tools]
480 false.whatever=
476 false.whatever=
481 true.priority=1
477 true.priority=1
482 true.executable=cat
478 true.executable=cat
483 # hg update -C 1
479 # hg update -C 1
484 $ hg merge -r 2 --config ui.merge=internal:dump
480 $ hg merge -r 2 --config ui.merge=internal:dump
485 merging f
481 merging f
486 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
482 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
487 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
483 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
488 [1]
484 [1]
489 $ aftermerge
485 $ aftermerge
490 # cat f
486 # cat f
491 revision 1
487 revision 1
492 space
488 space
493 # hg stat
489 # hg stat
494 M f
490 M f
495 ? f.base
491 ? f.base
496 ? f.local
492 ? f.local
497 ? f.orig
493 ? f.orig
498 ? f.other
494 ? f.other
499
495
500 f.base:
496 f.base:
501
497
502 $ cat f.base
498 $ cat f.base
503 revision 0
499 revision 0
504 space
500 space
505
501
506 f.local:
502 f.local:
507
503
508 $ cat f.local
504 $ cat f.local
509 revision 1
505 revision 1
510 space
506 space
511
507
512 f.other:
508 f.other:
513
509
514 $ cat f.other
510 $ cat f.other
515 revision 2
511 revision 2
516 space
512 space
517 $ rm f.base f.local f.other
513 $ rm f.base f.local f.other
518
514
519 ui.merge specifies internal:other but is overruled by pattern for false:
515 ui.merge specifies internal:other but is overruled by pattern for false:
520
516
521 $ beforemerge
517 $ beforemerge
522 [merge-tools]
518 [merge-tools]
523 false.whatever=
519 false.whatever=
524 true.priority=1
520 true.priority=1
525 true.executable=cat
521 true.executable=cat
526 # hg update -C 1
522 # hg update -C 1
527 $ hg merge -r 2 --config ui.merge=internal:other --config merge-patterns.f=false
523 $ hg merge -r 2 --config ui.merge=internal:other --config merge-patterns.f=false
528 merging f
524 merging f
529 merging f failed!
525 merging f failed!
530 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
526 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
531 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
527 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
532 [1]
528 [1]
533 $ aftermerge
529 $ aftermerge
534 # cat f
530 # cat f
535 revision 1
531 revision 1
536 space
532 space
537 # hg stat
533 # hg stat
538 M f
534 M f
539 ? f.orig
535 ? f.orig
540
536
541 Premerge
537 Premerge
542
538
543 ui.merge specifies internal:other but is overruled by --tool=false
539 ui.merge specifies internal:other but is overruled by --tool=false
544
540
545 $ beforemerge
541 $ beforemerge
546 [merge-tools]
542 [merge-tools]
547 false.whatever=
543 false.whatever=
548 true.priority=1
544 true.priority=1
549 true.executable=cat
545 true.executable=cat
550 # hg update -C 1
546 # hg update -C 1
551 $ hg merge -r 2 --config ui.merge=internal:other --tool=false
547 $ hg merge -r 2 --config ui.merge=internal:other --tool=false
552 merging f
548 merging f
553 merging f failed!
549 merging f failed!
554 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
550 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
555 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
551 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
556 [1]
552 [1]
557 $ aftermerge
553 $ aftermerge
558 # cat f
554 # cat f
559 revision 1
555 revision 1
560 space
556 space
561 # hg stat
557 # hg stat
562 M f
558 M f
563 ? f.orig
559 ? f.orig
564
560
565 HGMERGE specifies internal:other but is overruled by --tool=false
561 HGMERGE specifies internal:other but is overruled by --tool=false
566
562
567 $ HGMERGE=internal:other ; export HGMERGE
563 $ HGMERGE=internal:other ; export HGMERGE
568 $ beforemerge
564 $ beforemerge
569 [merge-tools]
565 [merge-tools]
570 false.whatever=
566 false.whatever=
571 true.priority=1
567 true.priority=1
572 true.executable=cat
568 true.executable=cat
573 # hg update -C 1
569 # hg update -C 1
574 $ hg merge -r 2 --tool=false
570 $ hg merge -r 2 --tool=false
575 merging f
571 merging f
576 merging f failed!
572 merging f failed!
577 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
573 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
578 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
574 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
579 [1]
575 [1]
580 $ aftermerge
576 $ aftermerge
581 # cat f
577 # cat f
582 revision 1
578 revision 1
583 space
579 space
584 # hg stat
580 # hg stat
585 M f
581 M f
586 ? f.orig
582 ? f.orig
587
583
588 $ unset HGMERGE # make sure HGMERGE doesn't interfere with remaining tests
584 $ unset HGMERGE # make sure HGMERGE doesn't interfere with remaining tests
589
585
590 Default is silent simplemerge:
586 Default is silent simplemerge:
591
587
592 $ beforemerge
588 $ beforemerge
593 [merge-tools]
589 [merge-tools]
594 false.whatever=
590 false.whatever=
595 true.priority=1
591 true.priority=1
596 true.executable=cat
592 true.executable=cat
597 # hg update -C 1
593 # hg update -C 1
598 $ hg merge -r 3
594 $ hg merge -r 3
599 merging f
595 merging f
600 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
596 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
601 (branch merge, don't forget to commit)
597 (branch merge, don't forget to commit)
602 $ aftermerge
598 $ aftermerge
603 # cat f
599 # cat f
604 revision 1
600 revision 1
605 space
601 space
606 revision 3
602 revision 3
607 # hg stat
603 # hg stat
608 M f
604 M f
609
605
610 .premerge=True is same:
606 .premerge=True is same:
611
607
612 $ beforemerge
608 $ beforemerge
613 [merge-tools]
609 [merge-tools]
614 false.whatever=
610 false.whatever=
615 true.priority=1
611 true.priority=1
616 true.executable=cat
612 true.executable=cat
617 # hg update -C 1
613 # hg update -C 1
618 $ hg merge -r 3 --config merge-tools.true.premerge=True
614 $ hg merge -r 3 --config merge-tools.true.premerge=True
619 merging f
615 merging f
620 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
616 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
621 (branch merge, don't forget to commit)
617 (branch merge, don't forget to commit)
622 $ aftermerge
618 $ aftermerge
623 # cat f
619 # cat f
624 revision 1
620 revision 1
625 space
621 space
626 revision 3
622 revision 3
627 # hg stat
623 # hg stat
628 M f
624 M f
629
625
630 .premerge=False executes merge-tool:
626 .premerge=False executes merge-tool:
631
627
632 $ beforemerge
628 $ beforemerge
633 [merge-tools]
629 [merge-tools]
634 false.whatever=
630 false.whatever=
635 true.priority=1
631 true.priority=1
636 true.executable=cat
632 true.executable=cat
637 # hg update -C 1
633 # hg update -C 1
638 $ hg merge -r 3 --config merge-tools.true.premerge=False
634 $ hg merge -r 3 --config merge-tools.true.premerge=False
639 merging f
635 merging f
640 revision 1
636 revision 1
641 space
637 space
642 revision 0
638 revision 0
643 space
639 space
644 revision 0
640 revision 0
645 space
641 space
646 revision 3
642 revision 3
647 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
643 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
648 (branch merge, don't forget to commit)
644 (branch merge, don't forget to commit)
649 $ aftermerge
645 $ aftermerge
650 # cat f
646 # cat f
651 revision 1
647 revision 1
652 space
648 space
653 # hg stat
649 # hg stat
654 M f
650 M f
655
651
656 Tool execution
652 Tool execution
657
653
658 set tools.args explicit to include $base $local $other $output:
654 set tools.args explicit to include $base $local $other $output:
659
655
660 $ beforemerge
656 $ beforemerge
661 [merge-tools]
657 [merge-tools]
662 false.whatever=
658 false.whatever=
663 true.priority=1
659 true.priority=1
664 true.executable=cat
660 true.executable=cat
665 # hg update -C 1
661 # hg update -C 1
666 $ hg merge -r 2 --config merge-tools.true.executable=head --config merge-tools.true.args='$base $local $other $output' \
662 $ hg merge -r 2 --config merge-tools.true.executable=head --config merge-tools.true.args='$base $local $other $output' \
667 > | sed 's,==> .* <==,==> ... <==,g'
663 > | sed 's,==> .* <==,==> ... <==,g'
668 merging f
664 merging f
669 ==> ... <==
665 ==> ... <==
670 revision 0
666 revision 0
671 space
667 space
672
668
673 ==> ... <==
669 ==> ... <==
674 revision 1
670 revision 1
675 space
671 space
676
672
677 ==> ... <==
673 ==> ... <==
678 revision 2
674 revision 2
679 space
675 space
680
676
681 ==> ... <==
677 ==> ... <==
682 revision 1
678 revision 1
683 space
679 space
684 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
680 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
685 (branch merge, don't forget to commit)
681 (branch merge, don't forget to commit)
686 $ aftermerge
682 $ aftermerge
687 # cat f
683 # cat f
688 revision 1
684 revision 1
689 space
685 space
690 # hg stat
686 # hg stat
691 M f
687 M f
692
688
693 Merge with "echo mergeresult > $local":
689 Merge with "echo mergeresult > $local":
694
690
695 $ beforemerge
691 $ beforemerge
696 [merge-tools]
692 [merge-tools]
697 false.whatever=
693 false.whatever=
698 true.priority=1
694 true.priority=1
699 true.executable=cat
695 true.executable=cat
700 # hg update -C 1
696 # hg update -C 1
701 $ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > $local'
697 $ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > $local'
702 merging f
698 merging f
703 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
699 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
704 (branch merge, don't forget to commit)
700 (branch merge, don't forget to commit)
705 $ aftermerge
701 $ aftermerge
706 # cat f
702 # cat f
707 mergeresult
703 mergeresult
708 # hg stat
704 # hg stat
709 M f
705 M f
710
706
711 - and $local is the file f:
707 - and $local is the file f:
712
708
713 $ beforemerge
709 $ beforemerge
714 [merge-tools]
710 [merge-tools]
715 false.whatever=
711 false.whatever=
716 true.priority=1
712 true.priority=1
717 true.executable=cat
713 true.executable=cat
718 # hg update -C 1
714 # hg update -C 1
719 $ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > f'
715 $ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > f'
720 merging f
716 merging f
721 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
717 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
722 (branch merge, don't forget to commit)
718 (branch merge, don't forget to commit)
723 $ aftermerge
719 $ aftermerge
724 # cat f
720 # cat f
725 mergeresult
721 mergeresult
726 # hg stat
722 # hg stat
727 M f
723 M f
728
724
729 Merge with "echo mergeresult > $output" - the variable is a bit magic:
725 Merge with "echo mergeresult > $output" - the variable is a bit magic:
730
726
731 $ beforemerge
727 $ beforemerge
732 [merge-tools]
728 [merge-tools]
733 false.whatever=
729 false.whatever=
734 true.priority=1
730 true.priority=1
735 true.executable=cat
731 true.executable=cat
736 # hg update -C 1
732 # hg update -C 1
737 $ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > $output'
733 $ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > $output'
738 merging f
734 merging f
739 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
735 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
740 (branch merge, don't forget to commit)
736 (branch merge, don't forget to commit)
741 $ aftermerge
737 $ aftermerge
742 # cat f
738 # cat f
743 mergeresult
739 mergeresult
744 # hg stat
740 # hg stat
745 M f
741 M f
746
742
747 Merge using tool with a path that must be quoted:
743 Merge using tool with a path that must be quoted:
748
744
749 $ beforemerge
745 $ beforemerge
750 [merge-tools]
746 [merge-tools]
751 false.whatever=
747 false.whatever=
752 true.priority=1
748 true.priority=1
753 true.executable=cat
749 true.executable=cat
754 # hg update -C 1
750 # hg update -C 1
755 $ cat <<EOF > 'my merge tool'
751 $ cat <<EOF > 'my merge tool'
756 > #!/bin/sh
757 > cat "\$1" "\$2" "\$3" > "\$4"
752 > cat "\$1" "\$2" "\$3" > "\$4"
758 > EOF
753 > EOF
759 $ chmod +x 'my merge tool'
754 $ hg --config merge-tools.true.executable='sh' \
760 $ hg merge -r 2 --config merge-tools.true.executable='./my merge tool' --config merge-tools.true.args='$base $local $other $output'
755 > --config merge-tools.true.args='"./my merge tool" $base $local $other $output' \
756 > merge -r 2
761 merging f
757 merging f
762 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
758 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
763 (branch merge, don't forget to commit)
759 (branch merge, don't forget to commit)
764 $ rm -f 'my merge tool'
760 $ rm -f 'my merge tool'
765 $ aftermerge
761 $ aftermerge
766 # cat f
762 # cat f
767 revision 0
763 revision 0
768 space
764 space
769 revision 1
765 revision 1
770 space
766 space
771 revision 2
767 revision 2
772 space
768 space
773 # hg stat
769 # hg stat
774 M f
770 M f
775
771
776 Merge post-processing
772 Merge post-processing
777
773
778 cat is a bad merge-tool and doesn't change:
774 cat is a bad merge-tool and doesn't change:
779
775
780 $ beforemerge
776 $ beforemerge
781 [merge-tools]
777 [merge-tools]
782 false.whatever=
778 false.whatever=
783 true.priority=1
779 true.priority=1
784 true.executable=cat
780 true.executable=cat
785 # hg update -C 1
781 # hg update -C 1
786 $ hg merge -y -r 2 --config merge-tools.true.checkchanged=1
782 $ hg merge -y -r 2 --config merge-tools.true.checkchanged=1
787 merging f
783 merging f
788 revision 1
784 revision 1
789 space
785 space
790 revision 0
786 revision 0
791 space
787 space
792 revision 2
788 revision 2
793 space
789 space
794 output file f appears unchanged
790 output file f appears unchanged
795 was merge successful (yn)? n
791 was merge successful (yn)? n
796 merging f failed!
792 merging f failed!
797 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
793 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
798 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
794 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
799 [1]
795 [1]
800 $ aftermerge
796 $ aftermerge
801 # cat f
797 # cat f
802 revision 1
798 revision 1
803 space
799 space
804 # hg stat
800 # hg stat
805 M f
801 M f
806 ? f.orig
802 ? f.orig
General Comments 0
You need to be logged in to leave comments. Login now