Mercurial > hg
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) |