hgext/rebase.py
changeset 33619 609606d21765
parent 33590 52f82e7d6a7e
child 33736 86aca74a063b
equal deleted inserted replaced
33610:658524d45af0 33619:609606d21765
   477                        self.state[rebased] > nullmerge:
   477                        self.state[rebased] > nullmerge:
   478                         commitmsg += '\n* %s' % repo[rebased].description()
   478                         commitmsg += '\n* %s' % repo[rebased].description()
   479                 editopt = True
   479                 editopt = True
   480             editor = cmdutil.getcommiteditor(edit=editopt, editform=editform)
   480             editor = cmdutil.getcommiteditor(edit=editopt, editform=editform)
   481             revtoreuse = max(self.state)
   481             revtoreuse = max(self.state)
   482             newnode = concludenode(repo, revtoreuse, p1, self.external,
   482 
   483                                    commitmsg=commitmsg,
   483             dsguard = None
   484                                    extrafn=_makeextrafn(self.extrafns),
   484             if ui.configbool('rebase', 'singletransaction'):
   485                                    editor=editor,
   485                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   486                                    keepbranches=self.keepbranchesf,
   486             with util.acceptintervention(dsguard):
   487                                    date=self.date)
   487                 newnode = concludenode(repo, revtoreuse, p1, self.external,
       
   488                                        commitmsg=commitmsg,
       
   489                                        extrafn=_makeextrafn(self.extrafns),
       
   490                                        editor=editor,
       
   491                                        keepbranches=self.keepbranchesf,
       
   492                                        date=self.date)
   488             if newnode is None:
   493             if newnode is None:
   489                 newrev = self.dest
   494                 newrev = self.dest
   490             else:
   495             else:
   491                 newrev = repo[newnode].rev()
   496                 newrev = repo[newnode].rev()
   492             for oldrev in self.state.iterkeys():
   497             for oldrev in self.state.iterkeys():
   709             retcode = rbsrt._preparenewrebase(dest, rebaseset)
   714             retcode = rbsrt._preparenewrebase(dest, rebaseset)
   710             if retcode is not None:
   715             if retcode is not None:
   711                 return retcode
   716                 return retcode
   712 
   717 
   713         tr = None
   718         tr = None
   714         if ui.configbool('rebase', 'singletransaction'):
   719         dsguard = None
       
   720 
       
   721         singletr = ui.configbool('rebase', 'singletransaction')
       
   722         if singletr:
   715             tr = repo.transaction('rebase')
   723             tr = repo.transaction('rebase')
   716         with util.acceptintervention(tr):
   724         with util.acceptintervention(tr):
   717             rbsrt._performrebase(tr)
   725             if singletr:
       
   726                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
       
   727             with util.acceptintervention(dsguard):
       
   728                 rbsrt._performrebase(tr)
   718 
   729 
   719         rbsrt._finishrebase()
   730         rbsrt._finishrebase()
   720 
   731 
   721 def _definesets(ui, repo, destf=None, srcf=None, basef=None, revf=None,
   732 def _definesets(ui, repo, destf=None, srcf=None, basef=None, revf=None,
   722                 destspace=None):
   733                 destspace=None):
   839 def concludenode(repo, rev, p1, p2, commitmsg=None, editor=None, extrafn=None,
   850 def concludenode(repo, rev, p1, p2, commitmsg=None, editor=None, extrafn=None,
   840                  keepbranches=False, date=None):
   851                  keepbranches=False, date=None):
   841     '''Commit the wd changes with parents p1 and p2. Reuse commit info from rev
   852     '''Commit the wd changes with parents p1 and p2. Reuse commit info from rev
   842     but also store useful information in extra.
   853     but also store useful information in extra.
   843     Return node of committed revision.'''
   854     Return node of committed revision.'''
   844     dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   855     dsguard = util.nullcontextmanager()
   845     try:
   856     if not repo.ui.configbool('rebase', 'singletransaction'):
       
   857         dsguard = dirstateguard.dirstateguard(repo, 'rebase')
       
   858     with dsguard:
   846         repo.setparents(repo[p1].node(), repo[p2].node())
   859         repo.setparents(repo[p1].node(), repo[p2].node())
   847         ctx = repo[rev]
   860         ctx = repo[rev]
   848         if commitmsg is None:
   861         if commitmsg is None:
   849             commitmsg = ctx.description()
   862             commitmsg = ctx.description()
   850         keepbranch = keepbranches and repo[p1].branch() != ctx.branch()
   863         keepbranch = keepbranches and repo[p1].branch() != ctx.branch()
   862                 date = ctx.date()
   875                 date = ctx.date()
   863             newnode = repo.commit(text=commitmsg, user=ctx.user(),
   876             newnode = repo.commit(text=commitmsg, user=ctx.user(),
   864                                   date=date, extra=extra, editor=editor)
   877                                   date=date, extra=extra, editor=editor)
   865 
   878 
   866         repo.dirstate.setbranch(repo[newnode].branch())
   879         repo.dirstate.setbranch(repo[newnode].branch())
   867         dsguard.close()
       
   868         return newnode
   880         return newnode
   869     finally:
       
   870         release(dsguard)
       
   871 
   881 
   872 def rebasenode(repo, rev, p1, base, state, collapse, dest):
   882 def rebasenode(repo, rev, p1, base, state, collapse, dest):
   873     'Rebase a single revision rev on top of p1 using base as merge ancestor'
   883     'Rebase a single revision rev on top of p1 using base as merge ancestor'
   874     # Merge phase
   884     # Merge phase
   875     # Update to destination and merge it with local
   885     # Update to destination and merge it with local