hgext/rebase.py
changeset 37038 7db86856f27f
parent 37037 bd0086bd3af4
child 37039 7616073a4cf1
equal deleted inserted replaced
37037:bd0086bd3af4 37038:7db86856f27f
   447         if commitmsg is None:
   447         if commitmsg is None:
   448             commitmsg = ctx.description()
   448             commitmsg = ctx.description()
   449         extra = {'rebase_source': ctx.hex()}
   449         extra = {'rebase_source': ctx.hex()}
   450         for c in self.extrafns:
   450         for c in self.extrafns:
   451             c(ctx, extra)
   451             c(ctx, extra)
       
   452         keepbranch = self.keepbranchesf and repo[p1].branch() != ctx.branch()
   452         if self.inmemory:
   453         if self.inmemory:
   453             newnode = concludememorynode(repo, ctx, p1, p2,
   454             newnode = concludememorynode(repo, ctx, p1, p2,
   454                 wctx=self.wctx,
   455                 wctx=self.wctx,
   455                 extra=extra,
   456                 extra=extra,
   456                 commitmsg=commitmsg,
   457                 commitmsg=commitmsg,
   457                 editor=editor,
   458                 editor=editor,
   458                 keepbranches=self.keepbranchesf,
   459                 keepbranch=keepbranch,
   459                 date=self.date)
   460                 date=self.date)
   460             mergemod.mergestate.clean(repo)
   461             mergemod.mergestate.clean(repo)
   461         else:
   462         else:
   462             newnode = concludenode(repo, ctx, p1, p2,
   463             newnode = concludenode(repo, ctx, p1, p2,
   463                 extra=extra,
   464                 extra=extra,
   464                 commitmsg=commitmsg,
   465                 commitmsg=commitmsg,
   465                 editor=editor,
   466                 editor=editor,
   466                 keepbranches=self.keepbranchesf,
   467                 keepbranch=keepbranch,
   467                 date=self.date)
   468                 date=self.date)
   468 
   469 
   469         if newnode is None:
   470         if newnode is None:
   470             # If it ended up being a no-op commit, then the normal
   471             # If it ended up being a no-op commit, then the normal
   471             # merge state clean-up path doesn't happen, so do it
   472             # merge state clean-up path doesn't happen, so do it
  1021     raise error.Abort(_('unable to collapse on top of %d, there is more '
  1022     raise error.Abort(_('unable to collapse on top of %d, there is more '
  1022                        'than one external parent: %s') %
  1023                        'than one external parent: %s') %
  1023                      (max(destancestors),
  1024                      (max(destancestors),
  1024                       ', '.join("%d" % p for p in sorted(parents))))
  1025                       ', '.join("%d" % p for p in sorted(parents))))
  1025 
  1026 
  1026 def concludememorynode(repo, ctx, p1, p2, wctx, editor, extra, keepbranches,
  1027 def concludememorynode(repo, ctx, p1, p2, wctx, editor, extra, keepbranch,
  1027                        date, commitmsg):
  1028                        date, commitmsg):
  1028     '''Commit the memory changes with parents p1 and p2. Reuse commit info from
  1029     '''Commit the memory changes with parents p1 and p2. Reuse commit info from
  1029     ctx.
  1030     ctx.
  1030     Return node of committed revision.'''
  1031     Return node of committed revision.'''
  1031     keepbranch = keepbranches and repo[p1].branch() != ctx.branch()
       
  1032 
       
  1033     destphase = max(ctx.phase(), phases.draft)
  1032     destphase = max(ctx.phase(), phases.draft)
  1034     overrides = {('phases', 'new-commit'): destphase}
  1033     overrides = {('phases', 'new-commit'): destphase}
  1035     if keepbranch:
  1034     if keepbranch:
  1036         overrides[('ui', 'allowemptycommit')] = True
  1035         overrides[('ui', 'allowemptycommit')] = True
  1037     with repo.ui.configoverride(overrides, 'rebase'):
  1036     with repo.ui.configoverride(overrides, 'rebase'):
  1052             extra=extra, user=ctx.user(), branch=branch, editor=editor)
  1051             extra=extra, user=ctx.user(), branch=branch, editor=editor)
  1053         commitres = repo.commitctx(memctx)
  1052         commitres = repo.commitctx(memctx)
  1054         wctx.clean() # Might be reused
  1053         wctx.clean() # Might be reused
  1055         return commitres
  1054         return commitres
  1056 
  1055 
  1057 def concludenode(repo, ctx, p1, p2, editor, extra, keepbranches, date,
  1056 def concludenode(repo, ctx, p1, p2, editor, extra, keepbranch, date,
  1058                  commitmsg):
  1057                  commitmsg):
  1059     '''Commit the wd changes with parents p1 and p2. Reuse commit info from ctx.
  1058     '''Commit the wd changes with parents p1 and p2. Reuse commit info from ctx.
  1060     Return node of committed revision.'''
  1059     Return node of committed revision.'''
  1061     dsguard = util.nullcontextmanager()
  1060     dsguard = util.nullcontextmanager()
  1062     if not repo.ui.configbool('rebase', 'singletransaction'):
  1061     if not repo.ui.configbool('rebase', 'singletransaction'):
  1063         dsguard = dirstateguard.dirstateguard(repo, 'rebase')
  1062         dsguard = dirstateguard.dirstateguard(repo, 'rebase')
  1064     with dsguard:
  1063     with dsguard:
  1065         repo.setparents(repo[p1].node(), repo[p2].node())
  1064         repo.setparents(repo[p1].node(), repo[p2].node())
  1066         keepbranch = keepbranches and repo[p1].branch() != ctx.branch()
       
  1067 
  1065 
  1068         destphase = max(ctx.phase(), phases.draft)
  1066         destphase = max(ctx.phase(), phases.draft)
  1069         overrides = {('phases', 'new-commit'): destphase}
  1067         overrides = {('phases', 'new-commit'): destphase}
  1070         if keepbranch:
  1068         if keepbranch:
  1071             overrides[('ui', 'allowemptycommit')] = True
  1069             overrides[('ui', 'allowemptycommit')] = True