##// END OF EJS Templates
merge: copy fixes and tests...
Matt Mackall -
r3252:ae85272b default
parent child Browse files
Show More
@@ -0,0 +1,102 b''
1 #!/bin/sh
2
3 mkdir -p t
4 cd t
5
6 cat <<'EOF' > merge
7 #!/bin/sh
8 echo merge > $1
9 EOF
10 chmod +x merge
11
12 # perform a test merge with possible renaming
13 #
14 # args:
15 # $1 = action in local branch
16 # $2 = action in remote branch
17 # $3 = action in working dir
18 # $4 = expected result
19 tm()
20 {
21 mkdir t
22 cd t
23 hg init
24 echo "[merge]" >> .hg/hgrc
25 echo "followcopies = 1" >> .hg/hgrc
26
27 # base
28 echo base > a
29 echo base > rev # used to force commits
30 hg add a rev
31 hg ci -m "base" -d "0 0"
32
33 # remote
34 echo remote > rev
35 if [ "$2" != "" ] ; then $2 ; fi
36 hg ci -m "remote" -d "0 0"
37
38 # local
39 hg co -q 0
40 echo local > rev
41 if [ "$1" != "" ] ; then $1 ; fi
42 hg ci -m "local" -d "0 0"
43
44 # working dir
45 echo local > rev
46 if [ "$3" != "" ] ; then $3 ; fi
47
48 # merge
49 echo "--------------"
50 echo "test L:$1 R:$2 W:$3 - $4"
51 echo "--------------"
52 env HGMERGE=../merge hg merge -y --debug --traceback
53
54 echo "--------------"
55 hg status -camC -X rev
56
57 hg ci -m "merge" -d "0 0"
58
59 echo "--------------"
60 echo
61
62 cd ..
63 rm -rf t
64 }
65
66 up() {
67 cp rev $1
68 hg add $1 2> /dev/null
69 if [ "$2" != "" ] ; then
70 cp rev $2
71 hg add $2 2> /dev/null
72 fi
73 }
74
75 uc() { up $1; hg cp $1 $2; } # update + copy
76 um() { up $1; hg mv $1 $2; }
77 nc() { hg cp $1 $2; } # just copy
78 nm() { hg mv $1 $2; } # just move
79
80 tm "up a " "nc a b" " " "1 get local a to b"
81 tm "nc a b" "up a " " " "2 get rem change to a and b"
82 tm "up a " "nm a b" " " "3 get local a change to b, remove a"
83 tm "nm a b" "up a " " " "4 get remote change to b"
84 tm " " "nc a b" " " "5 get b"
85 tm "nc a b" " " " " "6 nothing"
86 tm " " "nm a b" " " "7 get b"
87 tm "nm a b" " " " " "8 nothing"
88 tm "um a b" "um a b" " " "9 do merge with ancestor in a"
89 #tm "um a c" "um x c" " " "10 do merge with no ancestor"
90 tm "nm a b" "nm a c" " " "11 get c, keep b"
91 tm "nc a b" "up b " " " "12 merge b no ancestor"
92 tm "up b " "nm a b" " " "13 merge b no ancestor"
93 tm "nc a b" "up a b" " " "14 merge b no ancestor"
94 tm "up b " "nm a b" " " "15 merge b no ancestor, remove a"
95 tm "nc a b" "up a b" " " "16 get a, merge b no ancestor"
96 tm "up a b" "nc a b" " " "17 keep a, merge b no ancestor"
97 tm "nm a b" "up a b" " " "18 merge b no ancestor"
98 tm "up a b" "nm a b" " " "19 merge b no ancestor, prompt remove a"
99 tm "up a " "um a b" " " "20 merge a and b to b, remove a"
100 tm "um a b" "up a " " " "21 merge a and b to b"
101 #tm "nm a b" "um x a" " " "22 get a, keep b"
102 tm "nm a b" "up a c" " " "23 get c, keep b"
@@ -0,0 +1,457 b''
1 --------------
2 test L:up a R:nc a b W: - 1 get local a to b
3 --------------
4 resolving manifests
5 overwrite None branchmerge True partial False
6 ancestor e300d1c794ec local 735846fee2d7 remote 924404dff337
7 rev: versions differ -> m
8 a: remote copied -> c
9 merging a and b to b
10 resolving a
11 my a@e300d1c794ec other b@735846fee2d7 ancestor a@924404dff337
12 copying a to b
13 merging rev
14 resolving rev
15 my rev@e300d1c794ec other rev@735846fee2d7 ancestor rev@924404dff337
16 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
17 (branch merge, don't forget to commit)
18 --------------
19 M b
20 a
21 C a
22 --------------
23
24 --------------
25 test L:nc a b R:up a W: - 2 get rem change to a and b
26 --------------
27 resolving manifests
28 overwrite None branchmerge True partial False
29 ancestor ac809aeed39a local f4db7e329e71 remote 924404dff337
30 a: remote is newer -> g
31 b: local copied -> c
32 rev: versions differ -> m
33 getting a
34 merging b and a to b
35 resolving b
36 my b@ac809aeed39a other a@f4db7e329e71 ancestor a@924404dff337
37 merging rev
38 resolving rev
39 my rev@ac809aeed39a other rev@f4db7e329e71 ancestor rev@924404dff337
40 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
41 (branch merge, don't forget to commit)
42 --------------
43 M a
44 M b
45 --------------
46
47 --------------
48 test L:up a R:nm a b W: - 3 get local a change to b, remove a
49 --------------
50 resolving manifests
51 overwrite None branchmerge True partial False
52 ancestor e300d1c794ec local e03727d2d66b remote 924404dff337
53 a: remote moved -> c
54 rev: versions differ -> m
55 merging a and b to b
56 resolving a
57 my a@e300d1c794ec other b@e03727d2d66b ancestor a@924404dff337
58 copying a to b
59 removing a
60 merging rev
61 resolving rev
62 my rev@e300d1c794ec other rev@e03727d2d66b ancestor rev@924404dff337
63 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
64 (branch merge, don't forget to commit)
65 --------------
66 M b
67 a
68 --------------
69
70 --------------
71 test L:nm a b R:up a W: - 4 get remote change to b
72 --------------
73 resolving manifests
74 overwrite None branchmerge True partial False
75 ancestor ecf3cb2a4219 local f4db7e329e71 remote 924404dff337
76 b: local moved -> c
77 rev: versions differ -> m
78 merging b and a to b
79 resolving b
80 my b@ecf3cb2a4219 other a@f4db7e329e71 ancestor a@924404dff337
81 merging rev
82 resolving rev
83 my rev@ecf3cb2a4219 other rev@f4db7e329e71 ancestor rev@924404dff337
84 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
85 (branch merge, don't forget to commit)
86 --------------
87 M b
88 --------------
89
90 --------------
91 test L: R:nc a b W: - 5 get b
92 --------------
93 resolving manifests
94 overwrite None branchmerge True partial False
95 ancestor 94b33a1b7f2d local 735846fee2d7 remote 924404dff337
96 rev: versions differ -> m
97 a: remote copied -> c
98 merging a and b to b
99 resolving a
100 my a@924404dff337 other b@735846fee2d7 ancestor a@924404dff337
101 copying a to b
102 merging rev
103 resolving rev
104 my rev@94b33a1b7f2d other rev@735846fee2d7 ancestor rev@924404dff337
105 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
106 (branch merge, don't forget to commit)
107 --------------
108 M a
109 M b
110 a
111 --------------
112
113 --------------
114 test L:nc a b R: W: - 6 nothing
115 --------------
116 resolving manifests
117 overwrite None branchmerge True partial False
118 ancestor ac809aeed39a local 97c705ade336 remote 924404dff337
119 b: local copied -> c
120 rev: versions differ -> m
121 merging b and a to b
122 resolving b
123 my b@ac809aeed39a other a@924404dff337 ancestor a@924404dff337
124 merging rev
125 resolving rev
126 my rev@ac809aeed39a other rev@97c705ade336 ancestor rev@924404dff337
127 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
128 (branch merge, don't forget to commit)
129 --------------
130 M b
131 C a
132 --------------
133
134 --------------
135 test L: R:nm a b W: - 7 get b
136 --------------
137 resolving manifests
138 overwrite None branchmerge True partial False
139 ancestor 94b33a1b7f2d local e03727d2d66b remote 924404dff337
140 a: remote moved -> c
141 rev: versions differ -> m
142 merging a and b to b
143 resolving a
144 my a@924404dff337 other b@e03727d2d66b ancestor a@924404dff337
145 copying a to b
146 removing a
147 merging rev
148 resolving rev
149 my rev@94b33a1b7f2d other rev@e03727d2d66b ancestor rev@924404dff337
150 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
151 (branch merge, don't forget to commit)
152 --------------
153 M b
154 a
155 --------------
156
157 --------------
158 test L:nm a b R: W: - 8 nothing
159 --------------
160 resolving manifests
161 overwrite None branchmerge True partial False
162 ancestor ecf3cb2a4219 local 97c705ade336 remote 924404dff337
163 b: local moved -> c
164 rev: versions differ -> m
165 merging b and a to b
166 resolving b
167 my b@ecf3cb2a4219 other a@924404dff337 ancestor a@924404dff337
168 merging rev
169 resolving rev
170 my rev@ecf3cb2a4219 other rev@97c705ade336 ancestor rev@924404dff337
171 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
172 (branch merge, don't forget to commit)
173 --------------
174 M b
175 --------------
176
177 --------------
178 test L:um a b R:um a b W: - 9 do merge with ancestor in a
179 --------------
180 resolving manifests
181 overwrite None branchmerge True partial False
182 ancestor ec03c2ca8642 local 79cc6877a3b7 remote 924404dff337
183 b: versions differ -> m
184 rev: versions differ -> m
185 merging b
186 resolving b
187 my b@ec03c2ca8642 other b@79cc6877a3b7 ancestor a@924404dff337
188 merging rev
189 resolving rev
190 my rev@ec03c2ca8642 other rev@79cc6877a3b7 ancestor rev@924404dff337
191 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
192 (branch merge, don't forget to commit)
193 --------------
194 M b
195 --------------
196
197 --------------
198 test L:nm a b R:nm a c W: - 11 get c, keep b
199 --------------
200 resolving manifests
201 overwrite None branchmerge True partial False
202 ancestor ecf3cb2a4219 local e6abcc1a30c2 remote 924404dff337
203 rev: versions differ -> m
204 c: remote created -> g
205 getting c
206 merging rev
207 resolving rev
208 my rev@ecf3cb2a4219 other rev@e6abcc1a30c2 ancestor rev@924404dff337
209 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
210 (branch merge, don't forget to commit)
211 --------------
212 M c
213 C b
214 --------------
215
216 --------------
217 test L:nc a b R:up b W: - 12 merge b no ancestor
218 --------------
219 resolving manifests
220 overwrite None branchmerge True partial False
221 ancestor ac809aeed39a local af30c7647fc7 remote 924404dff337
222 b: versions differ -> m
223 rev: versions differ -> m
224 merging b
225 resolving b
226 my b@ac809aeed39a other b@af30c7647fc7 ancestor b@000000000000
227 merging rev
228 resolving rev
229 my rev@ac809aeed39a other rev@af30c7647fc7 ancestor rev@924404dff337
230 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
231 (branch merge, don't forget to commit)
232 --------------
233 M b
234 C a
235 --------------
236
237 --------------
238 test L:up b R:nm a b W: - 13 merge b no ancestor
239 --------------
240 resolving manifests
241 overwrite None branchmerge True partial False
242 ancestor 59318016310c local e03727d2d66b remote 924404dff337
243 a: other deleted -> r
244 b: versions differ -> m
245 rev: versions differ -> m
246 removing a
247 merging b
248 resolving b
249 my b@59318016310c other b@e03727d2d66b ancestor b@000000000000
250 merging rev
251 resolving rev
252 my rev@59318016310c other rev@e03727d2d66b ancestor rev@924404dff337
253 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
254 (branch merge, don't forget to commit)
255 --------------
256 M b
257 --------------
258
259 --------------
260 test L:nc a b R:up a b W: - 14 merge b no ancestor
261 --------------
262 resolving manifests
263 overwrite None branchmerge True partial False
264 ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
265 a: remote is newer -> g
266 b: versions differ -> m
267 rev: versions differ -> m
268 getting a
269 merging b
270 resolving b
271 my b@ac809aeed39a other b@8dbce441892a ancestor b@000000000000
272 merging rev
273 resolving rev
274 my rev@ac809aeed39a other rev@8dbce441892a ancestor rev@924404dff337
275 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
276 (branch merge, don't forget to commit)
277 --------------
278 M a
279 M b
280 --------------
281
282 --------------
283 test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
284 --------------
285 resolving manifests
286 overwrite None branchmerge True partial False
287 ancestor 59318016310c local e03727d2d66b remote 924404dff337
288 a: other deleted -> r
289 b: versions differ -> m
290 rev: versions differ -> m
291 removing a
292 merging b
293 resolving b
294 my b@59318016310c other b@e03727d2d66b ancestor b@000000000000
295 merging rev
296 resolving rev
297 my rev@59318016310c other rev@e03727d2d66b ancestor rev@924404dff337
298 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
299 (branch merge, don't forget to commit)
300 --------------
301 M b
302 --------------
303
304 --------------
305 test L:nc a b R:up a b W: - 16 merge a, merge b no ancestor
306 --------------
307 resolving manifests
308 overwrite None branchmerge True partial False
309 ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
310 a: remote is newer -> g
311 b: versions differ -> m
312 rev: versions differ -> m
313 getting a
314 merging b
315 resolving b
316 my b@ac809aeed39a other b@8dbce441892a ancestor b@000000000000
317 merging rev
318 resolving rev
319 my rev@ac809aeed39a other rev@8dbce441892a ancestor rev@924404dff337
320 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
321 (branch merge, don't forget to commit)
322 --------------
323 M a
324 M b
325 --------------
326
327 --------------
328 test L:up a b R:nc a b W: - 17 merge a, merge b no ancestor
329 --------------
330 resolving manifests
331 overwrite None branchmerge True partial False
332 ancestor 0b76e65c8289 local 735846fee2d7 remote 924404dff337
333 b: versions differ -> m
334 rev: versions differ -> m
335 merging b
336 resolving b
337 my b@0b76e65c8289 other b@735846fee2d7 ancestor b@000000000000
338 merging rev
339 resolving rev
340 my rev@0b76e65c8289 other rev@735846fee2d7 ancestor rev@924404dff337
341 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
342 (branch merge, don't forget to commit)
343 --------------
344 M b
345 C a
346 --------------
347
348 --------------
349 test L:nm a b R:up a b W: - 18 merge b no ancestor
350 --------------
351 resolving manifests
352 overwrite None branchmerge True partial False
353 ancestor ecf3cb2a4219 local 8dbce441892a remote 924404dff337
354 b: versions differ -> m
355 rev: versions differ -> m
356 a: prompt recreating -> g
357 getting a
358 merging b
359 resolving b
360 my b@ecf3cb2a4219 other b@8dbce441892a ancestor b@000000000000
361 merging rev
362 resolving rev
363 my rev@ecf3cb2a4219 other rev@8dbce441892a ancestor rev@924404dff337
364 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
365 (branch merge, don't forget to commit)
366 --------------
367 M a
368 M b
369 --------------
370
371 --------------
372 test L:up a b R:nm a b W: - 19 merge b no ancestor, remove a
373 --------------
374 resolving manifests
375 overwrite None branchmerge True partial False
376 ancestor 0b76e65c8289 local e03727d2d66b remote 924404dff337
377 b: versions differ -> m
378 rev: versions differ -> m
379 merging b
380 resolving b
381 my b@0b76e65c8289 other b@e03727d2d66b ancestor b@000000000000
382 merging rev
383 resolving rev
384 my rev@0b76e65c8289 other rev@e03727d2d66b ancestor rev@924404dff337
385 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
386 (branch merge, don't forget to commit)
387 --------------
388 M b
389 C a
390 --------------
391
392 --------------
393 test L:up a R:um a b W: - 20 merge a and b to b, remove a
394 --------------
395 resolving manifests
396 overwrite None branchmerge True partial False
397 ancestor e300d1c794ec local 79cc6877a3b7 remote 924404dff337
398 a: remote moved -> c
399 rev: versions differ -> m
400 merging a and b to b
401 resolving a
402 my a@e300d1c794ec other b@79cc6877a3b7 ancestor a@924404dff337
403 copying a to b
404 removing a
405 merging rev
406 resolving rev
407 my rev@e300d1c794ec other rev@79cc6877a3b7 ancestor rev@924404dff337
408 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
409 (branch merge, don't forget to commit)
410 --------------
411 M b
412 a
413 --------------
414
415 --------------
416 test L:um a b R:up a W: - 21 merge a and b to b
417 --------------
418 resolving manifests
419 overwrite None branchmerge True partial False
420 ancestor ec03c2ca8642 local f4db7e329e71 remote 924404dff337
421 b: local moved -> c
422 rev: versions differ -> m
423 merging b and a to b
424 resolving b
425 my b@ec03c2ca8642 other a@f4db7e329e71 ancestor a@924404dff337
426 merging rev
427 resolving rev
428 my rev@ec03c2ca8642 other rev@f4db7e329e71 ancestor rev@924404dff337
429 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
430 (branch merge, don't forget to commit)
431 --------------
432 M b
433 --------------
434
435 --------------
436 test L:nm a b R:up a c W: - 23 get c, keep b
437 --------------
438 resolving manifests
439 overwrite None branchmerge True partial False
440 ancestor ecf3cb2a4219 local 2b958612230f remote 924404dff337
441 b: local moved -> c
442 rev: versions differ -> m
443 c: remote created -> g
444 merging b and a to b
445 resolving b
446 my b@ecf3cb2a4219 other a@2b958612230f ancestor a@924404dff337
447 getting c
448 merging rev
449 resolving rev
450 my rev@ecf3cb2a4219 other rev@2b958612230f ancestor rev@924404dff337
451 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
452 (branch merge, don't forget to commit)
453 --------------
454 M b
455 M c
456 --------------
457
@@ -248,11 +248,11 b' def manifestmerge(ui, m1, m2, ma, copy, '
248 248 continue
249 249 if f in copy:
250 250 f2 = copy[f]
251 if f2 in ma or f2 in m1: # already seen
251 if f2 not in m2: # already seen
252 252 continue
253 253 # rename case 1, A/A,B/A
254 254 act("remote copied",
255 f, "c", f2, f, m1[f2], m2[f], fmerge(f2, f, f2), False)
255 f2, "c", f, f, m1[f2], m2[f], fmerge(f2, f, f2), False)
256 256 elif f in ma:
257 257 if overwrite or backwards:
258 258 act("recreating", f, "g", m2.execf(f), n)
@@ -285,6 +285,7 b' def applyupdates(repo, action, xp1, xp2)'
285 285 removed +=1
286 286 elif m == "c": # copy
287 287 f2, fd, my, other, flag, move = a[2:]
288 repo.ui.status(_("merging %s and %s to %s\n") % (f, f2, fd))
288 289 if filemerge(repo, f, f2, fd, my, other, xp1, xp2, move):
289 290 unresolved += 1
290 291 util.set_exec(repo.wjoin(fd), flag)
@@ -6,6 +6,7 b' resolving manifests'
6 6 ancestor f26ec4fc3fa3 local 8e765a822af2 remote af1939970a1c
7 7 a: remote moved -> c
8 8 b2: remote created -> g
9 merging a and b to b
9 10 resolving a
10 11 my a@f26ec4fc3fa3 other b@8e765a822af2 ancestor a@af1939970a1c
11 12 copying a to b
General Comments 0
You need to be logged in to leave comments. Login now