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 |