Show More
@@ -422,6 +422,49 b' Subcase: new copy information on both si' | |||||
422 | o i-0 initial commit: a b h |
|
422 | o i-0 initial commit: a b h | |
423 |
|
423 | |||
424 |
|
424 | |||
|
425 | Subcase: new copy information on both side with an actual merge happening | |||
|
426 | ````````````````````````````````````````````````````````````````````````` | |||
|
427 | ||||
|
428 | - the "p-" branch renaming 't' to 'v' (through 'u') | |||
|
429 | - the "q-" branch renaming 'r' to 'v' (through 'w') | |||
|
430 | ||||
|
431 | $ case_desc="merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content)" | |||
|
432 | ||||
|
433 | $ hg up 'desc("p-2")' | |||
|
434 | 3 files updated, 0 files merged, 2 files removed, 0 files unresolved | |||
|
435 | $ hg merge 'desc("q-2")' --tool ':union' | |||
|
436 | merging v | |||
|
437 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | |||
|
438 | (branch merge, don't forget to commit) | |||
|
439 | $ hg ci -m "mPQm-0 $case_desc - one way" | |||
|
440 | $ hg up 'desc("q-2")' | |||
|
441 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
442 | $ hg merge 'desc("p-2")' --tool ':union' | |||
|
443 | merging v | |||
|
444 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | |||
|
445 | (branch merge, don't forget to commit) | |||
|
446 | $ hg ci -m "mQPm-0 $case_desc - the other way" | |||
|
447 | created new head | |||
|
448 | $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))' | |||
|
449 | o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way | |||
|
450 | |\ | |||
|
451 | +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way | |||
|
452 | | |/ | |||
|
453 | | o e-2 g -move-> f | |||
|
454 | | | | |||
|
455 | | o e-1 b -move-> g | |||
|
456 | | | | |||
|
457 | o | a-2: e -move-> f | |||
|
458 | | | | |||
|
459 | o | a-1: d -move-> e | |||
|
460 | |/ | |||
|
461 | o i-2: c -move-> d, s -move-> t | |||
|
462 | | | |||
|
463 | o i-1: a -move-> c, p -move-> s | |||
|
464 | | | |||
|
465 | o i-0 initial commit: a b h | |||
|
466 | ||||
|
467 | ||||
425 | Subcase: existing copy information overwritten on one branch |
|
468 | Subcase: existing copy information overwritten on one branch | |
426 | ```````````````````````````````````````````````````````````` |
|
469 | ```````````````````````````````````````````````````````````` | |
427 |
|
470 | |||
@@ -459,8 +502,9 b' Merge:' | |||||
459 | (branch merge, don't forget to commit) |
|
502 | (branch merge, don't forget to commit) | |
460 | $ hg ci -m "mFBm-0 $case_desc - the other way" |
|
503 | $ hg ci -m "mFBm-0 $case_desc - the other way" | |
461 | created new head |
|
504 | created new head | |
|
505 | $ hg up null --quiet | |||
462 | $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))' |
|
506 | $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))' | |
463 |
|
|
507 | o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way | |
464 | |\ |
|
508 | |\ | |
465 | +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way |
|
509 | +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way | |
466 | | |/ |
|
510 | | |/ | |
@@ -491,8 +535,7 b' consider history and rename on both bran' | |||||
491 | $ case_desc="actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content" |
|
535 | $ case_desc="actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content" | |
492 |
|
536 | |||
493 | $ hg up 'desc("i-2")' |
|
537 | $ hg up 'desc("i-2")' | |
494 |
|
|
538 | 6 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
495 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !) |
|
|||
496 | $ echo "some update" >> d |
|
539 | $ echo "some update" >> d | |
497 | $ hg commit -m "g-1: update d" |
|
540 | $ hg commit -m "g-1: update d" | |
498 | created new head |
|
541 | created new head | |
@@ -1229,6 +1272,8 b' Summary of all created cases' | |||||
1229 | mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists) |
|
1272 | mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists) | |
1230 | mN,GFm: chained merges (copy-overwrite -> simple) - same content |
|
1273 | mN,GFm: chained merges (copy-overwrite -> simple) - same content | |
1231 | mO,FGm: chained merges (copy-overwrite -> simple) - same content |
|
1274 | mO,FGm: chained merges (copy-overwrite -> simple) - same content | |
|
1275 | mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way | |||
|
1276 | mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way | |||
1232 | n-1: unrelated changes (based on the "f" series of changes) |
|
1277 | n-1: unrelated changes (based on the "f" series of changes) | |
1233 | o-1: unrelated changes (based on "g" changes) |
|
1278 | o-1: unrelated changes (based on "g" changes) | |
1234 | p-1: t -move-> u |
|
1279 | p-1: t -move-> u | |
@@ -1433,6 +1478,16 b' We upgrade a repository that is not usin' | |||||
1433 | entry-0014 size 14 |
|
1478 | entry-0014 size 14 | |
1434 | '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f' |
|
1479 | '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f' | |
1435 | merged : f, ; |
|
1480 | merged : f, ; | |
|
1481 | ##### revision "mPQm-0 merge with copies info on both side - P side" ##### | |||
|
1482 | 1 sidedata entries | |||
|
1483 | entry-0014 size 14 | |||
|
1484 | '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v' | |||
|
1485 | merged : v, ; | |||
|
1486 | ##### revision "mQPm-0 merge with copies info on both side - P side" ##### | |||
|
1487 | 1 sidedata entries | |||
|
1488 | entry-0014 size 14 | |||
|
1489 | '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v' | |||
|
1490 | merged : v, ; | |||
1436 | ##### revision "f-1" ##### |
|
1491 | ##### revision "f-1" ##### | |
1437 | 1 sidedata entries |
|
1492 | 1 sidedata entries | |
1438 | entry-0014 size 24 |
|
1493 | entry-0014 size 24 | |
@@ -2364,6 +2419,134 b' BROKEN: `hg log --follow <file>` relies ' | |||||
2364 | ~ |
|
2419 | ~ | |
2365 | #endif |
|
2420 | #endif | |
2366 |
|
2421 | |||
|
2422 | Subcase: new copy information on both side with an actual merge happening | |||
|
2423 | ````````````````````````````````````````````````````````````````````````` | |||
|
2424 | ||||
|
2425 | - the "p-" branch renaming 't' to 'v' (through 'u') | |||
|
2426 | - the "q-" branch renaming 'r' to 'v' (through 'w') | |||
|
2427 | ||||
|
2428 | ||||
|
2429 | $ hg log -G --rev '::(desc("mPQm")+desc("mQPm"))' | |||
|
2430 | o mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way | |||
|
2431 | |\ | |||
|
2432 | +---o mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way | |||
|
2433 | | |/ | |||
|
2434 | | o q-2 w -move-> v | |||
|
2435 | | | | |||
|
2436 | | o q-1 r -move-> w | |||
|
2437 | | | | |||
|
2438 | o | p-2: u -move-> v | |||
|
2439 | | | | |||
|
2440 | o | p-1: t -move-> u | |||
|
2441 | |/ | |||
|
2442 | o i-2: c -move-> d, s -move-> t | |||
|
2443 | | | |||
|
2444 | o i-1: a -move-> c, p -move-> s | |||
|
2445 | | | |||
|
2446 | o i-0 initial commit: a b h | |||
|
2447 | ||||
|
2448 | ||||
|
2449 | #if no-changeset | |||
|
2450 | $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v' | |||
|
2451 | 0946c662ef16e4e67397fd717389eb6693d41749 644 v | |||
|
2452 | $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v' | |||
|
2453 | 0db3aad7fcc1ec27fab57060e327b9e864ea0cc9 644 v | |||
|
2454 | $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v' | |||
|
2455 | 3f91841cd75cadc9a1f1b4e7c1aa6d411f76032e 644 v | |||
|
2456 | $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v' | |||
|
2457 | c43c088b811fd27983c0a9aadf44f3343cd4cd7e 644 v | |||
|
2458 | $ hg debugindex v | ../no-linkrev | |||
|
2459 | rev linkrev nodeid p1 p2 | |||
|
2460 | 0 * 3f91841cd75c 000000000000 000000000000 | |||
|
2461 | 1 * c43c088b811f 000000000000 000000000000 | |||
|
2462 | 2 * 0946c662ef16 3f91841cd75c c43c088b811f | |||
|
2463 | 3 * 0db3aad7fcc1 c43c088b811f 3f91841cd75c | |||
|
2464 | #else | |||
|
2465 | $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v' | |||
|
2466 | 65fde9f6e4d4da23b3f610e07b53673ea9541d75 644 v | |||
|
2467 | $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v' | |||
|
2468 | a098dda6413aecf154eefc976afc38b295acb7e5 644 v | |||
|
2469 | $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v' | |||
|
2470 | 5aed6a8dbff0301328c08360d24354d3d064cf0d 644 v | |||
|
2471 | $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v' | |||
|
2472 | a38b2fa170219750dac9bc7d19df831f213ba708 644 v | |||
|
2473 | $ hg debugindex v | ../no-linkrev | |||
|
2474 | rev linkrev nodeid p1 p2 | |||
|
2475 | 0 * 5aed6a8dbff0 000000000000 000000000000 | |||
|
2476 | 1 * a38b2fa17021 000000000000 000000000000 | |||
|
2477 | 2 * 65fde9f6e4d4 5aed6a8dbff0 a38b2fa17021 | |||
|
2478 | 3 * a098dda6413a a38b2fa17021 5aed6a8dbff0 | |||
|
2479 | #endif | |||
|
2480 | ||||
|
2481 | # Here the filelog based implementation is not looking at the rename | |||
|
2482 | # information (because the file exist on both side). However the changelog | |||
|
2483 | # based on works fine. We have different output. | |||
|
2484 | ||||
|
2485 | $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mPQm-0")' | |||
|
2486 | M v | |||
|
2487 | r (no-filelog !) | |||
|
2488 | R r | |||
|
2489 | $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mQPm-0")' | |||
|
2490 | M v | |||
|
2491 | r (no-filelog !) | |||
|
2492 | R r | |||
|
2493 | $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mPQm-0")' | |||
|
2494 | M v | |||
|
2495 | t (no-filelog !) | |||
|
2496 | R t | |||
|
2497 | $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mQPm-0")' | |||
|
2498 | M v | |||
|
2499 | t (no-filelog !) | |||
|
2500 | R t | |||
|
2501 | $ hg status --copies --rev 'desc("i-2")' --rev 'desc("p-2")' | |||
|
2502 | A v | |||
|
2503 | t | |||
|
2504 | R t | |||
|
2505 | $ hg status --copies --rev 'desc("i-2")' --rev 'desc("q-2")' | |||
|
2506 | A v | |||
|
2507 | r | |||
|
2508 | R r | |||
|
2509 | ||||
|
2510 | # From here, we run status against revision where both source file exists. | |||
|
2511 | # | |||
|
2512 | # The filelog based implementation picks an arbitrary side based on revision | |||
|
2513 | # numbers. So the same side "wins" whatever the parents order is. This is | |||
|
2514 | # sub-optimal because depending on revision numbers means the result can be | |||
|
2515 | # different from one repository to the next. | |||
|
2516 | # | |||
|
2517 | # The changeset based algorithm use the parent order to break tie on conflicting | |||
|
2518 | # information and will have a different order depending on who is p1 and p2. | |||
|
2519 | # That order is stable accross repositories. (data from p1 prevails) | |||
|
2520 | ||||
|
2521 | $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mPQm-0")' | |||
|
2522 | A v | |||
|
2523 | t | |||
|
2524 | R r | |||
|
2525 | R t | |||
|
2526 | $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mQPm-0")' | |||
|
2527 | A v | |||
|
2528 | t (filelog !) | |||
|
2529 | r (no-filelog !) | |||
|
2530 | R r | |||
|
2531 | R t | |||
|
2532 | $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQm-0")' | |||
|
2533 | A d | |||
|
2534 | a | |||
|
2535 | A v | |||
|
2536 | r (filelog !) | |||
|
2537 | p (no-filelog !) | |||
|
2538 | R a | |||
|
2539 | R p | |||
|
2540 | R r | |||
|
2541 | $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQPm-0")' | |||
|
2542 | A d | |||
|
2543 | a | |||
|
2544 | A v | |||
|
2545 | r | |||
|
2546 | R a | |||
|
2547 | R p | |||
|
2548 | R r | |||
|
2549 | ||||
2367 |
|
2550 | |||
2368 | Comparing with merging with a deletion (and keeping the file) |
|
2551 | Comparing with merging with a deletion (and keeping the file) | |
2369 | ------------------------------------------------------------- |
|
2552 | ------------------------------------------------------------- |
General Comments 0
You need to be logged in to leave comments.
Login now