##// END OF EJS Templates
test-copies: improve description of the A+B case...
marmoute -
r47283:e2097720 default
parent child Browse files
Show More
@@ -1,1777 +1,1777 b''
1 1 #testcases filelog compatibility changeset sidedata upgraded
2 2
3 3 =====================================================
4 4 Test Copy tracing for chain of copies involving merge
5 5 =====================================================
6 6
7 7 This test files covers copies/rename case for a chains of commit where merges
8 8 are involved. It cheks we do not have unwanted update of behavior and that the
9 9 different options to retrieve copies behave correctly.
10 10
11 11
12 12 Setup
13 13 =====
14 14
15 15 use git diff to see rename
16 16
17 17 $ cat << EOF >> $HGRCPATH
18 18 > [diff]
19 19 > git=yes
20 20 > [command-templates]
21 21 > log={rev} {desc}\n
22 22 > EOF
23 23
24 24 #if compatibility
25 25 $ cat >> $HGRCPATH << EOF
26 26 > [experimental]
27 27 > copies.read-from = compatibility
28 28 > EOF
29 29 #endif
30 30
31 31 #if changeset
32 32 $ cat >> $HGRCPATH << EOF
33 33 > [experimental]
34 34 > copies.read-from = changeset-only
35 35 > copies.write-to = changeset-only
36 36 > EOF
37 37 #endif
38 38
39 39 #if sidedata
40 40 $ cat >> $HGRCPATH << EOF
41 41 > [format]
42 42 > exp-use-side-data = yes
43 43 > exp-use-copies-side-data-changeset = yes
44 44 > EOF
45 45 #endif
46 46
47 47
48 48 $ cat > same-content.txt << EOF
49 49 > Here is some content that will be the same accros multiple file.
50 50 >
51 51 > This is done on purpose so that we end up in some merge situation, were the
52 52 > resulting content is the same as in the parent(s), but a new filenodes still
53 53 > need to be created to record some file history information (especially
54 54 > about copies).
55 55 > EOF
56 56
57 57 $ hg init repo-chain
58 58 $ cd repo-chain
59 59
60 60 Add some linear rename initialy
61 61
62 62 $ cp ../same-content.txt a
63 63 $ cp ../same-content.txt b
64 64 $ cp ../same-content.txt h
65 65 $ hg ci -Am 'i-0 initial commit: a b h'
66 66 adding a
67 67 adding b
68 68 adding h
69 69 $ hg mv a c
70 70 $ hg ci -Am 'i-1: a -move-> c'
71 71 $ hg mv c d
72 72 $ hg ci -Am 'i-2: c -move-> d'
73 73 $ hg log -G
74 74 @ 2 i-2: c -move-> d
75 75 |
76 76 o 1 i-1: a -move-> c
77 77 |
78 78 o 0 i-0 initial commit: a b h
79 79
80 80
81 81 And having another branch with renames on the other side
82 82
83 83 $ hg mv d e
84 84 $ hg ci -Am 'a-1: d -move-> e'
85 85 $ hg mv e f
86 86 $ hg ci -Am 'a-2: e -move-> f'
87 87 $ hg log -G --rev '::.'
88 88 @ 4 a-2: e -move-> f
89 89 |
90 90 o 3 a-1: d -move-> e
91 91 |
92 92 o 2 i-2: c -move-> d
93 93 |
94 94 o 1 i-1: a -move-> c
95 95 |
96 96 o 0 i-0 initial commit: a b h
97 97
98 98
99 99 Have a branching with nothing on one side
100 100
101 101 $ hg up 'desc("i-2")'
102 102 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
103 103 $ echo foo > b
104 104 $ hg ci -m 'b-1: b update'
105 105 created new head
106 106 $ hg log -G --rev '::.'
107 107 @ 5 b-1: b update
108 108 |
109 109 o 2 i-2: c -move-> d
110 110 |
111 111 o 1 i-1: a -move-> c
112 112 |
113 113 o 0 i-0 initial commit: a b h
114 114
115 115
116 116 Create a branch that delete a file previous renamed
117 117
118 118 $ hg up 'desc("i-2")'
119 119 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
120 120 $ hg rm d
121 121 $ hg ci -m 'c-1 delete d'
122 122 created new head
123 123 $ hg log -G --rev '::.'
124 124 @ 6 c-1 delete d
125 125 |
126 126 o 2 i-2: c -move-> d
127 127 |
128 128 o 1 i-1: a -move-> c
129 129 |
130 130 o 0 i-0 initial commit: a b h
131 131
132 132
133 133 Create a branch that delete a file previous renamed and recreate it
134 134
135 135 $ hg up 'desc("i-2")'
136 136 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
137 137 $ hg rm d
138 138 $ hg ci -m 'd-1 delete d'
139 139 created new head
140 140 $ echo bar > d
141 141 $ hg add d
142 142 $ hg ci -m 'd-2 re-add d'
143 143 $ hg log -G --rev '::.'
144 144 @ 8 d-2 re-add d
145 145 |
146 146 o 7 d-1 delete d
147 147 |
148 148 o 2 i-2: c -move-> d
149 149 |
150 150 o 1 i-1: a -move-> c
151 151 |
152 152 o 0 i-0 initial commit: a b h
153 153
154 154
155 155 Having another branch renaming a different file to the same filename as another
156 156
157 157 $ hg up 'desc("i-2")'
158 158 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
159 159 $ hg mv b g
160 160 $ hg ci -m 'e-1 b -move-> g'
161 161 created new head
162 162 $ hg mv g f
163 163 $ hg ci -m 'e-2 g -move-> f'
164 164 $ hg log -G --rev '::.'
165 165 @ 10 e-2 g -move-> f
166 166 |
167 167 o 9 e-1 b -move-> g
168 168 |
169 169 o 2 i-2: c -move-> d
170 170 |
171 171 o 1 i-1: a -move-> c
172 172 |
173 173 o 0 i-0 initial commit: a b h
174 174
175 175
176 176 Setup all merge
177 177 ===============
178 178
179 179 This is done beforehand to validate that the upgrade process creates valid copy
180 180 information.
181 181
182 182 merging with unrelated change does not interfere with the renames
183 183 ---------------------------------------------------------------
184 184
185 185 - rename on one side
186 186 - unrelated change on the other side
187 187
188 $ case_desc="simple merge"
188 $ case_desc="simple merge - A side: multiple renames, B side: unrelated update"
189 189
190 190 $ hg up 'desc("b-1")'
191 191 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
192 192 $ hg merge 'desc("a-2")'
193 193 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
194 194 (branch merge, don't forget to commit)
195 195 $ hg ci -m "mBAm-0 $case_desc - one way"
196 196 $ hg up 'desc("a-2")'
197 197 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
198 198 $ hg merge 'desc("b-1")'
199 199 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
200 200 (branch merge, don't forget to commit)
201 201 $ hg ci -m "mABm-0 $case_desc - the other way"
202 202 created new head
203 203 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
204 @ 12 mABm-0 simple merge - the other way
204 @ 12 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
205 205 |\
206 +---o 11 mBAm-0 simple merge - one way
206 +---o 11 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
207 207 | |/
208 208 | o 5 b-1: b update
209 209 | |
210 210 o | 4 a-2: e -move-> f
211 211 | |
212 212 o | 3 a-1: d -move-> e
213 213 |/
214 214 o 2 i-2: c -move-> d
215 215 |
216 216 o 1 i-1: a -move-> c
217 217 |
218 218 o 0 i-0 initial commit: a b h
219 219
220 220
221 221
222 222 merging with the side having a delete
223 223 -------------------------------------
224 224
225 225 case summary:
226 226 - one with change to an unrelated file
227 227 - one deleting the change
228 228 and recreate an unrelated file after the merge
229 229
230 230 $ case_desc="simple merge"
231 231
232 232 $ hg up 'desc("b-1")'
233 233 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
234 234 $ hg merge 'desc("c-1")'
235 235 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
236 236 (branch merge, don't forget to commit)
237 237 $ hg ci -m "mBCm-0 $case_desc - one way"
238 238 $ echo bar > d
239 239 $ hg add d
240 240 $ hg ci -m 'mBCm-1 re-add d'
241 241 $ hg up 'desc("c-1")'
242 242 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
243 243 $ hg merge 'desc("b-1")'
244 244 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
245 245 (branch merge, don't forget to commit)
246 246 $ hg ci -m "mCBm-0 $case_desc - the other way"
247 247 created new head
248 248 $ echo bar > d
249 249 $ hg add d
250 250 $ hg ci -m 'mCBm-1 re-add d'
251 251 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
252 252 @ 16 mCBm-1 re-add d
253 253 |
254 254 o 15 mCBm-0 simple merge - the other way
255 255 |\
256 256 | | o 14 mBCm-1 re-add d
257 257 | | |
258 258 +---o 13 mBCm-0 simple merge - one way
259 259 | |/
260 260 | o 6 c-1 delete d
261 261 | |
262 262 o | 5 b-1: b update
263 263 |/
264 264 o 2 i-2: c -move-> d
265 265 |
266 266 o 1 i-1: a -move-> c
267 267 |
268 268 o 0 i-0 initial commit: a b h
269 269
270 270
271 271 Comparing with a merge re-adding the file afterward
272 272 ---------------------------------------------------
273 273
274 274 Merge:
275 275 - one with change to an unrelated file
276 276 - one deleting and recreating the change
277 277
278 278 $ case_desc="simple merge"
279 279
280 280 $ hg up 'desc("b-1")'
281 281 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
282 282 $ hg merge 'desc("d-2")'
283 283 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
284 284 (branch merge, don't forget to commit)
285 285 $ hg ci -m "mBDm-0 $case_desc - one way"
286 286 $ hg up 'desc("d-2")'
287 287 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
288 288 $ hg merge 'desc("b-1")'
289 289 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
290 290 (branch merge, don't forget to commit)
291 291 $ hg ci -m "mDBm-0 $case_desc - the other way"
292 292 created new head
293 293 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
294 294 @ 18 mDBm-0 simple merge - the other way
295 295 |\
296 296 +---o 17 mBDm-0 simple merge - one way
297 297 | |/
298 298 | o 8 d-2 re-add d
299 299 | |
300 300 | o 7 d-1 delete d
301 301 | |
302 302 o | 5 b-1: b update
303 303 |/
304 304 o 2 i-2: c -move-> d
305 305 |
306 306 o 1 i-1: a -move-> c
307 307 |
308 308 o 0 i-0 initial commit: a b h
309 309
310 310
311 311
312 312 Comparing with a merge with colliding rename
313 313 --------------------------------------------
314 314
315 315 - the "e-" branch renaming b to f (through 'g')
316 316 - the "a-" branch renaming d to f (through e)
317 317
318 318 $ case_desc="simple merge"
319 319
320 320 $ hg up 'desc("a-2")'
321 321 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
322 322 $ hg merge 'desc("e-2")'
323 323 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
324 324 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
325 325 (branch merge, don't forget to commit)
326 326 $ hg ci -m "mAEm-0 $case_desc - one way"
327 327 $ hg up 'desc("e-2")'
328 328 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
329 329 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
330 330 $ hg merge 'desc("a-2")'
331 331 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
332 332 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
333 333 (branch merge, don't forget to commit)
334 334 $ hg ci -m "mEAm-0 $case_desc - the other way"
335 335 created new head
336 336 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
337 337 @ 20 mEAm-0 simple merge - the other way
338 338 |\
339 339 +---o 19 mAEm-0 simple merge - one way
340 340 | |/
341 341 | o 10 e-2 g -move-> f
342 342 | |
343 343 | o 9 e-1 b -move-> g
344 344 | |
345 345 o | 4 a-2: e -move-> f
346 346 | |
347 347 o | 3 a-1: d -move-> e
348 348 |/
349 349 o 2 i-2: c -move-> d
350 350 |
351 351 o 1 i-1: a -move-> c
352 352 |
353 353 o 0 i-0 initial commit: a b h
354 354
355 355
356 356
357 357 Merge:
358 358 - one with change to an unrelated file (b)
359 359 - one overwriting a file (d) with a rename (from h to i to d)
360 360
361 361 $ case_desc="simple merge"
362 362
363 363 $ hg up 'desc("i-2")'
364 364 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
365 365 $ hg mv h i
366 366 $ hg commit -m "f-1: rename h -> i"
367 367 created new head
368 368 $ hg mv --force i d
369 369 $ hg commit -m "f-2: rename i -> d"
370 370 $ hg debugindex d
371 371 rev linkrev nodeid p1 p2
372 372 0 2 d8252ab2e760 000000000000 000000000000 (no-changeset !)
373 373 0 2 ae258f702dfe 000000000000 000000000000 (changeset !)
374 374 1 8 b004912a8510 000000000000 000000000000
375 375 2 22 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
376 376 $ hg up 'desc("b-1")'
377 377 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
378 378 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
379 379 $ hg merge 'desc("f-2")'
380 380 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
381 381 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
382 382 (branch merge, don't forget to commit)
383 383 $ hg ci -m "mBFm-0 $case_desc - one way"
384 384 $ hg up 'desc("f-2")'
385 385 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
386 386 $ hg merge 'desc("b-1")'
387 387 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
388 388 (branch merge, don't forget to commit)
389 389 $ hg ci -m "mFBm-0 $case_desc - the other way"
390 390 created new head
391 391 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
392 392 @ 24 mFBm-0 simple merge - the other way
393 393 |\
394 394 +---o 23 mBFm-0 simple merge - one way
395 395 | |/
396 396 | o 22 f-2: rename i -> d
397 397 | |
398 398 | o 21 f-1: rename h -> i
399 399 | |
400 400 o | 5 b-1: b update
401 401 |/
402 402 o 2 i-2: c -move-> d
403 403 |
404 404 o 1 i-1: a -move-> c
405 405 |
406 406 o 0 i-0 initial commit: a b h
407 407
408 408
409 409
410 410 Merge:
411 411 - one with change to a file
412 412 - one deleting and recreating the file
413 413
414 414 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
415 415 consider history and rename on both branch of the merge.
416 416
417 417 $ case_desc="simple merge"
418 418
419 419 $ hg up 'desc("i-2")'
420 420 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
421 421 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
422 422 $ echo "some update" >> d
423 423 $ hg commit -m "g-1: update d"
424 424 created new head
425 425 $ hg up 'desc("d-2")'
426 426 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
427 427 $ hg merge 'desc("g-1")' --tool :union
428 428 merging d
429 429 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
430 430 (branch merge, don't forget to commit)
431 431 $ hg ci -m "mDGm-0 $case_desc - one way"
432 432 $ hg up 'desc("g-1")'
433 433 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
434 434 $ hg merge 'desc("d-2")' --tool :union
435 435 merging d
436 436 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
437 437 (branch merge, don't forget to commit)
438 438 $ hg ci -m "mGDm-0 $case_desc - the other way"
439 439 created new head
440 440 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
441 441 @ 27 mGDm-0 simple merge - the other way
442 442 |\
443 443 +---o 26 mDGm-0 simple merge - one way
444 444 | |/
445 445 | o 25 g-1: update d
446 446 | |
447 447 o | 8 d-2 re-add d
448 448 | |
449 449 o | 7 d-1 delete d
450 450 |/
451 451 o 2 i-2: c -move-> d
452 452 |
453 453 o 1 i-1: a -move-> c
454 454 |
455 455 o 0 i-0 initial commit: a b h
456 456
457 457
458 458
459 459 Merge:
460 460 - one with change to a file (d)
461 461 - one overwriting that file with a rename (from h to i, to d)
462 462
463 463 This case is similar to BF/FB, but an actual merge happens, so both side of the
464 464 history are relevant.
465 465
466 466 Note:
467 467 | In this case, the merge get conflicting information since on one side we have
468 468 | "a -> c -> d". and one the other one we have "h -> i -> d".
469 469 |
470 470 | The current code arbitrarily pick one side
471 471
472 472 $ case_desc="simple merge"
473 473
474 474 $ hg up 'desc("f-2")'
475 475 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
476 476 $ hg merge 'desc("g-1")' --tool :union
477 477 merging d (no-changeset !)
478 478 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (no-changeset !)
479 479 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
480 480 (branch merge, don't forget to commit)
481 481 $ hg ci -m "mFGm-0 $case_desc - one way"
482 482 created new head
483 483 $ hg up 'desc("g-1")'
484 484 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
485 485 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
486 486 $ hg merge 'desc("f-2")' --tool :union
487 487 merging d (no-changeset !)
488 488 0 files updated, 1 files merged, 1 files removed, 0 files unresolved (no-changeset !)
489 489 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
490 490 (branch merge, don't forget to commit)
491 491 $ hg ci -m "mGFm-0 $case_desc - the other way"
492 492 created new head
493 493 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
494 494 @ 29 mGFm-0 simple merge - the other way
495 495 |\
496 496 +---o 28 mFGm-0 simple merge - one way
497 497 | |/
498 498 | o 25 g-1: update d
499 499 | |
500 500 o | 22 f-2: rename i -> d
501 501 | |
502 502 o | 21 f-1: rename h -> i
503 503 |/
504 504 o 2 i-2: c -move-> d
505 505 |
506 506 o 1 i-1: a -move-> c
507 507 |
508 508 o 0 i-0 initial commit: a b h
509 509
510 510
511 511
512 512 Comparing with merging with a deletion (and keeping the file)
513 513 -------------------------------------------------------------
514 514
515 515 Merge:
516 516 - one removing a file (d)
517 517 - one updating that file
518 518 - the merge keep the modified version of the file (canceling the delete)
519 519
520 520 In this case, the file keep on living after the merge. So we should not drop its
521 521 copy tracing chain.
522 522
523 523 $ hg up 'desc("c-1")'
524 524 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
525 525 $ hg merge 'desc("g-1")'
526 526 file 'd' was deleted in local [working copy] but was modified in other [merge rev].
527 527 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
528 528 What do you want to do? u
529 529 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
530 530 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
531 531 [1]
532 532 $ hg resolve -t :other d
533 533 (no more unresolved files)
534 534 $ hg ci -m "mCGm-0"
535 535 created new head
536 536
537 537 $ hg up 'desc("g-1")'
538 538 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
539 539 $ hg merge 'desc("c-1")'
540 540 file 'd' was deleted in other [merge rev] but was modified in local [working copy].
541 541 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
542 542 What do you want to do? u
543 543 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
544 544 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
545 545 [1]
546 546 $ hg resolve -t :local d
547 547 (no more unresolved files)
548 548 $ hg ci -m "mGCm-0"
549 549 created new head
550 550
551 551 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
552 552 @ 31 mGCm-0
553 553 |\
554 554 +---o 30 mCGm-0
555 555 | |/
556 556 | o 25 g-1: update d
557 557 | |
558 558 o | 6 c-1 delete d
559 559 |/
560 560 o 2 i-2: c -move-> d
561 561 |
562 562 o 1 i-1: a -move-> c
563 563 |
564 564 o 0 i-0 initial commit: a b h
565 565
566 566
567 567
568 568
569 569 Comparing with merge restoring an untouched deleted file
570 570 --------------------------------------------------------
571 571
572 572 Merge:
573 573 - one removing a file (d)
574 574 - one leaving the file untouched
575 575 - the merge actively restore the file to the same content.
576 576
577 577 In this case, the file keep on living after the merge. So we should not drop its
578 578 copy tracing chain.
579 579
580 580 $ hg up 'desc("c-1")'
581 581 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
582 582 $ hg merge 'desc("b-1")'
583 583 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
584 584 (branch merge, don't forget to commit)
585 585 $ hg revert --rev 'desc("b-1")' d
586 586 $ hg ci -m "mCB-revert-m-0"
587 587 created new head
588 588
589 589 $ hg up 'desc("b-1")'
590 590 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
591 591 $ hg merge 'desc("c-1")'
592 592 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
593 593 (branch merge, don't forget to commit)
594 594 $ hg revert --rev 'desc("b-1")' d
595 595 $ hg ci -m "mBC-revert-m-0"
596 596 created new head
597 597
598 598 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
599 599 @ 33 mBC-revert-m-0
600 600 |\
601 601 +---o 32 mCB-revert-m-0
602 602 | |/
603 603 | o 6 c-1 delete d
604 604 | |
605 605 o | 5 b-1: b update
606 606 |/
607 607 o 2 i-2: c -move-> d
608 608 |
609 609 o 1 i-1: a -move-> c
610 610 |
611 611 o 0 i-0 initial commit: a b h
612 612
613 613
614 614
615 615 $ hg up null --quiet
616 616
617 617 Merging a branch where a rename was deleted with a branch where the same file was renamed
618 618 ------------------------------------------------------------------------------------------
619 619
620 620 Create a "conflicting" merge where `d` get removed on one branch before its
621 621 rename information actually conflict with the other branch.
622 622
623 623 (the copy information from the branch that was not deleted should win).
624 624
625 625 $ hg up 'desc("i-0")'
626 626 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
627 627 $ hg mv b d
628 628 $ hg ci -m "h-1: b -(move)-> d"
629 629 created new head
630 630
631 631 $ hg up 'desc("c-1")'
632 632 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
633 633 $ hg merge 'desc("h-1")'
634 634 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
635 635 (branch merge, don't forget to commit)
636 636 $ hg ci -m "mCH-delete-before-conflict-m-0"
637 637
638 638 $ hg up 'desc("h-1")'
639 639 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
640 640 $ hg merge 'desc("c-1")'
641 641 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
642 642 (branch merge, don't forget to commit)
643 643 $ hg ci -m "mHC-delete-before-conflict-m-0"
644 644 created new head
645 645 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
646 646 @ 36 mHC-delete-before-conflict-m-0
647 647 |\
648 648 +---o 35 mCH-delete-before-conflict-m-0
649 649 | |/
650 650 | o 34 h-1: b -(move)-> d
651 651 | |
652 652 o | 6 c-1 delete d
653 653 | |
654 654 o | 2 i-2: c -move-> d
655 655 | |
656 656 o | 1 i-1: a -move-> c
657 657 |/
658 658 o 0 i-0 initial commit: a b h
659 659
660 660
661 661
662 662 Summary of all created cases
663 663 ----------------------------
664 664
665 665 $ hg up --quiet null
666 666
667 667 (This exists to help keeping a compact list of the various cases we have built)
668 668
669 669 $ hg log -T '{desc|firstline}\n'| sort
670 670 a-1: d -move-> e
671 671 a-2: e -move-> f
672 672 b-1: b update
673 673 c-1 delete d
674 674 d-1 delete d
675 675 d-2 re-add d
676 676 e-1 b -move-> g
677 677 e-2 g -move-> f
678 678 f-1: rename h -> i
679 679 f-2: rename i -> d
680 680 g-1: update d
681 681 h-1: b -(move)-> d
682 682 i-0 initial commit: a b h
683 683 i-1: a -move-> c
684 684 i-2: c -move-> d
685 mABm-0 simple merge - the other way
685 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
686 686 mAEm-0 simple merge - one way
687 mBAm-0 simple merge - one way
687 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
688 688 mBC-revert-m-0
689 689 mBCm-0 simple merge - one way
690 690 mBCm-1 re-add d
691 691 mBDm-0 simple merge - one way
692 692 mBFm-0 simple merge - one way
693 693 mCB-revert-m-0
694 694 mCBm-0 simple merge - the other way
695 695 mCBm-1 re-add d
696 696 mCGm-0
697 697 mCH-delete-before-conflict-m-0
698 698 mDBm-0 simple merge - the other way
699 699 mDGm-0 simple merge - one way
700 700 mEAm-0 simple merge - the other way
701 701 mFBm-0 simple merge - the other way
702 702 mFGm-0 simple merge - one way
703 703 mGCm-0
704 704 mGDm-0 simple merge - the other way
705 705 mGFm-0 simple merge - the other way
706 706 mHC-delete-before-conflict-m-0
707 707
708 708
709 709 Test that sidedata computations during upgrades are correct
710 710 ===========================================================
711 711
712 712 We upgrade a repository that is not using sidedata (the filelog case) and
713 713 check that the same side data have been generated as if they were computed at
714 714 commit time.
715 715
716 716
717 717 #if upgraded
718 718 $ cat >> $HGRCPATH << EOF
719 719 > [format]
720 720 > exp-use-side-data = yes
721 721 > exp-use-copies-side-data-changeset = yes
722 722 > EOF
723 723 $ hg debugformat -v
724 724 format-variant repo config default
725 725 fncache: yes yes yes
726 726 dotencode: yes yes yes
727 727 generaldelta: yes yes yes
728 728 share-safe: no no no
729 729 sparserevlog: yes yes yes
730 730 sidedata: no yes no
731 731 persistent-nodemap: no no no
732 732 copies-sdc: no yes no
733 733 plain-cl-delta: yes yes yes
734 734 compression: * (glob)
735 735 compression-level: default default default
736 736 $ hg debugupgraderepo --run --quiet
737 737 upgrade will perform the following actions:
738 738
739 739 requirements
740 740 preserved: * (glob)
741 741 added: exp-copies-sidedata-changeset, exp-sidedata-flag
742 742
743 743 processed revlogs:
744 744 - all-filelogs
745 745 - changelog
746 746 - manifest
747 747
748 748 #endif
749 749
750 750
751 751 #if no-compatibility no-filelog no-changeset
752 752
753 753 $ hg debugchangedfiles --compute 0
754 754 added : a, ;
755 755 added : b, ;
756 756 added : h, ;
757 757
758 758 $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do
759 759 > echo "##### revision $rev #####"
760 760 > hg debugsidedata -c -v -- $rev
761 761 > hg debugchangedfiles $rev
762 762 > done
763 763 ##### revision 0 #####
764 764 1 sidedata entries
765 765 entry-0014 size 34
766 766 '\x00\x00\x00\x03\x04\x00\x00\x00\x01\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00abh'
767 767 added : a, ;
768 768 added : b, ;
769 769 added : h, ;
770 770 ##### revision 1 #####
771 771 1 sidedata entries
772 772 entry-0014 size 24
773 773 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ac'
774 774 removed : a, ;
775 775 added p1: c, a;
776 776 ##### revision 2 #####
777 777 1 sidedata entries
778 778 entry-0014 size 24
779 779 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00cd'
780 780 removed : c, ;
781 781 added p1: d, c;
782 782 ##### revision 3 #####
783 783 1 sidedata entries
784 784 entry-0014 size 24
785 785 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00de'
786 786 removed : d, ;
787 787 added p1: e, d;
788 788 ##### revision 4 #####
789 789 1 sidedata entries
790 790 entry-0014 size 24
791 791 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ef'
792 792 removed : e, ;
793 793 added p1: f, e;
794 794 ##### revision 5 #####
795 795 1 sidedata entries
796 796 entry-0014 size 14
797 797 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00b'
798 798 touched : b, ;
799 799 ##### revision 6 #####
800 800 1 sidedata entries
801 801 entry-0014 size 14
802 802 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
803 803 removed : d, ;
804 804 ##### revision 7 #####
805 805 1 sidedata entries
806 806 entry-0014 size 14
807 807 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
808 808 removed : d, ;
809 809 ##### revision 8 #####
810 810 1 sidedata entries
811 811 entry-0014 size 14
812 812 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
813 813 added : d, ;
814 814 ##### revision 9 #####
815 815 1 sidedata entries
816 816 entry-0014 size 24
817 817 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bg'
818 818 removed : b, ;
819 819 added p1: g, b;
820 820 ##### revision 10 #####
821 821 1 sidedata entries
822 822 entry-0014 size 24
823 823 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00fg'
824 824 added p1: f, g;
825 825 removed : g, ;
826 826 ##### revision 11 #####
827 827 1 sidedata entries
828 828 entry-0014 size 4
829 829 '\x00\x00\x00\x00'
830 830 ##### revision 12 #####
831 831 1 sidedata entries
832 832 entry-0014 size 4
833 833 '\x00\x00\x00\x00'
834 834 ##### revision 13 #####
835 835 1 sidedata entries
836 836 entry-0014 size 4
837 837 '\x00\x00\x00\x00'
838 838 ##### revision 14 #####
839 839 1 sidedata entries
840 840 entry-0014 size 14
841 841 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
842 842 added : d, ;
843 843 ##### revision 15 #####
844 844 1 sidedata entries
845 845 entry-0014 size 4
846 846 '\x00\x00\x00\x00'
847 847 ##### revision 16 #####
848 848 1 sidedata entries
849 849 entry-0014 size 14
850 850 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
851 851 added : d, ;
852 852 ##### revision 17 #####
853 853 1 sidedata entries
854 854 entry-0014 size 4
855 855 '\x00\x00\x00\x00'
856 856 ##### revision 18 #####
857 857 1 sidedata entries
858 858 entry-0014 size 4
859 859 '\x00\x00\x00\x00'
860 860 ##### revision 19 #####
861 861 1 sidedata entries
862 862 entry-0014 size 14
863 863 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
864 864 merged : f, ;
865 865 ##### revision 20 #####
866 866 1 sidedata entries
867 867 entry-0014 size 14
868 868 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
869 869 merged : f, ;
870 870 ##### revision 21 #####
871 871 1 sidedata entries
872 872 entry-0014 size 24
873 873 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00hi'
874 874 removed : h, ;
875 875 added p1: i, h;
876 876 ##### revision 22 #####
877 877 1 sidedata entries
878 878 entry-0014 size 24
879 879 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00di'
880 880 touched p1: d, i;
881 881 removed : i, ;
882 882 ##### revision 23 #####
883 883 1 sidedata entries
884 884 entry-0014 size 4
885 885 '\x00\x00\x00\x00'
886 886 ##### revision 24 #####
887 887 1 sidedata entries
888 888 entry-0014 size 4
889 889 '\x00\x00\x00\x00'
890 890 ##### revision 25 #####
891 891 1 sidedata entries
892 892 entry-0014 size 14
893 893 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
894 894 touched : d, ;
895 895 ##### revision 26 #####
896 896 1 sidedata entries
897 897 entry-0014 size 14
898 898 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
899 899 merged : d, ;
900 900 ##### revision 27 #####
901 901 1 sidedata entries
902 902 entry-0014 size 14
903 903 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
904 904 merged : d, ;
905 905 ##### revision 28 #####
906 906 1 sidedata entries
907 907 entry-0014 size 14
908 908 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
909 909 merged : d, ;
910 910 ##### revision 29 #####
911 911 1 sidedata entries
912 912 entry-0014 size 14
913 913 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
914 914 merged : d, ;
915 915 ##### revision 30 #####
916 916 1 sidedata entries
917 917 entry-0014 size 14
918 918 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
919 919 salvaged : d, ;
920 920 ##### revision 31 #####
921 921 1 sidedata entries
922 922 entry-0014 size 14
923 923 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
924 924 salvaged : d, ;
925 925 ##### revision 32 #####
926 926 1 sidedata entries
927 927 entry-0014 size 14
928 928 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
929 929 salvaged : d, ;
930 930 ##### revision 33 #####
931 931 1 sidedata entries
932 932 entry-0014 size 14
933 933 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
934 934 salvaged : d, ;
935 935 ##### revision 34 #####
936 936 1 sidedata entries
937 937 entry-0014 size 24
938 938 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bd'
939 939 removed : b, ;
940 940 added p1: d, b;
941 941 ##### revision 35 #####
942 942 1 sidedata entries
943 943 entry-0014 size 4
944 944 '\x00\x00\x00\x00'
945 945 ##### revision 36 #####
946 946 1 sidedata entries
947 947 entry-0014 size 4
948 948 '\x00\x00\x00\x00'
949 949
950 950 #endif
951 951
952 952
953 953 Test copy information chaining
954 954 ==============================
955 955
956 956 Check that matching only affect the destination and not intermediate path
957 957 -------------------------------------------------------------------------
958 958
959 959 The two status call should give the same value for f
960 960
961 961 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")'
962 962 A f
963 963 a
964 964 R a
965 965 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")' f
966 966 A f
967 967 a (no-changeset no-compatibility !)
968 968
969 969 merging with unrelated change does not interfere with the renames
970 970 ---------------------------------------------------------------
971 971
972 972 - rename on one side
973 973 - unrelated change on the other side
974 974
975 975 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
976 o 12 mABm-0 simple merge - the other way
976 o 12 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
977 977 |\
978 +---o 11 mBAm-0 simple merge - one way
978 +---o 11 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
979 979 | |/
980 980 | o 5 b-1: b update
981 981 | |
982 982 o | 4 a-2: e -move-> f
983 983 | |
984 984 o | 3 a-1: d -move-> e
985 985 |/
986 986 o 2 i-2: c -move-> d
987 987 |
988 988 o 1 i-1: a -move-> c
989 989 |
990 990 o 0 i-0 initial commit: a b h
991 991
992 992
993 993 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
994 994 A f
995 995 d
996 996 R d
997 997 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
998 998 A f
999 999 d
1000 1000 R d
1001 1001 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
1002 1002 M b
1003 1003 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
1004 1004 M b
1005 1005 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
1006 1006 M b
1007 1007 A f
1008 1008 d
1009 1009 R d
1010 1010 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
1011 1011 M b
1012 1012 A f
1013 1013 d
1014 1014 R d
1015 1015 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
1016 1016 M b
1017 1017 A f
1018 1018 a
1019 1019 R a
1020 1020 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
1021 1021 M b
1022 1022 A f
1023 1023 a
1024 1024 R a
1025 1025
1026 1026 merging with the side having a delete
1027 1027 -------------------------------------
1028 1028
1029 1029 case summary:
1030 1030 - one with change to an unrelated file
1031 1031 - one deleting the change
1032 1032 and recreate an unrelated file after the merge
1033 1033
1034 1034 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
1035 1035 o 16 mCBm-1 re-add d
1036 1036 |
1037 1037 o 15 mCBm-0 simple merge - the other way
1038 1038 |\
1039 1039 | | o 14 mBCm-1 re-add d
1040 1040 | | |
1041 1041 +---o 13 mBCm-0 simple merge - one way
1042 1042 | |/
1043 1043 | o 6 c-1 delete d
1044 1044 | |
1045 1045 o | 5 b-1: b update
1046 1046 |/
1047 1047 o 2 i-2: c -move-> d
1048 1048 |
1049 1049 o 1 i-1: a -move-> c
1050 1050 |
1051 1051 o 0 i-0 initial commit: a b h
1052 1052
1053 1053 - comparing from the merge
1054 1054
1055 1055 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
1056 1056 R d
1057 1057 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
1058 1058 R d
1059 1059 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
1060 1060 M b
1061 1061 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
1062 1062 M b
1063 1063 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
1064 1064 M b
1065 1065 R d
1066 1066 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
1067 1067 M b
1068 1068 R d
1069 1069 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
1070 1070 M b
1071 1071 R a
1072 1072 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
1073 1073 M b
1074 1074 R a
1075 1075
1076 1076 - comparing with the merge children re-adding the file
1077 1077
1078 1078 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
1079 1079 M d
1080 1080 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
1081 1081 M d
1082 1082 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
1083 1083 M b
1084 1084 A d
1085 1085 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
1086 1086 M b
1087 1087 A d
1088 1088 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
1089 1089 M b
1090 1090 M d
1091 1091 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
1092 1092 M b
1093 1093 M d
1094 1094 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
1095 1095 M b
1096 1096 A d
1097 1097 R a
1098 1098 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
1099 1099 M b
1100 1100 A d
1101 1101 R a
1102 1102
1103 1103 Comparing with a merge re-adding the file afterward
1104 1104 ---------------------------------------------------
1105 1105
1106 1106 Merge:
1107 1107 - one with change to an unrelated file
1108 1108 - one deleting and recreating the change
1109 1109
1110 1110 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
1111 1111 o 18 mDBm-0 simple merge - the other way
1112 1112 |\
1113 1113 +---o 17 mBDm-0 simple merge - one way
1114 1114 | |/
1115 1115 | o 8 d-2 re-add d
1116 1116 | |
1117 1117 | o 7 d-1 delete d
1118 1118 | |
1119 1119 o | 5 b-1: b update
1120 1120 |/
1121 1121 o 2 i-2: c -move-> d
1122 1122 |
1123 1123 o 1 i-1: a -move-> c
1124 1124 |
1125 1125 o 0 i-0 initial commit: a b h
1126 1126
1127 1127 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
1128 1128 M d
1129 1129 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
1130 1130 M d
1131 1131 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
1132 1132 M b
1133 1133 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
1134 1134 M b
1135 1135 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
1136 1136 M b
1137 1137 M d
1138 1138 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
1139 1139 M b
1140 1140 M d
1141 1141
1142 1142 The bugs makes recorded copy is different depending of where we started the merge from since
1143 1143
1144 1144 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
1145 1145 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1146 1146 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
1147 1147 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1148 1148
1149 1149 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
1150 1150 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1151 1151 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
1152 1152 d8252ab2e760b0d4e5288fd44cbd15a0fa567e16 644 d (no-changeset !)
1153 1153 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
1154 1154 $ hg debugindex d | head -n 4
1155 1155 rev linkrev nodeid p1 p2
1156 1156 0 2 d8252ab2e760 000000000000 000000000000 (no-changeset !)
1157 1157 0 2 ae258f702dfe 000000000000 000000000000 (changeset !)
1158 1158 1 8 b004912a8510 000000000000 000000000000
1159 1159 2 22 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
1160 1160 2 25 5cce88bf349f ae258f702dfe 000000000000 (changeset !)
1161 1161
1162 1162 Log output should not include a merge commit as it did not happen
1163 1163
1164 1164 $ hg log -Gfr 'desc("mBDm-0")' d
1165 1165 o 8 d-2 re-add d
1166 1166 |
1167 1167 ~
1168 1168
1169 1169 $ hg log -Gfr 'desc("mDBm-0")' d
1170 1170 o 8 d-2 re-add d
1171 1171 |
1172 1172 ~
1173 1173
1174 1174 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
1175 1175 M b
1176 1176 A d
1177 1177 R a
1178 1178 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
1179 1179 M b
1180 1180 A d
1181 1181 R a
1182 1182
1183 1183
1184 1184 Comparing with a merge with colliding rename
1185 1185 --------------------------------------------
1186 1186
1187 1187 - the "e-" branch renaming b to f (through 'g')
1188 1188 - the "a-" branch renaming d to f (through e)
1189 1189
1190 1190 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
1191 1191 o 20 mEAm-0 simple merge - the other way
1192 1192 |\
1193 1193 +---o 19 mAEm-0 simple merge - one way
1194 1194 | |/
1195 1195 | o 10 e-2 g -move-> f
1196 1196 | |
1197 1197 | o 9 e-1 b -move-> g
1198 1198 | |
1199 1199 o | 4 a-2: e -move-> f
1200 1200 | |
1201 1201 o | 3 a-1: d -move-> e
1202 1202 |/
1203 1203 o 2 i-2: c -move-> d
1204 1204 |
1205 1205 o 1 i-1: a -move-> c
1206 1206 |
1207 1207 o 0 i-0 initial commit: a b h
1208 1208
1209 1209 #if no-changeset
1210 1210 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
1211 1211 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
1212 1212 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
1213 1213 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
1214 1214 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
1215 1215 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
1216 1216 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
1217 1217 e8825b386367b29fec957283a80bb47b47483fe1 644 f
1218 1218 $ hg debugindex f
1219 1219 rev linkrev nodeid p1 p2
1220 1220 0 4 b76eb76580df 000000000000 000000000000
1221 1221 1 10 e8825b386367 000000000000 000000000000
1222 1222 2 19 2ff93c643948 b76eb76580df e8825b386367
1223 1223 #else
1224 1224 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
1225 1225 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1226 1226 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
1227 1227 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1228 1228 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
1229 1229 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1230 1230 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
1231 1231 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1232 1232 $ hg debugindex f
1233 1233 rev linkrev nodeid p1 p2
1234 1234 0 4 ae258f702dfe 000000000000 000000000000
1235 1235 #endif
1236 1236
1237 1237 # Here the filelog based implementation is not looking at the rename
1238 1238 # information (because the file exist on both side). However the changelog
1239 1239 # based on works fine. We have different output.
1240 1240
1241 1241 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
1242 1242 M f (no-changeset !)
1243 1243 b (no-filelog no-changeset !)
1244 1244 R b
1245 1245 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
1246 1246 M f (no-changeset !)
1247 1247 b (no-filelog no-changeset !)
1248 1248 R b
1249 1249 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
1250 1250 M f (no-changeset !)
1251 1251 d (no-filelog no-changeset !)
1252 1252 R d
1253 1253 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
1254 1254 M f (no-changeset !)
1255 1255 d (no-filelog no-changeset !)
1256 1256 R d
1257 1257 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
1258 1258 A f
1259 1259 d
1260 1260 R d
1261 1261 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
1262 1262 A f
1263 1263 b
1264 1264 R b
1265 1265
1266 1266 # From here, we run status against revision where both source file exists.
1267 1267 #
1268 1268 # The filelog based implementation picks an arbitrary side based on revision
1269 1269 # numbers. So the same side "wins" whatever the parents order is. This is
1270 1270 # sub-optimal because depending on revision numbers means the result can be
1271 1271 # different from one repository to the next.
1272 1272 #
1273 1273 # The changeset based algorithm use the parent order to break tie on conflicting
1274 1274 # information and will have a different order depending on who is p1 and p2.
1275 1275 # That order is stable accross repositories. (data from p1 prevails)
1276 1276
1277 1277 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
1278 1278 A f
1279 1279 d
1280 1280 R b
1281 1281 R d
1282 1282 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
1283 1283 A f
1284 1284 d (filelog !)
1285 1285 b (no-filelog !)
1286 1286 R b
1287 1287 R d
1288 1288 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
1289 1289 A f
1290 1290 a
1291 1291 R a
1292 1292 R b
1293 1293 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
1294 1294 A f
1295 1295 a (filelog !)
1296 1296 b (no-filelog !)
1297 1297 R a
1298 1298 R b
1299 1299
1300 1300
1301 1301 Note:
1302 1302 | In this case, one of the merge wrongly record a merge while there is none.
1303 1303 | This lead to bad copy tracing information to be dug up.
1304 1304
1305 1305
1306 1306 Merge:
1307 1307 - one with change to an unrelated file (b)
1308 1308 - one overwriting a file (d) with a rename (from h to i to d)
1309 1309
1310 1310 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
1311 1311 o 24 mFBm-0 simple merge - the other way
1312 1312 |\
1313 1313 +---o 23 mBFm-0 simple merge - one way
1314 1314 | |/
1315 1315 | o 22 f-2: rename i -> d
1316 1316 | |
1317 1317 | o 21 f-1: rename h -> i
1318 1318 | |
1319 1319 o | 5 b-1: b update
1320 1320 |/
1321 1321 o 2 i-2: c -move-> d
1322 1322 |
1323 1323 o 1 i-1: a -move-> c
1324 1324 |
1325 1325 o 0 i-0 initial commit: a b h
1326 1326
1327 1327 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
1328 1328 M b
1329 1329 A d
1330 1330 h
1331 1331 R a
1332 1332 R h
1333 1333 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
1334 1334 M b
1335 1335 A d
1336 1336 h
1337 1337 R a
1338 1338 R h
1339 1339 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
1340 1340 M d (no-changeset !)
1341 1341 h (no-filelog no-changeset !)
1342 1342 R h
1343 1343 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
1344 1344 M b
1345 1345 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
1346 1346 M b
1347 1347 M d (no-changeset !)
1348 1348 i (no-filelog no-changeset !)
1349 1349 R i
1350 1350 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
1351 1351 M d (no-changeset !)
1352 1352 h (no-filelog no-changeset !)
1353 1353 R h
1354 1354 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
1355 1355 M b
1356 1356 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
1357 1357 M b
1358 1358 M d (no-changeset !)
1359 1359 i (no-filelog no-changeset !)
1360 1360 R i
1361 1361
1362 1362 #if no-changeset
1363 1363 $ hg log -Gfr 'desc("mBFm-0")' d
1364 1364 o 22 f-2: rename i -> d
1365 1365 |
1366 1366 o 21 f-1: rename h -> i
1367 1367 :
1368 1368 o 0 i-0 initial commit: a b h
1369 1369
1370 1370 #else
1371 1371 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1372 1372 $ hg log -Gfr 'desc("mBFm-0")' d
1373 1373 o 2 i-2: c -move-> d
1374 1374 |
1375 1375 ~
1376 1376 #endif
1377 1377
1378 1378 #if no-changeset
1379 1379 $ hg log -Gfr 'desc("mFBm-0")' d
1380 1380 o 22 f-2: rename i -> d
1381 1381 |
1382 1382 o 21 f-1: rename h -> i
1383 1383 :
1384 1384 o 0 i-0 initial commit: a b h
1385 1385
1386 1386 #else
1387 1387 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1388 1388 $ hg log -Gfr 'desc("mFBm-0")' d
1389 1389 o 2 i-2: c -move-> d
1390 1390 |
1391 1391 ~
1392 1392 #endif
1393 1393
1394 1394
1395 1395 Merge:
1396 1396 - one with change to a file
1397 1397 - one deleting and recreating the file
1398 1398
1399 1399 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
1400 1400 consider history and rename on both branch of the merge.
1401 1401
1402 1402 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
1403 1403 o 27 mGDm-0 simple merge - the other way
1404 1404 |\
1405 1405 +---o 26 mDGm-0 simple merge - one way
1406 1406 | |/
1407 1407 | o 25 g-1: update d
1408 1408 | |
1409 1409 o | 8 d-2 re-add d
1410 1410 | |
1411 1411 o | 7 d-1 delete d
1412 1412 |/
1413 1413 o 2 i-2: c -move-> d
1414 1414 |
1415 1415 o 1 i-1: a -move-> c
1416 1416 |
1417 1417 o 0 i-0 initial commit: a b h
1418 1418
1419 1419 One side of the merge have a long history with rename. The other side of the
1420 1420 merge point to a new file with a smaller history. Each side is "valid".
1421 1421
1422 1422 (and again the filelog based algorithm only explore one, with a pick based on
1423 1423 revision numbers)
1424 1424
1425 1425 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
1426 1426 A d
1427 1427 a (filelog !)
1428 1428 R a
1429 1429 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
1430 1430 A d
1431 1431 a
1432 1432 R a
1433 1433 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
1434 1434 M d
1435 1435 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
1436 1436 M d
1437 1437 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
1438 1438 M d
1439 1439 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
1440 1440 M d
1441 1441
1442 1442 #if no-changeset
1443 1443 $ hg log -Gfr 'desc("mDGm-0")' d
1444 1444 o 26 mDGm-0 simple merge - one way
1445 1445 |\
1446 1446 | o 25 g-1: update d
1447 1447 | |
1448 1448 o | 8 d-2 re-add d
1449 1449 |/
1450 1450 o 2 i-2: c -move-> d
1451 1451 |
1452 1452 o 1 i-1: a -move-> c
1453 1453 |
1454 1454 o 0 i-0 initial commit: a b h
1455 1455
1456 1456 #else
1457 1457 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1458 1458 $ hg log -Gfr 'desc("mDGm-0")' d
1459 1459 o 26 mDGm-0 simple merge - one way
1460 1460 |\
1461 1461 | o 25 g-1: update d
1462 1462 | |
1463 1463 o | 8 d-2 re-add d
1464 1464 |/
1465 1465 o 2 i-2: c -move-> d
1466 1466 |
1467 1467 ~
1468 1468 #endif
1469 1469
1470 1470
1471 1471 #if no-changeset
1472 1472 $ hg log -Gfr 'desc("mDGm-0")' d
1473 1473 o 26 mDGm-0 simple merge - one way
1474 1474 |\
1475 1475 | o 25 g-1: update d
1476 1476 | |
1477 1477 o | 8 d-2 re-add d
1478 1478 |/
1479 1479 o 2 i-2: c -move-> d
1480 1480 |
1481 1481 o 1 i-1: a -move-> c
1482 1482 |
1483 1483 o 0 i-0 initial commit: a b h
1484 1484
1485 1485 #else
1486 1486 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1487 1487 $ hg log -Gfr 'desc("mDGm-0")' d
1488 1488 o 26 mDGm-0 simple merge - one way
1489 1489 |\
1490 1490 | o 25 g-1: update d
1491 1491 | |
1492 1492 o | 8 d-2 re-add d
1493 1493 |/
1494 1494 o 2 i-2: c -move-> d
1495 1495 |
1496 1496 ~
1497 1497 #endif
1498 1498
1499 1499
1500 1500 Merge:
1501 1501 - one with change to a file (d)
1502 1502 - one overwriting that file with a rename (from h to i, to d)
1503 1503
1504 1504 This case is similar to BF/FB, but an actual merge happens, so both side of the
1505 1505 history are relevant.
1506 1506
1507 1507
1508 1508 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
1509 1509 o 29 mGFm-0 simple merge - the other way
1510 1510 |\
1511 1511 +---o 28 mFGm-0 simple merge - one way
1512 1512 | |/
1513 1513 | o 25 g-1: update d
1514 1514 | |
1515 1515 o | 22 f-2: rename i -> d
1516 1516 | |
1517 1517 o | 21 f-1: rename h -> i
1518 1518 |/
1519 1519 o 2 i-2: c -move-> d
1520 1520 |
1521 1521 o 1 i-1: a -move-> c
1522 1522 |
1523 1523 o 0 i-0 initial commit: a b h
1524 1524
1525 1525
1526 1526 Note:
1527 1527 | In this case, the merge get conflicting information since on one side we have
1528 1528 | "a -> c -> d". and one the other one we have "h -> i -> d".
1529 1529 |
1530 1530 | The current code arbitrarily pick one side depending the ordering of the merged hash:
1531 1531
1532 1532 In this case, the file hash from "f-2" is lower, so it will be `p1` of the resulting filenode its copy tracing information will win (and trace back to "h"):
1533 1533
1534 1534 Details on this hash ordering pick:
1535 1535
1536 1536 $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
1537 1537 17ec97e605773eb44a117d1136b3849bcdc1924f 644 d (no-changeset !)
1538 1538 5cce88bf349f7c742bb440f2c53f81db9c294279 644 d (changeset !)
1539 1539 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
1540 1540 A d
1541 1541 a (no-changeset no-compatibility !)
1542 1542
1543 1543 $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
1544 1544 7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644 d (no-changeset !)
1545 1545 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
1546 1546 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
1547 1547 A d
1548 1548 h (no-changeset no-compatibility !)
1549 1549
1550 1550 Copy tracing data on the resulting merge:
1551 1551
1552 1552 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
1553 1553 A d
1554 1554 h (no-filelog !)
1555 1555 a (filelog !)
1556 1556 R a
1557 1557 R h
1558 1558 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
1559 1559 A d
1560 1560 a (no-changeset !)
1561 1561 h (changeset !)
1562 1562 R a
1563 1563 R h
1564 1564 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
1565 1565 M d
1566 1566 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
1567 1567 M d
1568 1568 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
1569 1569 M d
1570 1570 i (no-filelog !)
1571 1571 R i
1572 1572 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
1573 1573 M d
1574 1574 i (no-filelog !)
1575 1575 R i
1576 1576 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
1577 1577 M d (no-changeset !)
1578 1578 h (no-filelog no-changeset !)
1579 1579 R h
1580 1580 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
1581 1581 M d (no-changeset !)
1582 1582 h (no-filelog no-changeset !)
1583 1583 R h
1584 1584
1585 1585 #if no-changeset
1586 1586 $ hg log -Gfr 'desc("mFGm-0")' d
1587 1587 o 28 mFGm-0 simple merge - one way
1588 1588 |\
1589 1589 | o 25 g-1: update d
1590 1590 | |
1591 1591 o | 22 f-2: rename i -> d
1592 1592 | |
1593 1593 o | 21 f-1: rename h -> i
1594 1594 |/
1595 1595 o 2 i-2: c -move-> d
1596 1596 |
1597 1597 o 1 i-1: a -move-> c
1598 1598 |
1599 1599 o 0 i-0 initial commit: a b h
1600 1600
1601 1601 #else
1602 1602 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1603 1603 $ hg log -Gfr 'desc("mFGm-0")' d
1604 1604 o 25 g-1: update d
1605 1605 |
1606 1606 o 2 i-2: c -move-> d
1607 1607 |
1608 1608 ~
1609 1609 #endif
1610 1610
1611 1611 #if no-changeset
1612 1612 $ hg log -Gfr 'desc("mGFm-0")' d
1613 1613 o 29 mGFm-0 simple merge - the other way
1614 1614 |\
1615 1615 | o 25 g-1: update d
1616 1616 | |
1617 1617 o | 22 f-2: rename i -> d
1618 1618 | |
1619 1619 o | 21 f-1: rename h -> i
1620 1620 |/
1621 1621 o 2 i-2: c -move-> d
1622 1622 |
1623 1623 o 1 i-1: a -move-> c
1624 1624 |
1625 1625 o 0 i-0 initial commit: a b h
1626 1626
1627 1627 #else
1628 1628 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1629 1629 $ hg log -Gfr 'desc("mGFm-0")' d
1630 1630 o 25 g-1: update d
1631 1631 |
1632 1632 o 2 i-2: c -move-> d
1633 1633 |
1634 1634 ~
1635 1635 #endif
1636 1636
1637 1637
1638 1638 Comparing with merging with a deletion (and keeping the file)
1639 1639 -------------------------------------------------------------
1640 1640
1641 1641 Merge:
1642 1642 - one removing a file (d)
1643 1643 - one updating that file
1644 1644 - the merge keep the modified version of the file (canceling the delete)
1645 1645
1646 1646 In this case, the file keep on living after the merge. So we should not drop its
1647 1647 copy tracing chain.
1648 1648
1649 1649 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
1650 1650 o 31 mGCm-0
1651 1651 |\
1652 1652 +---o 30 mCGm-0
1653 1653 | |/
1654 1654 | o 25 g-1: update d
1655 1655 | |
1656 1656 o | 6 c-1 delete d
1657 1657 |/
1658 1658 o 2 i-2: c -move-> d
1659 1659 |
1660 1660 o 1 i-1: a -move-> c
1661 1661 |
1662 1662 o 0 i-0 initial commit: a b h
1663 1663
1664 1664
1665 1665 'a' is the copy source of 'd'
1666 1666
1667 1667 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
1668 1668 A d
1669 1669 a (no-compatibility no-changeset !)
1670 1670 R a
1671 1671 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
1672 1672 A d
1673 1673 a (no-compatibility no-changeset !)
1674 1674 R a
1675 1675 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
1676 1676 A d
1677 1677 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mGCm-0")'
1678 1678 A d
1679 1679 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mCGm-0")'
1680 1680 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGCm-0")'
1681 1681
1682 1682
1683 1683 Comparing with merge restoring an untouched deleted file
1684 1684 --------------------------------------------------------
1685 1685
1686 1686 Merge:
1687 1687 - one removing a file (d)
1688 1688 - one leaving the file untouched
1689 1689 - the merge actively restore the file to the same content.
1690 1690
1691 1691 In this case, the file keep on living after the merge. So we should not drop its
1692 1692 copy tracing chain.
1693 1693
1694 1694 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
1695 1695 o 33 mBC-revert-m-0
1696 1696 |\
1697 1697 +---o 32 mCB-revert-m-0
1698 1698 | |/
1699 1699 | o 6 c-1 delete d
1700 1700 | |
1701 1701 o | 5 b-1: b update
1702 1702 |/
1703 1703 o 2 i-2: c -move-> d
1704 1704 |
1705 1705 o 1 i-1: a -move-> c
1706 1706 |
1707 1707 o 0 i-0 initial commit: a b h
1708 1708
1709 1709
1710 1710 'a' is the the copy source of 'd'
1711 1711
1712 1712 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
1713 1713 M b
1714 1714 A d
1715 1715 a (no-compatibility no-changeset !)
1716 1716 R a
1717 1717 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
1718 1718 M b
1719 1719 A d
1720 1720 a (no-compatibility no-changeset !)
1721 1721 R a
1722 1722 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-revert-m-0")'
1723 1723 M b
1724 1724 A d
1725 1725 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-revert-m-0")'
1726 1726 M b
1727 1727 A d
1728 1728 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-revert-m-0")'
1729 1729 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-revert-m-0")'
1730 1730
1731 1731
1732 1732 Merging a branch where a rename was deleted with a branch where the same file was renamed
1733 1733 ------------------------------------------------------------------------------------------
1734 1734
1735 1735 Create a "conflicting" merge where `d` get removed on one branch before its
1736 1736 rename information actually conflict with the other branch.
1737 1737
1738 1738 (the copy information from the branch that was not deleted should win).
1739 1739
1740 1740 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
1741 1741 o 36 mHC-delete-before-conflict-m-0
1742 1742 |\
1743 1743 +---o 35 mCH-delete-before-conflict-m-0
1744 1744 | |/
1745 1745 | o 34 h-1: b -(move)-> d
1746 1746 | |
1747 1747 o | 6 c-1 delete d
1748 1748 | |
1749 1749 o | 2 i-2: c -move-> d
1750 1750 | |
1751 1751 o | 1 i-1: a -move-> c
1752 1752 |/
1753 1753 o 0 i-0 initial commit: a b h
1754 1754
1755 1755
1756 1756 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCH-delete-before-conflict-m")'
1757 1757 A d
1758 1758 b (no-compatibility no-changeset !)
1759 1759 R a
1760 1760 R b
1761 1761 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mHC-delete-before-conflict-m")'
1762 1762 A d
1763 1763 b
1764 1764 R a
1765 1765 R b
1766 1766 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCH-delete-before-conflict-m")'
1767 1767 A d
1768 1768 b
1769 1769 R b
1770 1770 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mHC-delete-before-conflict-m")'
1771 1771 A d
1772 1772 b
1773 1773 R b
1774 1774 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mCH-delete-before-conflict-m")'
1775 1775 R a
1776 1776 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mHC-delete-before-conflict-m")'
1777 1777 R a
General Comments 0
You need to be logged in to leave comments. Login now