##// END OF EJS Templates
copies-tests: add a case where with merge with an overwritten files...
marmoute -
r44945:c8fd2141 default
parent child Browse files
Show More
@@ -1,755 +1,869 b''
1 1 =====================================================
2 2 Test Copy tracing for chain of copies involving merge
3 3 =====================================================
4 4
5 5 This test files covers copies/rename case for a chains of commit where merges
6 6 are involved. It cheks we do not have unwanted update of behavior and that the
7 7 different options to retrieve copies behave correctly.
8 8
9 9 Setup
10 10 =====
11 11
12 12 use git diff to see rename
13 13
14 14 $ cat << EOF >> $HGRCPATH
15 15 > [diff]
16 16 > git=yes
17 17 > [ui]
18 18 > logtemplate={rev} {desc}]\n
19 19 > EOF
20 20
21 21 $ hg init repo-chain
22 22 $ cd repo-chain
23 23
24 24 Add some linear rename initialy
25 25
26 26 $ touch a b h
27 27 $ hg ci -Am 'i-0 initial commit: a b h'
28 28 adding a
29 29 adding b
30 30 adding h
31 31 $ hg mv a c
32 32 $ hg ci -Am 'i-1: a -move-> c'
33 33 $ hg mv c d
34 34 $ hg ci -Am 'i-2: c -move-> d'
35 35 $ hg log -G
36 36 @ 2 i-2: c -move-> d]
37 37 |
38 38 o 1 i-1: a -move-> c]
39 39 |
40 40 o 0 i-0 initial commit: a b h]
41 41
42 42
43 43 And having another branch with renames on the other side
44 44
45 45 $ hg mv d e
46 46 $ hg ci -Am 'a-1: d -move-> e'
47 47 $ hg mv e f
48 48 $ hg ci -Am 'a-2: e -move-> f'
49 49 $ hg log -G --rev '::.'
50 50 @ 4 a-2: e -move-> f]
51 51 |
52 52 o 3 a-1: d -move-> e]
53 53 |
54 54 o 2 i-2: c -move-> d]
55 55 |
56 56 o 1 i-1: a -move-> c]
57 57 |
58 58 o 0 i-0 initial commit: a b h]
59 59
60 60
61 61 Have a branching with nothing on one side
62 62
63 63 $ hg up 'desc("i-2")'
64 64 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
65 65 $ echo foo > b
66 66 $ hg ci -m 'b-1: b update'
67 67 created new head
68 68 $ hg log -G --rev '::.'
69 69 @ 5 b-1: b update]
70 70 |
71 71 o 2 i-2: c -move-> d]
72 72 |
73 73 o 1 i-1: a -move-> c]
74 74 |
75 75 o 0 i-0 initial commit: a b h]
76 76
77 77
78 78
79 79 Merge the two branches we just defined (in both directions)
80 80 - one with change to an unrelated file
81 81 - one with renames in them
82 82
83 83 $ hg up 'desc("b-1")'
84 84 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
85 85 $ hg merge 'desc("a-2")'
86 86 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
87 87 (branch merge, don't forget to commit)
88 88 $ hg ci -m 'mBAm-0 simple merge - one way'
89 89 $ hg up 'desc("a-2")'
90 90 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
91 91 $ hg merge 'desc("b-1")'
92 92 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
93 93 (branch merge, don't forget to commit)
94 94 $ hg ci -m 'mABm-0 simple merge - the other way'
95 95 created new head
96 96 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
97 97 @ 7 mABm-0 simple merge - the other way]
98 98 |\
99 99 +---o 6 mBAm-0 simple merge - one way]
100 100 | |/
101 101 | o 5 b-1: b update]
102 102 | |
103 103 o | 4 a-2: e -move-> f]
104 104 | |
105 105 o | 3 a-1: d -move-> e]
106 106 |/
107 107 o 2 i-2: c -move-> d]
108 108 |
109 109 o 1 i-1: a -move-> c]
110 110 |
111 111 o 0 i-0 initial commit: a b h]
112 112
113 113
114 114 Create a branch that delete a file previous renamed
115 115
116 116 $ hg up 'desc("i-2")'
117 117 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
118 118 $ hg rm d
119 119 $ hg ci -m 'c-1 delete d'
120 120 created new head
121 121 $ hg log -G --rev '::.'
122 122 @ 8 c-1 delete d]
123 123 |
124 124 o 2 i-2: c -move-> d]
125 125 |
126 126 o 1 i-1: a -move-> c]
127 127 |
128 128 o 0 i-0 initial commit: a b h]
129 129
130 130
131 131 Merge:
132 132 - one with change to an unrelated file
133 133 - one deleting the change
134 134 and recreate an unrelated file after the merge
135 135
136 136 $ hg up 'desc("b-1")'
137 137 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
138 138 $ hg merge 'desc("c-1")'
139 139 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
140 140 (branch merge, don't forget to commit)
141 141 $ hg ci -m 'mBCm-0 simple merge - one way'
142 142 $ echo bar > d
143 143 $ hg add d
144 144 $ hg ci -m 'mBCm-1 re-add d'
145 145 $ hg up 'desc("c-1")'
146 146 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
147 147 $ hg merge 'desc("b-1")'
148 148 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 149 (branch merge, don't forget to commit)
150 150 $ hg ci -m 'mCBm-0 simple merge - the other way'
151 151 created new head
152 152 $ echo bar > d
153 153 $ hg add d
154 154 $ hg ci -m 'mCBm-1 re-add d'
155 155 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
156 156 @ 12 mCBm-1 re-add d]
157 157 |
158 158 o 11 mCBm-0 simple merge - the other way]
159 159 |\
160 160 | | o 10 mBCm-1 re-add d]
161 161 | | |
162 162 +---o 9 mBCm-0 simple merge - one way]
163 163 | |/
164 164 | o 8 c-1 delete d]
165 165 | |
166 166 o | 5 b-1: b update]
167 167 |/
168 168 o 2 i-2: c -move-> d]
169 169 |
170 170 o 1 i-1: a -move-> c]
171 171 |
172 172 o 0 i-0 initial commit: a b h]
173 173
174 174
175 175 Create a branch that delete a file previous renamed and recreate it
176 176
177 177 $ hg up 'desc("i-2")'
178 178 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
179 179 $ hg rm d
180 180 $ hg ci -m 'd-1 delete d'
181 181 created new head
182 182 $ echo bar > d
183 183 $ hg add d
184 184 $ hg ci -m 'd-2 re-add d'
185 185 $ hg log -G --rev '::.'
186 186 @ 14 d-2 re-add d]
187 187 |
188 188 o 13 d-1 delete d]
189 189 |
190 190 o 2 i-2: c -move-> d]
191 191 |
192 192 o 1 i-1: a -move-> c]
193 193 |
194 194 o 0 i-0 initial commit: a b h]
195 195
196 196
197 197 Merge:
198 198 - one with change to an unrelated file
199 199 - one deleting and recreating the file
200 200
201 201 Note:
202 202 | In this case, the merge get conflicting information since on one side we have
203 203 | a "brand new" d. and one the other one we have "d renamed from c (itself
204 204 | renamed from c)".
205 205 |
206 206 | The current code arbitrarily pick one side
207 207
208 208 $ hg up 'desc("b-1")'
209 209 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
210 210 $ hg merge 'desc("d-2")'
211 211 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
212 212 (branch merge, don't forget to commit)
213 213 $ hg ci -m 'mBDm-0 simple merge - one way'
214 214 $ hg up 'desc("d-2")'
215 215 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
216 216 $ hg merge 'desc("b-1")'
217 217 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
218 218 (branch merge, don't forget to commit)
219 219 $ hg ci -m 'mDBm-0 simple merge - the other way'
220 220 created new head
221 221 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
222 222 @ 16 mDBm-0 simple merge - the other way]
223 223 |\
224 224 +---o 15 mBDm-0 simple merge - one way]
225 225 | |/
226 226 | o 14 d-2 re-add d]
227 227 | |
228 228 | o 13 d-1 delete d]
229 229 | |
230 230 o | 5 b-1: b update]
231 231 |/
232 232 o 2 i-2: c -move-> d]
233 233 |
234 234 o 1 i-1: a -move-> c]
235 235 |
236 236 o 0 i-0 initial commit: a b h]
237 237
238 238
239 239 Having another branch renaming a different file to the same filename as another
240 240
241 241 $ hg up 'desc("i-2")'
242 242 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
243 243 $ hg mv b g
244 244 $ hg ci -m 'e-1 b -move-> g'
245 245 created new head
246 246 $ hg mv g f
247 247 $ hg ci -m 'e-2 g -move-> f'
248 248 $ hg log -G --rev '::.'
249 249 @ 18 e-2 g -move-> f]
250 250 |
251 251 o 17 e-1 b -move-> g]
252 252 |
253 253 o 2 i-2: c -move-> d]
254 254 |
255 255 o 1 i-1: a -move-> c]
256 256 |
257 257 o 0 i-0 initial commit: a b h]
258 258
259 259
260 260 Merge:
261 261 - the "e-" branch renaming b to f (through 'g')
262 262 - the "a-" branch renaming d to f (through e)
263 263
264 264 $ hg up 'desc("a-2")'
265 265 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
266 266 $ hg merge 'desc("e-2")'
267 267 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
268 268 (branch merge, don't forget to commit)
269 269 $ hg ci -m 'mAEm-0 simple merge - one way'
270 270 $ hg up 'desc("e-2")'
271 271 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
272 272 $ hg merge 'desc("a-2")'
273 273 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
274 274 (branch merge, don't forget to commit)
275 275 $ hg ci -m 'mEAm-0 simple merge - the other way'
276 276 created new head
277 277 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
278 278 @ 20 mEAm-0 simple merge - the other way]
279 279 |\
280 280 +---o 19 mAEm-0 simple merge - one way]
281 281 | |/
282 282 | o 18 e-2 g -move-> f]
283 283 | |
284 284 | o 17 e-1 b -move-> g]
285 285 | |
286 286 o | 4 a-2: e -move-> f]
287 287 | |
288 288 o | 3 a-1: d -move-> e]
289 289 |/
290 290 o 2 i-2: c -move-> d]
291 291 |
292 292 o 1 i-1: a -move-> c]
293 293 |
294 294 o 0 i-0 initial commit: a b h]
295 295
296 296
297 297 Note:
298 298 | In this case, one of the merge wrongly record a merge while there is none.
299 299 | This lead to bad copy tracing information to be dug up.
300 300
301 301
302 302 Merge:
303 303 - one with change to an unrelated file (b)
304 304 - one overwriting a file (d) with a rename (from h to i to d)
305 305
306 306 $ hg up 'desc("i-2")'
307 307 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
308 308 $ hg mv h i
309 309 $ hg commit -m "f-1: rename h -> i"
310 310 created new head
311 311 $ hg mv --force i d
312 312 $ hg commit -m "f-2: rename i -> d"
313 313 $ hg debugindex d
314 314 rev linkrev nodeid p1 p2
315 315 0 2 01c2f5eabdc4 000000000000 000000000000
316 316 1 10 b004912a8510 000000000000 000000000000
317 317 2 15 0bb5445dc4d0 01c2f5eabdc4 b004912a8510
318 318 3 22 c72365ee036f 000000000000 000000000000
319 319 $ hg up 'desc("b-1")'
320 320 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
321 321 $ hg merge 'desc("f-2")'
322 322 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
323 323 (branch merge, don't forget to commit)
324 324 $ hg ci -m 'mBFm-0 simple merge - one way'
325 325 $ hg up 'desc("f-2")'
326 326 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
327 327 $ hg merge 'desc("b-1")'
328 328 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
329 329 (branch merge, don't forget to commit)
330 330 $ hg ci -m 'mFBm-0 simple merge - the other way'
331 331 created new head
332 332 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
333 333 @ 24 mFBm-0 simple merge - the other way]
334 334 |\
335 335 +---o 23 mBFm-0 simple merge - one way]
336 336 | |/
337 337 | o 22 f-2: rename i -> d]
338 338 | |
339 339 | o 21 f-1: rename h -> i]
340 340 | |
341 341 o | 5 b-1: b update]
342 342 |/
343 343 o 2 i-2: c -move-> d]
344 344 |
345 345 o 1 i-1: a -move-> c]
346 346 |
347 347 o 0 i-0 initial commit: a b h]
348 348
349 349
350 350 Merge:
351 351 - one with change to a file
352 352 - one deleting and recreating the file
353 353
354 354 $ hg up 'desc("i-2")'
355 355 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
356 356 $ echo "some update" >> d
357 357 $ hg commit -m "g-1: update d"
358 358 created new head
359 359 $ hg up 'desc("d-2")'
360 360 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
361 361 $ hg merge 'desc("g-1")' --tool :union
362 362 merging d
363 363 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
364 364 (branch merge, don't forget to commit)
365 365 $ hg ci -m 'mDGm-0 simple merge - one way'
366 366 $ hg up 'desc("g-1")'
367 367 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
368 368 $ hg merge 'desc("d-2")' --tool :union
369 369 merging d
370 370 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
371 371 (branch merge, don't forget to commit)
372 372 $ hg ci -m 'mGDm-0 simple merge - the other way'
373 373 created new head
374 374 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
375 375 @ 27 mGDm-0 simple merge - the other way]
376 376 |\
377 377 +---o 26 mDGm-0 simple merge - one way]
378 378 | |/
379 379 | o 25 g-1: update d]
380 380 | |
381 381 o | 14 d-2 re-add d]
382 382 | |
383 383 o | 13 d-1 delete d]
384 384 |/
385 385 o 2 i-2: c -move-> d]
386 386 |
387 387 o 1 i-1: a -move-> c]
388 388 |
389 389 o 0 i-0 initial commit: a b h]
390 390
391 391
392 392
393 Merge:
394 - one with change to a file (d)
395 - one overwriting that file with a rename (from h to i, to d)
396
397 $ hg up 'desc("f-2")'
398 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
399 $ hg merge 'desc("g-1")' --tool :union
400 merging d
401 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
402 (branch merge, don't forget to commit)
403 $ hg ci -m 'mFGm-0 simple merge - one way'
404 created new head
405 $ hg up 'desc("g-1")'
406 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
407 $ hg merge 'desc("f-2")' --tool :union
408 merging d
409 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
410 (branch merge, don't forget to commit)
411 $ hg ci -m 'mGFm-0 simple merge - the other way'
412 created new head
413 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
414 @ 29 mGFm-0 simple merge - the other way]
415 |\
416 +---o 28 mFGm-0 simple merge - one way]
417 | |/
418 | o 25 g-1: update d]
419 | |
420 o | 22 f-2: rename i -> d]
421 | |
422 o | 21 f-1: rename h -> i]
423 |/
424 o 2 i-2: c -move-> d]
425 |
426 o 1 i-1: a -move-> c]
427 |
428 o 0 i-0 initial commit: a b h]
429
430
431
393 432 Check results
394 433 =============
395 434
396 435 merging with unrelated change does not interfer wit the renames
397 436 ---------------------------------------------------------------
398 437
399 438 - rename on one side
400 439 - unrelated change on the other side
401 440
402 441 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
403 442 A f
404 443 d
405 444 R d
406 445 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
407 446 A f
408 447 d
409 448 R d
410 449 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
411 450 M b
412 451 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
413 452 M b
414 453 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
415 454 M b
416 455 A f
417 456 d
418 457 R d
419 458 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
420 459 M b
421 460 A f
422 461 d
423 462 R d
424 463 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
425 464 M b
426 465 A f
427 466 a
428 467 R a
429 468 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
430 469 M b
431 470 A f
432 471 a
433 472 R a
434 473
435 474 merging with the side having a delete
436 475 -------------------------------------
437 476
438 477 case summary:
439 478 - one with change to an unrelated file
440 479 - one deleting the change
441 480 and recreate an unrelated file after the merge
442 481
443 482 checks:
444 483 - comparing from the merge
445 484
446 485 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
447 486 R d
448 487 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
449 488 R d
450 489 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
451 490 M b
452 491 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
453 492 M b
454 493 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
455 494 M b
456 495 R d
457 496 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
458 497 M b
459 498 R d
460 499 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
461 500 M b
462 501 R a
463 502 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
464 503 M b
465 504 R a
466 505
467 506 - comparing with the merge children re-adding the file
468 507
469 508 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
470 509 M d
471 510 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
472 511 M d
473 512 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
474 513 M b
475 514 A d
476 515 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
477 516 M b
478 517 A d
479 518 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
480 519 M b
481 520 M d
482 521 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
483 522 M b
484 523 M d
485 524 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
486 525 M b
487 526 A d
488 527 R a
489 528 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
490 529 M b
491 530 A d
492 531 R a
493 532
494 533 Comparing with a merge re-adding the file afterward
495 534 ---------------------------------------------------
496 535
497 536 Merge:
498 537 - one with change to an unrelated file
499 538 - one deleting and recreating the change
500 539
501 540 Note:
502 541 | In this case, one of the merge wrongly record a merge while there is none.
503 542 | This lead to bad copy tracing information to be dug up.
504 543
505 544 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
506 545 M d
507 546 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
508 547 M d
509 548 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
510 549 M b
511 550 M d
512 551 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
513 552 M b
514 553 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
515 554 M b
516 555 M d
517 556 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
518 557 M b
519 558 M d
520 559
521 560 The bugs makes recorded copy is different depending of where we started the merge from since
522 561
523 562 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
524 563 0bb5445dc4d02f4e0d86cf16f9f3a411d0f17744 644 d
525 564 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
526 565 b004912a8510032a0350a74daa2803dadfb00e12 644 d
527 566
528 567 The 0bb5445dc4d02f4e0d86cf16f9f3a411d0f17744 entry is wrong, since the file was
529 568 deleted on one side (then recreate) and untouched on the other side, no "merge"
530 569 has happened. The resulting `d` file is the untouched version from branch `D`,
531 570 not a merge.
532 571
533 572 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
534 573 b004912a8510032a0350a74daa2803dadfb00e12 644 d
535 574 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
536 575 01c2f5eabdc4ce2bdee42b5f86311955e6c8f573 644 d
537 576 $ hg debugindex d
538 577 rev linkrev nodeid p1 p2
539 578 0 2 01c2f5eabdc4 000000000000 000000000000
540 579 1 10 b004912a8510 000000000000 000000000000
541 580 2 15 0bb5445dc4d0 01c2f5eabdc4 b004912a8510
542 581 3 22 c72365ee036f 000000000000 000000000000
543 582 4 23 863d9bc49190 01c2f5eabdc4 c72365ee036f
544 583 5 25 7bded9d9da1f 01c2f5eabdc4 000000000000
545 584 6 26 f04cac32d703 b004912a8510 7bded9d9da1f
546 585 7 27 d7a5eafb9322 7bded9d9da1f b004912a8510
586 8 28 2ed7a51aed47 c72365ee036f 7bded9d9da1f
547 587
548 588 (This `hg log` output if wrong, since no merge actually happened).
549 589
550 590 $ hg log -Gfr 'desc("mBDm-0")' d
551 591 o 15 mBDm-0 simple merge - one way]
552 592 |\
553 593 o : 14 d-2 re-add d]
554 594 :/
555 595 o 2 i-2: c -move-> d]
556 596 |
557 597 o 1 i-1: a -move-> c]
558 598 |
559 599 o 0 i-0 initial commit: a b h]
560 600
561 601
562 602 This `hg log` output is correct
563 603
564 604 $ hg log -Gfr 'desc("mDBm-0")' d
565 605 o 14 d-2 re-add d]
566 606 |
567 607 ~
568 608
569 609 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
570 610 M b
571 611 A d
572 612 a
573 613 R a
574 614 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
575 615 M b
576 616 A d
577 617 R a
578 618
579 619 Comparing with a merge with colliding rename
580 620 --------------------------------------------
581 621
582 622 - the "e-" branch renaming b to f (through 'g')
583 623 - the "a-" branch renaming d to f (through e)
584 624
585 625 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
586 626 eb806e34ef6be4c264effd5933d31004ad15a793 644 f
587 627 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
588 628 eb806e34ef6be4c264effd5933d31004ad15a793 644 f
589 629 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
590 630 0dd616bc7ab1a111921d95d76f69cda5c2ac539c 644 f
591 631 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
592 632 6da5a2eecb9c833f830b67a4972366d49a9a142c 644 f
593 633 $ hg debugindex f
594 634 rev linkrev nodeid p1 p2
595 635 0 4 0dd616bc7ab1 000000000000 000000000000
596 636 1 18 6da5a2eecb9c 000000000000 000000000000
597 637 2 19 eb806e34ef6b 0dd616bc7ab1 6da5a2eecb9c
598 638 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
599 639 M f
600 640 R b
601 641 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
602 642 M f
603 643 R b
604 644 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
605 645 M f
606 646 R d
607 647 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
608 648 M f
609 649 R d
610 650 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
611 651 A f
612 652 d
613 653 R d
614 654 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
615 655 A f
616 656 b
617 657 R b
618 658 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
619 659 A f
620 660 d
621 661 R b
622 662 R d
623 663 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
624 664 A f
625 665 d
626 666 R b
627 667 R d
628 668 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
629 669 A f
630 670 a
631 671 R a
632 672 R b
633 673 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
634 674 A f
635 675 a
636 676 R a
637 677 R b
638 678
639 679 Merge:
640 680 - one with change to an unrelated file (b)
641 681 - one overwriting a file (d) with a rename (from h to i to d)
642 682
643 683 The overwriting should take over. However, the behavior is currently buggy
644 684
645 685 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
646 686 M b
647 687 A d
648 688 a (true !)
649 689 h (false !)
650 690 R a
651 691 R h
652 692 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
653 693 M b
654 694 A d
655 695 h
656 696 R a
657 697 R h
658 698 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
659 699 M d
660 700 R h
661 701 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
662 702 M b
663 703 M d
664 704 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
665 705 M b
666 706 M d
667 707 R i
668 708 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
669 709 M d
670 710 R h
671 711 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
672 712 M b
673 713 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
674 714 M b
675 715 M d
676 716 R i
677 717
678 718 The following graphlog is wrong, the "a -> c -> d" chain was overwritten and should not appear.
679 719
680 720 $ hg log -Gfr 'desc("mBFm-0")' d
681 721 o 23 mBFm-0 simple merge - one way]
682 722 |\
683 723 o : 22 f-2: rename i -> d]
684 724 | :
685 725 o : 21 f-1: rename h -> i]
686 726 :/
687 727 o 2 i-2: c -move-> d]
688 728 |
689 729 o 1 i-1: a -move-> c]
690 730 |
691 731 o 0 i-0 initial commit: a b h]
692 732
693 733
694 734 The following output is correct.
695 735
696 736 $ hg log -Gfr 'desc("mFBm-0")' d
697 737 o 22 f-2: rename i -> d]
698 738 |
699 739 o 21 f-1: rename h -> i]
700 740 :
701 741 o 0 i-0 initial commit: a b h]
702 742
703 743
704 744 Merge:
705 745 - one with change to a file
706 746 - one deleting and recreating the file
707 747
708 748 Unlike in the 'BD/DB' cases, an actuall merge happened here. So we should
709 749 consider history and rename on both branch of the merge.
710 750
711 751 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
712 752 A d
713 753 a
714 754 R a
715 755 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
716 756 A d
717 757 a
718 758 R a
719 759 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
720 760 M d
721 761 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
722 762 M d
723 763 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
724 764 M d
725 765 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
726 766 M d
727 767
728 768 $ hg log -Gfr 'desc("mDGm-0")' d
729 769 o 26 mDGm-0 simple merge - one way]
730 770 |\
731 771 | o 25 g-1: update d]
732 772 | |
733 773 o | 14 d-2 re-add d]
734 774 |/
735 775 o 2 i-2: c -move-> d]
736 776 |
737 777 o 1 i-1: a -move-> c]
738 778 |
739 779 o 0 i-0 initial commit: a b h]
740 780
741 781
742 782
743 783 $ hg log -Gfr 'desc("mDGm-0")' d
744 784 o 26 mDGm-0 simple merge - one way]
745 785 |\
746 786 | o 25 g-1: update d]
747 787 | |
748 788 o | 14 d-2 re-add d]
749 789 |/
750 790 o 2 i-2: c -move-> d]
751 791 |
752 792 o 1 i-1: a -move-> c]
753 793 |
754 794 o 0 i-0 initial commit: a b h]
755 795
796
797
798 Merge:
799 - one with change to a file (d)
800 - one overwriting that file with a rename (from h to i, to d)
801
802 This case is similar to BF/FB, but an actual merge happens, so both side of the
803 history are relevant.
804
805 Note:
806 | In this case, the merge get conflicting information since on one side we have
807 | "a -> c -> d". and one the other one we have "h -> i -> d".
808 |
809 | The current code arbitrarily pick one side
810
811 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
812 A d
813 a
814 R a
815 R h
816 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
817 A d
818 a
819 R a
820 R h
821 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
822 M d
823 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
824 M d
825 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
826 M d
827 R i
828 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
829 M d
830 R i
831 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
832 M d
833 R h
834 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
835 M d
836 R h
837
838 $ hg log -Gfr 'desc("mFGm-0")' d
839 o 28 mFGm-0 simple merge - one way]
840 |\
841 | o 25 g-1: update d]
842 | |
843 o | 22 f-2: rename i -> d]
844 | |
845 o | 21 f-1: rename h -> i]
846 |/
847 o 2 i-2: c -move-> d]
848 |
849 o 1 i-1: a -move-> c]
850 |
851 o 0 i-0 initial commit: a b h]
852
853
854
855 $ hg log -Gfr 'desc("mGFm-0")' d
856 @ 29 mGFm-0 simple merge - the other way]
857 |\
858 | o 25 g-1: update d]
859 | |
860 o | 22 f-2: rename i -> d]
861 | |
862 o | 21 f-1: rename h -> i]
863 |/
864 o 2 i-2: c -move-> d]
865 |
866 o 1 i-1: a -move-> c]
867 |
868 o 0 i-0 initial commit: a b h]
869
General Comments 0
You need to be logged in to leave comments. Login now