hgext/rebase.py
changeset 35317 5c25fe7fb1e6
parent 35316 259feddc04e6
child 35318 2bac2d836ce0
equal deleted inserted replaced
35316:259feddc04e6 35317:5c25fe7fb1e6
   505                         # merge state clean-up path doesn't happen, so do it
   505                         # merge state clean-up path doesn't happen, so do it
   506                         # here. Fix issue5494
   506                         # here. Fix issue5494
   507                         mergemod.mergestate.clean(repo)
   507                         mergemod.mergestate.clean(repo)
   508                 else:
   508                 else:
   509                     # Skip commit if we are collapsing
   509                     # Skip commit if we are collapsing
   510                     repo.setparents(repo[p1].node())
   510                     if self.wctx.isinmemory():
       
   511                         self.wctx.setbase(repo[p1])
       
   512                     else:
       
   513                         repo.setparents(repo[p1].node())
   511                     newnode = None
   514                     newnode = None
   512                 # Update the state
   515                 # Update the state
   513                 if newnode is not None:
   516                 if newnode is not None:
   514                     self.state[rev] = repo[newnode].rev()
   517                     self.state[rev] = repo[newnode].rev()
   515                     ui.debug('rebased as %s\n' % short(newnode))
   518                     ui.debug('rebased as %s\n' % short(newnode))
   568         # (we do this before stripping)
   571         # (we do this before stripping)
   569         newwd = self.state.get(self.originalwd, self.originalwd)
   572         newwd = self.state.get(self.originalwd, self.originalwd)
   570         if newwd < 0:
   573         if newwd < 0:
   571             # original directory is a parent of rebase set root or ignored
   574             # original directory is a parent of rebase set root or ignored
   572             newwd = self.originalwd
   575             newwd = self.originalwd
   573         if newwd not in [c.rev() for c in repo[None].parents()]:
   576         if (newwd not in [c.rev() for c in repo[None].parents()] and
       
   577                 not self.inmemory):
   574             ui.note(_("update back to initial working directory parent\n"))
   578             ui.note(_("update back to initial working directory parent\n"))
   575             hg.updaterepo(repo, newwd, False)
   579             hg.updaterepo(repo, newwd, False)
   576 
   580 
   577         collapsedas = None
   581         collapsedas = None
   578         if not self.keepf:
   582         if not self.keepf:
   994 
   998 
   995 def rebasenode(repo, rev, p1, base, state, collapse, dest, wctx):
   999 def rebasenode(repo, rev, p1, base, state, collapse, dest, wctx):
   996     'Rebase a single revision rev on top of p1 using base as merge ancestor'
  1000     'Rebase a single revision rev on top of p1 using base as merge ancestor'
   997     # Merge phase
  1001     # Merge phase
   998     # Update to destination and merge it with local
  1002     # Update to destination and merge it with local
   999     if repo['.'].rev() != p1:
  1003     if wctx.isinmemory():
  1000         repo.ui.debug(" update to %d:%s\n" % (p1, repo[p1]))
  1004         wctx.setbase(repo[p1])
  1001         mergemod.update(repo, p1, False, True)
       
  1002     else:
  1005     else:
  1003         repo.ui.debug(" already in destination\n")
  1006         # This is necessary to invalidate workingctx's caches.
  1004     repo.dirstate.write(repo.currenttransaction())
  1007         wctx = repo[None]
       
  1008         if repo['.'].rev() != p1:
       
  1009             repo.ui.debug(" update to %d:%s\n" % (p1, repo[p1]))
       
  1010             mergemod.update(repo, p1, False, True)
       
  1011         else:
       
  1012             repo.ui.debug(" already in destination\n")
       
  1013         repo.dirstate.write(repo.currenttransaction())
  1005     repo.ui.debug(" merge against %d:%s\n" % (rev, repo[rev]))
  1014     repo.ui.debug(" merge against %d:%s\n" % (rev, repo[rev]))
  1006     if base is not None:
  1015     if base is not None:
  1007         repo.ui.debug("   detach base %d:%s\n" % (base, repo[base]))
  1016         repo.ui.debug("   detach base %d:%s\n" % (base, repo[base]))
  1008     # When collapsing in-place, the parent is the common ancestor, we
  1017     # When collapsing in-place, the parent is the common ancestor, we
  1009     # have to allow merging with it.
  1018     # have to allow merging with it.
  1010     wctx = repo[None]
       
  1011     stats = mergemod.update(repo, rev, True, True, base, collapse,
  1019     stats = mergemod.update(repo, rev, True, True, base, collapse,
  1012                             labels=['dest', 'source'])
  1020                             labels=['dest', 'source'])
  1013     if collapse:
  1021     if collapse:
  1014         copies.duplicatecopies(repo, wctx, rev, dest)
  1022         copies.duplicatecopies(repo, wctx, rev, dest)
  1015     else:
  1023     else: