mercurial/merge.py
changeset 26617 dfd9811c5c9b
parent 26616 2f1fce0d4e86
child 26618 8e6d5b7317e6
equal deleted inserted replaced
26616:2f1fce0d4e86 26617:dfd9811c5c9b
   285 
   285 
   286         for f, entry in self._state.items():
   286         for f, entry in self._state.items():
   287             if entry[0] == 'u':
   287             if entry[0] == 'u':
   288                 yield f
   288                 yield f
   289 
   289 
   290     def _resolve(self, dfile, wctx, labels=None):
   290     def _resolve(self, preresolve, dfile, wctx, labels=None):
   291         """rerun merge process for file path `dfile`"""
   291         """rerun merge process for file path `dfile`"""
   292         if self[dfile] == 'r':
   292         if self[dfile] == 'r':
   293             return True, 0
   293             return True, 0
   294         stateentry = self._state[dfile]
   294         stateentry = self._state[dfile]
   295         state, hash, lfile, afile, anode, ofile, onode, flags = stateentry
   295         state, hash, lfile, afile, anode, ofile, onode, flags = stateentry
   300         # "premerge" x flags
   300         # "premerge" x flags
   301         flo = fco.flags()
   301         flo = fco.flags()
   302         fla = fca.flags()
   302         fla = fca.flags()
   303         if 'x' in flags + flo + fla and 'l' not in flags + flo + fla:
   303         if 'x' in flags + flo + fla and 'l' not in flags + flo + fla:
   304             if fca.node() == nullid:
   304             if fca.node() == nullid:
   305                 self._repo.ui.warn(_('warning: cannot merge flags for %s\n') %
   305                 if preresolve:
   306                                    afile)
   306                     self._repo.ui.warn(
       
   307                         _('warning: cannot merge flags for %s\n') % afile)
   307             elif flags == fla:
   308             elif flags == fla:
   308                 flags = flo
   309                 flags = flo
   309         # restore local
   310         if preresolve:
   310         f = self._repo.vfs('merge/' + hash)
   311             # restore local
   311         self._repo.wwrite(dfile, f.read(), flags)
   312             f = self._repo.vfs('merge/' + hash)
   312         f.close()
   313             self._repo.wwrite(dfile, f.read(), flags)
   313         complete, r = filemerge.premerge(self._repo, self._local, lfile, fcd,
   314             f.close()
   314                                          fco, fca, labels=labels)
   315             complete, r = filemerge.premerge(self._repo, self._local, lfile,
   315         if not complete:
   316                                              fcd, fco, fca, labels=labels)
       
   317         else:
   316             complete, r = filemerge.filemerge(self._repo, self._local, lfile,
   318             complete, r = filemerge.filemerge(self._repo, self._local, lfile,
   317                                               fcd, fco, fca, labels=labels)
   319                                               fcd, fco, fca, labels=labels)
   318         if r is None:
   320         if r is None:
   319             # no real conflict
   321             # no real conflict
   320             del self._state[dfile]
   322             del self._state[dfile]
   321             self._dirty = True
   323             self._dirty = True
   322         elif not r:
   324         elif not r:
   323             self.mark(dfile, 'r')
   325             self.mark(dfile, 'r')
   324         return complete, r
   326         return complete, r
   325 
   327 
       
   328     def preresolve(self, dfile, wctx, labels=None):
       
   329         return self._resolve(True, dfile, wctx, labels=labels)
       
   330 
   326     def resolve(self, dfile, wctx, labels=None):
   331     def resolve(self, dfile, wctx, labels=None):
   327         """rerun merge process for file path `dfile`"""
   332         """rerun merge process for file path `dfile`"""
   328         return self._resolve(dfile, wctx, labels=labels)[1]
   333         return self._resolve(False, dfile, wctx, labels=labels)[1]
   329 
   334 
   330 def _checkunknownfile(repo, wctx, mctx, f, f2=None):
   335 def _checkunknownfile(repo, wctx, mctx, f, f2=None):
   331     if f2 is None:
   336     if f2 is None:
   332         f2 = f
   337         f2 = f
   333     return (os.path.isfile(repo.wjoin(f))
   338     return (os.path.isfile(repo.wjoin(f))
   853         if f == '.hgsubstate': # subrepo states need updating
   858         if f == '.hgsubstate': # subrepo states need updating
   854             subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx),
   859             subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx),
   855                              overwrite)
   860                              overwrite)
   856             continue
   861             continue
   857         audit(f)
   862         audit(f)
   858         r = ms.resolve(f, wctx, labels=labels)
   863         complete, r = ms.preresolve(f, wctx, labels=labels)
       
   864         if not complete:
       
   865             r = ms.resolve(f, wctx, labels=labels)
   859         if r is not None and r > 0:
   866         if r is not None and r > 0:
   860             unresolved += 1
   867             unresolved += 1
   861         else:
   868         else:
   862             if r is None:
   869             if r is None:
   863                 updated += 1
   870                 updated += 1