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)