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