mercurial/merge.py
changeset 27048 86290f6f6599
parent 27035 de7bf242644e
child 27049 0d61f7ec7f76
equal deleted inserted replaced
27047:e1458049dca5 27048:86290f6f6599
   412         if self[dfile] in 'rd':
   412         if self[dfile] in 'rd':
   413             return True, 0, None
   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 = self._filectxorabsent(hash, wctx, dfile)
   418         fco = octx[ofile]
   418         fco = self._filectxorabsent(onode, octx, ofile)
       
   419         # TODO: move this to filectxorabsent
   419         fca = self._repo.filectx(afile, fileid=anode)
   420         fca = self._repo.filectx(afile, fileid=anode)
   420         # "premerge" x flags
   421         # "premerge" x flags
   421         flo = fco.flags()
   422         flo = fco.flags()
   422         fla = fca.flags()
   423         fla = fca.flags()
   423         if 'x' in flags + flo + fla and 'l' not in flags + flo + fla:
   424         if 'x' in flags + flo + fla and 'l' not in flags + flo + fla:
   427                         _('warning: cannot merge flags for %s\n') % afile)
   428                         _('warning: cannot merge flags for %s\n') % afile)
   428             elif flags == fla:
   429             elif flags == fla:
   429                 flags = flo
   430                 flags = flo
   430         if preresolve:
   431         if preresolve:
   431             # restore local
   432             # restore local
   432             f = self._repo.vfs('merge/' + hash)
   433             if hash != nullhex:
   433             self._repo.wwrite(dfile, f.read(), flags)
   434                 f = self._repo.vfs('merge/' + hash)
   434             f.close()
   435                 self._repo.wwrite(dfile, f.read(), flags)
       
   436                 f.close()
       
   437             else:
       
   438                 self._repo.wvfs.unlinkpath(dfile, ignoremissing=True)
   435             complete, r, deleted = filemerge.premerge(self._repo, self._local,
   439             complete, r, deleted = filemerge.premerge(self._repo, self._local,
   436                                                       lfile, fcd, fco, fca,
   440                                                       lfile, fcd, fco, fca,
   437                                                       labels=labels)
   441                                                       labels=labels)
   438         else:
   442         else:
   439             complete, r, deleted = filemerge.filemerge(self._repo, self._local,
   443             complete, r, deleted = filemerge.filemerge(self._repo, self._local,
   459                 elif fco.isabsent(): # cd: local picked
   463                 elif fco.isabsent(): # cd: local picked
   460                     action = 'a'
   464                     action = 'a'
   461                 # else: regular merges (no action necessary)
   465                 # else: regular merges (no action necessary)
   462 
   466 
   463         return complete, r, action
   467         return complete, r, action
       
   468 
       
   469     def _filectxorabsent(self, hexnode, ctx, f):
       
   470         if hexnode == nullhex:
       
   471             return filemerge.absentfilectx(ctx, f)
       
   472         else:
       
   473             return ctx[f]
   464 
   474 
   465     def preresolve(self, dfile, wctx, labels=None):
   475     def preresolve(self, dfile, wctx, labels=None):
   466         """run premerge process for dfile
   476         """run premerge process for dfile
   467 
   477 
   468         Returns whether the merge is complete, and the exit code."""
   478         Returns whether the merge is complete, and the exit code."""