Mercurial > hg
comparison tests/test-merge-criss-cross.t @ 45584:4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
delete-changed or changed-delete conflicts can either be resolved by mergetool,
if some tool is passed and using or by user choose something on prompt or user
doing some `hg revert` after choosing the file to remain conflicted.
If the user decides to keep the changed side, on commit we just reuse the parent
filenode. This is mostly fine unless we are in a distributed environment and
people are doing criss-cross merges.
Since, we don't have recursive merges or any other way of describing the end
result of the merge was an explicit choice and it should be differentiated from
it's ancestors, merge algo during criss-cross merges fails to take in account
the explicit choice made by user and end up with a what-can-be-said-wrong-merge.
The solution which we are trying to fix this is by creating a filenode on commit
instead of reusing the parent filenode. This helps differentiate between
pre-merged filenode and post-merge filenode and kind of tells about the choice
user made.
To implement creating new filenode functionality, we store info about these
files in mergestate so that we can read them on commit and force create a new
filenode.
Differential Revision: https://phab.mercurial-scm.org/D8988
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Thu, 03 Sep 2020 13:44:06 +0530 |
parents | 463ca8af8c72 |
children | 479cce8c9882 |
comparison
equal
deleted
inserted
replaced
45583:9f14bb4d59ea | 45584:4c8a93ec6908 |
---|---|
537 file: the-file (state "r") | 537 file: the-file (state "r") |
538 local path: the-file (hash 0000000000000000000000000000000000000000, flags "") | 538 local path: the-file (hash 0000000000000000000000000000000000000000, flags "") |
539 ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a) | 539 ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a) |
540 other path: the-file (node 59e363a07dc876278f0e41756236f30213b6b460) | 540 other path: the-file (node 59e363a07dc876278f0e41756236f30213b6b460) |
541 extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589 | 541 extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589 |
542 extra: merge-removal-candidate = yes | |
542 extra: other-file (filenode-source = other) | 543 extra: other-file (filenode-source = other) |
543 $ hg ci -m "merge-deleting-the-file-from-deleted" | 544 $ hg ci -m "merge-deleting-the-file-from-deleted" |
544 $ hg manifest | 545 $ hg manifest |
545 other-file | 546 other-file |
546 $ hg debugrevlogindex the-file | 547 $ hg debugrevlogindex the-file |
559 file: the-file (state "r") | 560 file: the-file (state "r") |
560 local path: the-file (hash 6d2e02da5a9fe0691363dc6b573845fa271eaa35, flags "") | 561 local path: the-file (hash 6d2e02da5a9fe0691363dc6b573845fa271eaa35, flags "") |
561 ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a) | 562 ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a) |
562 other path: the-file (node 0000000000000000000000000000000000000000) | 563 other path: the-file (node 0000000000000000000000000000000000000000) |
563 extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589 | 564 extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589 |
565 extra: merge-removal-candidate = yes | |
564 $ hg ci -m "merge-deleting-the-file-from-updated" | 566 $ hg ci -m "merge-deleting-the-file-from-updated" |
565 created new head | 567 created new head |
566 $ hg manifest | 568 $ hg manifest |
567 other-file | 569 other-file |
568 $ hg debugrevlogindex the-file | 570 $ hg debugrevlogindex the-file |
581 file: the-file (state "r") | 583 file: the-file (state "r") |
582 local path: the-file (hash 0000000000000000000000000000000000000000, flags "") | 584 local path: the-file (hash 0000000000000000000000000000000000000000, flags "") |
583 ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a) | 585 ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a) |
584 other path: the-file (node 59e363a07dc876278f0e41756236f30213b6b460) | 586 other path: the-file (node 59e363a07dc876278f0e41756236f30213b6b460) |
585 extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589 | 587 extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589 |
588 extra: merge-removal-candidate = yes | |
586 extra: other-file (filenode-source = other) | 589 extra: other-file (filenode-source = other) |
587 $ hg ci -m "merge-keeping-the-file-from-deleted" | 590 $ hg ci -m "merge-keeping-the-file-from-deleted" |
588 created new head | 591 created new head |
589 $ hg manifest | 592 $ hg manifest |
590 other-file | 593 other-file |
610 file: the-file (state "r") | 613 file: the-file (state "r") |
611 local path: the-file (hash 6d2e02da5a9fe0691363dc6b573845fa271eaa35, flags "") | 614 local path: the-file (hash 6d2e02da5a9fe0691363dc6b573845fa271eaa35, flags "") |
612 ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a) | 615 ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a) |
613 other path: the-file (node 0000000000000000000000000000000000000000) | 616 other path: the-file (node 0000000000000000000000000000000000000000) |
614 extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589 | 617 extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589 |
618 extra: merge-removal-candidate = yes | |
615 $ hg ci -m "merge-keeping-the-file-from-updated" | 619 $ hg ci -m "merge-keeping-the-file-from-updated" |
616 created new head | 620 created new head |
617 $ hg manifest | 621 $ hg manifest |
618 other-file | 622 other-file |
619 the-file | 623 the-file |