mercurial/merge.py
changeset 45384 72e503a24715
parent 45383 f970cca30989
child 45385 05d19ca33b33
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)