mercurial/merge.py
changeset 27035 de7bf242644e
parent 27034 86ede9eda252
child 27048 86290f6f6599
equal deleted inserted replaced
27034:86ede9eda252 27035:de7bf242644e
   408                 yield f
   408                 yield f
   409 
   409 
   410     def _resolve(self, preresolve, dfile, wctx, labels=None):
   410     def _resolve(self, preresolve, dfile, wctx, labels=None):
   411         """rerun merge process for file path `dfile`"""
   411         """rerun merge process for file path `dfile`"""
   412         if self[dfile] in 'rd':
   412         if self[dfile] in 'rd':
   413             return True, 0
   413             return True, 0, None
   414         stateentry = self._state[dfile]
   414         stateentry = self._state[dfile]
   415         state, hash, lfile, afile, anode, ofile, onode, flags = stateentry
   415         state, hash, lfile, afile, anode, ofile, onode, flags = stateentry
   416         octx = self._repo[self._other]
   416         octx = self._repo[self._other]
   417         fcd = wctx[dfile]
   417         fcd = wctx[dfile]
   418         fco = octx[ofile]
   418         fco = octx[ofile]
   443             # no real conflict
   443             # no real conflict
   444             del self._state[dfile]
   444             del self._state[dfile]
   445             self._dirty = True
   445             self._dirty = True
   446         elif not r:
   446         elif not r:
   447             self.mark(dfile, 'r')
   447             self.mark(dfile, 'r')
   448         return complete, r
   448 
       
   449         action = None
       
   450         if complete:
       
   451             if deleted:
       
   452                 if not fcd.isabsent():
       
   453                     # cd: remote picked (or otherwise deleted)
       
   454                     action = 'r'
       
   455                 # else: dc: local picked (no action necessary)
       
   456             else:
       
   457                 if fcd.isabsent(): # dc: remote picked
       
   458                     action = 'g'
       
   459                 elif fco.isabsent(): # cd: local picked
       
   460                     action = 'a'
       
   461                 # else: regular merges (no action necessary)
       
   462 
       
   463         return complete, r, action
   449 
   464 
   450     def preresolve(self, dfile, wctx, labels=None):
   465     def preresolve(self, dfile, wctx, labels=None):
   451         """run premerge process for dfile
   466         """run premerge process for dfile
   452 
   467 
   453         Returns whether the merge is complete, and the exit code."""
   468         Returns whether the merge is complete, and the exit code."""
   454         return self._resolve(True, dfile, wctx, labels=labels)
   469         complete, r, action = self._resolve(True, dfile, wctx, labels=labels)
       
   470         return complete, r
   455 
   471 
   456     def resolve(self, dfile, wctx, labels=None):
   472     def resolve(self, dfile, wctx, labels=None):
   457         """run merge process (assuming premerge was run) for dfile
   473         """run merge process (assuming premerge was run) for dfile
   458 
   474 
   459         Returns the exit code of the merge."""
   475         Returns the exit code of the merge."""
   460         return self._resolve(False, dfile, wctx, labels=labels)[1]
   476         complete, r, action = self._resolve(False, dfile, wctx, labels=labels)
       
   477         return r
   461 
   478 
   462 def _checkunknownfile(repo, wctx, mctx, f, f2=None):
   479 def _checkunknownfile(repo, wctx, mctx, f, f2=None):
   463     if f2 is None:
   480     if f2 is None:
   464         f2 = f
   481         f2 = f
   465     return (os.path.isfile(repo.wjoin(f))
   482     return (os.path.isfile(repo.wjoin(f))