Mercurial > hg
comparison mercurial/merge.py @ 45384:72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
This makes code little bit nicer as we directly update information in the
mergeresult object instead of building up a dict first and then setting it.
Differential Revision: https://phab.mercurial-scm.org/D8922
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Mon, 10 Aug 2020 15:38:45 +0530 |
parents | f970cca30989 |
children | 05d19ca33b33 |
comparison
equal
deleted
inserted
replaced
45383:f970cca30989 | 45384:72e503a24715 |
---|---|
580 self._diverge = {} | 580 self._diverge = {} |
581 self._renamedelete = {} | 581 self._renamedelete = {} |
582 self._commitinfo = collections.defaultdict(dict) | 582 self._commitinfo = collections.defaultdict(dict) |
583 self._actionmapping = collections.defaultdict(dict) | 583 self._actionmapping = collections.defaultdict(dict) |
584 | 584 |
585 def updatevalues(self, diverge, renamedelete, commitinfo): | 585 def updatevalues(self, diverge, renamedelete): |
586 self._diverge = diverge | 586 self._diverge = diverge |
587 self._renamedelete = renamedelete | 587 self._renamedelete = renamedelete |
588 self._commitinfo = commitinfo | |
589 | 588 |
590 def addfile(self, filename, action, data, message): | 589 def addfile(self, filename, action, data, message): |
591 """ adds a new file to the mergeresult object | 590 """ adds a new file to the mergeresult object |
592 | 591 |
593 filename: file which we are adding | 592 filename: file which we are adding |
668 for key, val in sorted(pycompat.iteritems(self._filemapping)): | 667 for key, val in sorted(pycompat.iteritems(self._filemapping)): |
669 yield key, val | 668 yield key, val |
670 else: | 669 else: |
671 for key, val in pycompat.iteritems(self._filemapping): | 670 for key, val in pycompat.iteritems(self._filemapping): |
672 yield key, val | 671 yield key, val |
672 | |
673 def addcommitinfo(self, filename, key, value): | |
674 """ adds key-value information about filename which will be required | |
675 while committing this merge """ | |
676 self._commitinfo[filename][key] = value | |
673 | 677 |
674 @property | 678 @property |
675 def diverge(self): | 679 def diverge(self): |
676 return self._diverge | 680 return self._diverge |
677 | 681 |
754 branch_copies2 = copies.branch_copies() | 758 branch_copies2 = copies.branch_copies() |
755 diverge = {} | 759 diverge = {} |
756 # information from merge which is needed at commit time | 760 # information from merge which is needed at commit time |
757 # for example choosing filelog of which parent to commit | 761 # for example choosing filelog of which parent to commit |
758 # TODO: use specific constants in future for this mapping | 762 # TODO: use specific constants in future for this mapping |
759 commitinfo = collections.defaultdict(dict) | |
760 if followcopies: | 763 if followcopies: |
761 branch_copies1, branch_copies2, diverge = copies.mergecopies( | 764 branch_copies1, branch_copies2, diverge = copies.mergecopies( |
762 repo, wctx, p2, pa | 765 repo, wctx, p2, pa |
763 ) | 766 ) |
764 | 767 |
842 mergestatemod.ACTION_GET, | 845 mergestatemod.ACTION_GET, |
843 (fl2, False), | 846 (fl2, False), |
844 b'remote is newer', | 847 b'remote is newer', |
845 ) | 848 ) |
846 if branchmerge: | 849 if branchmerge: |
847 commitinfo[f][b'filenode-source'] = b'other' | 850 mresult.addcommitinfo( |
851 f, b'filenode-source', b'other' | |
852 ) | |
848 elif nol and n2 == a: # remote only changed 'x' | 853 elif nol and n2 == a: # remote only changed 'x' |
849 mresult.addfile( | 854 mresult.addfile( |
850 f, | 855 f, |
851 mergestatemod.ACTION_EXEC, | 856 mergestatemod.ACTION_EXEC, |
852 (fl2,), | 857 (fl2,), |
858 mergestatemod.ACTION_GET, | 863 mergestatemod.ACTION_GET, |
859 (fl1, False), | 864 (fl1, False), |
860 b'remote is newer', | 865 b'remote is newer', |
861 ) | 866 ) |
862 if branchmerge: | 867 if branchmerge: |
863 commitinfo[f][b'filenode-source'] = b'other' | 868 mresult.addcommitinfo(f, b'filenode-source', b'other') |
864 else: # both changed something | 869 else: # both changed something |
865 mresult.addfile( | 870 mresult.addfile( |
866 f, | 871 f, |
867 mergestatemod.ACTION_MERGE, | 872 mergestatemod.ACTION_MERGE, |
868 (f, f, f, False, pa.node()), | 873 (f, f, f, False, pa.node()), |
1025 _filternarrowactions(narrowmatch, branchmerge, mresult) | 1030 _filternarrowactions(narrowmatch, branchmerge, mresult) |
1026 | 1031 |
1027 renamedelete = branch_copies1.renamedelete | 1032 renamedelete = branch_copies1.renamedelete |
1028 renamedelete.update(branch_copies2.renamedelete) | 1033 renamedelete.update(branch_copies2.renamedelete) |
1029 | 1034 |
1030 mresult.updatevalues(diverge, renamedelete, commitinfo) | 1035 mresult.updatevalues(diverge, renamedelete) |
1031 return mresult | 1036 return mresult |
1032 | 1037 |
1033 | 1038 |
1034 def _resolvetrivial(repo, wctx, mctx, ancestor, mresult): | 1039 def _resolvetrivial(repo, wctx, mctx, ancestor, mresult): |
1035 """Resolves false conflicts where the nodeid changed but the content | 1040 """Resolves false conflicts where the nodeid changed but the content |
1181 _(b' %s: ambiguous merge - picked %s action\n') % (f, m) | 1186 _(b' %s: ambiguous merge - picked %s action\n') % (f, m) |
1182 ) | 1187 ) |
1183 mresult.addfile(f, *l[0]) | 1188 mresult.addfile(f, *l[0]) |
1184 continue | 1189 continue |
1185 repo.ui.note(_(b'end of auction\n\n')) | 1190 repo.ui.note(_(b'end of auction\n\n')) |
1186 # TODO: think about commitinfo when bid merge is used | 1191 mresult.updatevalues(diverge, renamedelete) |
1187 mresult.updatevalues(diverge, renamedelete, {}) | |
1188 | 1192 |
1189 if wctx.rev() is None: | 1193 if wctx.rev() is None: |
1190 _forgetremoved(wctx, mctx, branchmerge, mresult) | 1194 _forgetremoved(wctx, mctx, branchmerge, mresult) |
1191 | 1195 |
1192 sparse.filterupdatesactions(repo, wctx, mctx, branchmerge, mresult) | 1196 sparse.filterupdatesactions(repo, wctx, mctx, branchmerge, mresult) |