mercurial/mergestate.py
changeset 48428 c25a67cfc291
parent 48427 38941a28406a
child 48429 f9bc36863923
equal deleted inserted replaced
48427:38941a28406a 48428:c25a67cfc291
   311 
   311 
   312     def extras(self, filename):
   312     def extras(self, filename):
   313         """return extras stored with the mergestate for the given filename"""
   313         """return extras stored with the mergestate for the given filename"""
   314         return self._stateextras[filename]
   314         return self._stateextras[filename]
   315 
   315 
   316     def _resolve(self, preresolve, dfile, wctx):
   316     def _resolve(self, dfile, wctx):
   317         """rerun merge process for file path `dfile`.
   317         """rerun merge process for file path `dfile`.
   318         Returns whether the merge was completed and the return value of merge
   318         Returns the return value of merge obtained from filemerge._filemerge().
   319         obtained from filemerge._filemerge().
       
   320         """
   319         """
   321         if self[dfile] in (
   320         if self[dfile] in (
   322             MERGE_RECORD_RESOLVED,
   321             MERGE_RECORD_RESOLVED,
   323             LEGACY_RECORD_DRIVER_RESOLVED,
   322             LEGACY_RECORD_DRIVER_RESOLVED,
   324         ):
   323         ):
   325             return True, 0
   324             return 0
   326         stateentry = self._state[dfile]
   325         stateentry = self._state[dfile]
   327         state, localkey, lfile, afile, anode, ofile, onode, flags = stateentry
   326         state, localkey, lfile, afile, anode, ofile, onode, flags = stateentry
   328         octx = self._repo[self._other]
   327         octx = self._repo[self._other]
   329         extras = self.extras(dfile)
   328         extras = self.extras(dfile)
   330         anccommitnode = extras.get(b'ancestorlinknode')
   329         anccommitnode = extras.get(b'ancestorlinknode')
   339         # "premerge" x flags
   338         # "premerge" x flags
   340         flo = fco.flags()
   339         flo = fco.flags()
   341         fla = fca.flags()
   340         fla = fca.flags()
   342         if b'x' in flags + flo + fla and b'l' not in flags + flo + fla:
   341         if b'x' in flags + flo + fla and b'l' not in flags + flo + fla:
   343             if fca.rev() == nullrev and flags != flo:
   342             if fca.rev() == nullrev and flags != flo:
   344                 if preresolve:
   343                 self._repo.ui.warn(
   345                     self._repo.ui.warn(
   344                     _(
   346                         _(
   345                         b'warning: cannot merge flags for %s '
   347                             b'warning: cannot merge flags for %s '
   346                         b'without common ancestor - keeping local flags\n'
   348                             b'without common ancestor - keeping local flags\n'
       
   349                         )
       
   350                         % afile
       
   351                     )
   347                     )
       
   348                     % afile
       
   349                 )
   352             elif flags == fla:
   350             elif flags == fla:
   353                 flags = flo
   351                 flags = flo
   354         if preresolve:
   352         # restore local
   355             # restore local
   353         if localkey != self._repo.nodeconstants.nullhex:
   356             if localkey != self._repo.nodeconstants.nullhex:
   354             self._restore_backup(wctx[dfile], localkey, flags)
   357                 self._restore_backup(wctx[dfile], localkey, flags)
   355         else:
   358             else:
   356             wctx[dfile].remove(ignoremissing=True)
   359                 wctx[dfile].remove(ignoremissing=True)
   357         complete, merge_ret, deleted = filemerge.premerge(
   360             complete, merge_ret, deleted = filemerge.premerge(
   358             self._repo,
   361                 self._repo,
   359             wctx,
   362                 wctx,
   360             self._local,
   363                 self._local,
   361             lfile,
   364                 lfile,
   362             fcd,
   365                 fcd,
   363             fco,
   366                 fco,
   364             fca,
   367                 fca,
   365             labels=self._labels,
   368                 labels=self._labels,
   366         )
   369             )
   367         if not complete:
   370         else:
       
   371             complete, merge_ret, deleted = filemerge.filemerge(
   368             complete, merge_ret, deleted = filemerge.filemerge(
   372                 self._repo,
   369                 self._repo,
   373                 wctx,
   370                 wctx,
   374                 self._local,
   371                 self._local,
   375                 lfile,
   372                 lfile,
   404                     else:
   401                     else:
   405                         action = ACTION_ADD
   402                         action = ACTION_ADD
   406                 # else: regular merges (no action necessary)
   403                 # else: regular merges (no action necessary)
   407             self._results[dfile] = merge_ret, action
   404             self._results[dfile] = merge_ret, action
   408 
   405 
   409         return complete, merge_ret
   406         return merge_ret
   410 
   407 
   411     def resolve(self, dfile, wctx):
   408     def resolve(self, dfile, wctx):
   412         """run merge process for dfile
   409         """run merge process for dfile
   413 
   410 
   414         Returns the exit code of the merge."""
   411         Returns the exit code of the merge."""
   415         complete, r = self._resolve(True, dfile, wctx)
   412         return self._resolve(dfile, wctx)
   416         if not complete:
       
   417             r = self._resolve(False, dfile, wctx)[1]
       
   418         return r
       
   419 
   413 
   420     def counts(self):
   414     def counts(self):
   421         """return counts for updated, merged and removed files in this
   415         """return counts for updated, merged and removed files in this
   422         session"""
   416         session"""
   423         updated, merged, removed = 0, 0, 0
   417         updated, merged, removed = 0, 0, 0