equal
deleted
inserted
replaced
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) |