hgext/rebase.py
changeset 35480 01b084914a60
parent 35434 71446ca85813
child 35487 bf556bd2f589
equal deleted inserted replaced
35479:8d05705bde0a 35480:01b084914a60
   565                 editopt = True
   565                 editopt = True
   566             editor = cmdutil.getcommiteditor(edit=editopt, editform=editform)
   566             editor = cmdutil.getcommiteditor(edit=editopt, editform=editform)
   567             revtoreuse = max(self.state)
   567             revtoreuse = max(self.state)
   568 
   568 
   569             dsguard = None
   569             dsguard = None
   570             if ui.configbool('rebase', 'singletransaction'):
       
   571                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
       
   572             if self.inmemory:
   570             if self.inmemory:
   573                 newnode = concludememorynode(repo, revtoreuse, p1,
   571                 newnode = concludememorynode(repo, revtoreuse, p1,
   574                     self.external,
   572                     self.external,
   575                     commitmsg=commitmsg,
   573                     commitmsg=commitmsg,
   576                     extrafn=_makeextrafn(self.extrafns),
   574                     extrafn=_makeextrafn(self.extrafns),
   577                     editor=editor,
   575                     editor=editor,
   578                     keepbranches=self.keepbranchesf,
   576                     keepbranches=self.keepbranchesf,
   579                     date=self.date, wctx=self.wctx)
   577                     date=self.date, wctx=self.wctx)
   580             else:
   578             else:
       
   579                 if ui.configbool('rebase', 'singletransaction'):
       
   580                     dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   581                 with util.acceptintervention(dsguard):
   581                 with util.acceptintervention(dsguard):
   582                     newnode = concludenode(repo, revtoreuse, p1, self.external,
   582                     newnode = concludenode(repo, revtoreuse, p1, self.external,
   583                         commitmsg=commitmsg,
   583                         commitmsg=commitmsg,
   584                         extrafn=_makeextrafn(self.extrafns),
   584                         extrafn=_makeextrafn(self.extrafns),
   585                         editor=editor,
   585                         editor=editor,
   849         dsguard = None
   849         dsguard = None
   850 
   850 
   851         singletr = ui.configbool('rebase', 'singletransaction')
   851         singletr = ui.configbool('rebase', 'singletransaction')
   852         if singletr:
   852         if singletr:
   853             tr = repo.transaction('rebase')
   853             tr = repo.transaction('rebase')
       
   854 
       
   855         # If `rebase.singletransaction` is enabled, wrap the entire operation in
       
   856         # one transaction here. Otherwise, transactions are obtained when
       
   857         # committing each node, which is slower but allows partial success.
   854         with util.acceptintervention(tr):
   858         with util.acceptintervention(tr):
   855             if singletr:
   859             # Same logic for the dirstate guard, except we don't create one when
       
   860             # rebasing in-memory (it's not needed).
       
   861             if singletr and not inmemory:
   856                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   862                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   857             with util.acceptintervention(dsguard):
   863             with util.acceptintervention(dsguard):
   858                 rbsrt._performrebase(tr)
   864                 rbsrt._performrebase(tr)
   859 
   865 
   860         rbsrt._finishrebase()
   866         rbsrt._finishrebase()
  1030                       ', '.join(str(p) for p in sorted(parents))))
  1036                       ', '.join(str(p) for p in sorted(parents))))
  1031 
  1037 
  1032 def concludememorynode(repo, rev, p1, p2, wctx=None,
  1038 def concludememorynode(repo, rev, p1, p2, wctx=None,
  1033                        commitmsg=None, editor=None, extrafn=None,
  1039                        commitmsg=None, editor=None, extrafn=None,
  1034                        keepbranches=False, date=None):
  1040                        keepbranches=False, date=None):
  1035     '''Commit the wd changes with parents p1 and p2. Reuse commit info from rev
  1041     '''Commit the memory changes with parents p1 and p2. Reuse commit info from
  1036     but also store useful information in extra.
  1042     rev but also store useful information in extra.
  1037     Return node of committed revision.'''
  1043     Return node of committed revision.'''
  1038     ctx = repo[rev]
  1044     ctx = repo[rev]
  1039     if commitmsg is None:
  1045     if commitmsg is None:
  1040         commitmsg = ctx.description()
  1046         commitmsg = ctx.description()
  1041     keepbranch = keepbranches and repo[p1].branch() != ctx.branch()
  1047     keepbranch = keepbranches and repo[p1].branch() != ctx.branch()