comparison mercurial/mergestate.py @ 47613:8b16ccc71001

mergestate: use dirstate.update_file API in recordupdates() Let's use the new single function to replace multiple different functions. This is part of dirstate API refactor to make it more clearer and generic so that it can be replicated in Rust. Differential Revision: https://phab.mercurial-scm.org/D11077
author Pulkit Goyal <7895pulkit@gmail.com>
date Wed, 07 Jul 2021 23:04:19 +0530
parents bea4717415c0
children 33beeb32f73a
comparison
equal deleted inserted replaced
47612:a9d75262b992 47613:8b16ccc71001
741 def recordupdates(repo, actions, branchmerge, getfiledata): 741 def recordupdates(repo, actions, branchmerge, getfiledata):
742 """record merge actions to the dirstate""" 742 """record merge actions to the dirstate"""
743 # remove (must come first) 743 # remove (must come first)
744 for f, args, msg in actions.get(ACTION_REMOVE, []): 744 for f, args, msg in actions.get(ACTION_REMOVE, []):
745 if branchmerge: 745 if branchmerge:
746 repo.dirstate.remove(f) 746 repo.dirstate.update_file(f, p1_tracked=True, wc_tracked=False)
747 else: 747 else:
748 repo.dirstate.drop(f) 748 repo.dirstate.update_file(f, p1_tracked=False, wc_tracked=False)
749 749
750 # forget (must come first) 750 # forget (must come first)
751 for f, args, msg in actions.get(ACTION_FORGET, []): 751 for f, args, msg in actions.get(ACTION_FORGET, []):
752 repo.dirstate.drop(f) 752 repo.dirstate.update_file(f, p1_tracked=False, wc_tracked=False)
753 753
754 # resolve path conflicts 754 # resolve path conflicts
755 for f, args, msg in actions.get(ACTION_PATH_CONFLICT_RESOLVE, []): 755 for f, args, msg in actions.get(ACTION_PATH_CONFLICT_RESOLVE, []):
756 (f0, origf0) = args 756 (f0, origf0) = args
757 repo.dirstate.add(f) 757 repo.dirstate.update_file(f, p1_tracked=False, wc_tracked=True)
758 repo.dirstate.copy(origf0, f) 758 repo.dirstate.copy(origf0, f)
759 if f0 == origf0: 759 if f0 == origf0:
760 repo.dirstate.remove(f0) 760 repo.dirstate.update_file(f0, p1_tracked=True, wc_tracked=False)
761 else: 761 else:
762 repo.dirstate.drop(f0) 762 repo.dirstate.update_file(f0, p1_tracked=False, wc_tracked=False)
763 763
764 # re-add 764 # re-add
765 for f, args, msg in actions.get(ACTION_ADD, []): 765 for f, args, msg in actions.get(ACTION_ADD, []):
766 repo.dirstate.add(f) 766 repo.dirstate.update_file(f, p1_tracked=False, wc_tracked=True)
767 767
768 # re-add/mark as modified 768 # re-add/mark as modified
769 for f, args, msg in actions.get(ACTION_ADD_MODIFIED, []): 769 for f, args, msg in actions.get(ACTION_ADD_MODIFIED, []):
770 if branchmerge: 770 if branchmerge:
771 repo.dirstate.normallookup(f) 771 repo.dirstate.normallookup(f)
772 else: 772 else:
773 repo.dirstate.add(f) 773 repo.dirstate.update_file(f, p1_tracked=False, wc_tracked=True)
774 774
775 # exec change 775 # exec change
776 for f, args, msg in actions.get(ACTION_EXEC, []): 776 for f, args, msg in actions.get(ACTION_EXEC, []):
777 repo.dirstate.normallookup(f) 777 repo.dirstate.normallookup(f)
778 778
789 pass 789 pass
790 790
791 # get 791 # get
792 for f, args, msg in actions.get(ACTION_GET, []): 792 for f, args, msg in actions.get(ACTION_GET, []):
793 if branchmerge: 793 if branchmerge:
794 repo.dirstate.otherparent(f) 794 # tracked in p1 can be True also but update_file should not care
795 repo.dirstate.update_file(
796 f,
797 p1_tracked=False,
798 p2_tracked=True,
799 wc_tracked=True,
800 clean_p2=True,
801 )
795 else: 802 else:
796 parentfiledata = getfiledata[f] if getfiledata else None 803 parentfiledata = getfiledata[f] if getfiledata else None
797 repo.dirstate.normal(f, parentfiledata=parentfiledata) 804 repo.dirstate.update_parent_file_data(f, parentfiledata)
798 805
799 # merge 806 # merge
800 for f, args, msg in actions.get(ACTION_MERGE, []): 807 for f, args, msg in actions.get(ACTION_MERGE, []):
801 f1, f2, fa, move, anc = args 808 f1, f2, fa, move, anc = args
802 if branchmerge: 809 if branchmerge:
803 # We've done a branch merge, mark this file as merged 810 # We've done a branch merge, mark this file as merged
804 # so that we properly record the merger later 811 # so that we properly record the merger later
805 repo.dirstate.merge(f) 812 repo.dirstate.update_file(
813 f, p1_tracked=True, wc_tracked=True, merged=True
814 )
806 if f1 != f2: # copy/rename 815 if f1 != f2: # copy/rename
807 if move: 816 if move:
808 repo.dirstate.remove(f1) 817 repo.dirstate.update_file(
818 f1, p1_tracked=True, wc_tracked=False
819 )
809 if f1 != f: 820 if f1 != f:
810 repo.dirstate.copy(f1, f) 821 repo.dirstate.copy(f1, f)
811 else: 822 else:
812 repo.dirstate.copy(f2, f) 823 repo.dirstate.copy(f2, f)
813 else: 824 else:
815 # we set the dirstate to emulate a normal checkout 826 # we set the dirstate to emulate a normal checkout
816 # of that file some time in the past. Thus our 827 # of that file some time in the past. Thus our
817 # merge will appear as a normal local file 828 # merge will appear as a normal local file
818 # modification. 829 # modification.
819 if f2 == f: # file not locally copied/moved 830 if f2 == f: # file not locally copied/moved
820 repo.dirstate.normallookup(f) 831 repo.dirstate.update_file(
832 f, p1_tracked=True, wc_tracked=True, possibly_dirty=True
833 )
821 if move: 834 if move:
822 repo.dirstate.drop(f1) 835 repo.dirstate.update_file(
836 f1, p1_tracked=False, wc_tracked=False
837 )
823 838
824 # directory rename, move local 839 # directory rename, move local
825 for f, args, msg in actions.get(ACTION_DIR_RENAME_MOVE_LOCAL, []): 840 for f, args, msg in actions.get(ACTION_DIR_RENAME_MOVE_LOCAL, []):
826 f0, flag = args 841 f0, flag = args
827 if branchmerge: 842 if branchmerge:
828 repo.dirstate.add(f) 843 repo.dirstate.update_file(f, p1_tracked=False, wc_tracked=True)
829 repo.dirstate.remove(f0) 844 repo.dirstate.update_file(f0, p1_tracked=True, wc_tracked=False)
830 repo.dirstate.copy(f0, f) 845 repo.dirstate.copy(f0, f)
831 else: 846 else:
832 repo.dirstate.normal(f) 847 repo.dirstate.update_file(f, p1_tracked=True, wc_tracked=True)
833 repo.dirstate.drop(f0) 848 repo.dirstate.update_file(f0, p1_tracked=False, wc_tracked=False)
834 849
835 # directory rename, get 850 # directory rename, get
836 for f, args, msg in actions.get(ACTION_LOCAL_DIR_RENAME_GET, []): 851 for f, args, msg in actions.get(ACTION_LOCAL_DIR_RENAME_GET, []):
837 f0, flag = args 852 f0, flag = args
838 if branchmerge: 853 if branchmerge:
839 repo.dirstate.add(f) 854 repo.dirstate.update_file(f, p1_tracked=False, wc_tracked=True)
840 repo.dirstate.copy(f0, f) 855 repo.dirstate.copy(f0, f)
841 else: 856 else:
842 repo.dirstate.normal(f) 857 repo.dirstate.update_file(f, p1_tracked=True, wc_tracked=True)