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() |