452 '''Commit the wd changes with parents p1 and p2. |
452 '''Commit the wd changes with parents p1 and p2. |
453 |
453 |
454 Reuse commit info from rev but also store useful information in extra. |
454 Reuse commit info from rev but also store useful information in extra. |
455 Return node of committed revision.''' |
455 Return node of committed revision.''' |
456 repo = self.repo |
456 repo = self.repo |
|
457 ctx = repo[rev] |
457 if self.inmemory: |
458 if self.inmemory: |
458 newnode = concludememorynode(repo, rev, p1, p2, |
459 newnode = concludememorynode(repo, ctx, p1, p2, |
459 wctx=self.wctx, |
460 wctx=self.wctx, |
460 extrafn=_makeextrafn(self.extrafns), |
461 extrafn=_makeextrafn(self.extrafns), |
461 commitmsg=commitmsg, |
462 commitmsg=commitmsg, |
462 editor=editor, |
463 editor=editor, |
463 keepbranches=self.keepbranchesf, |
464 keepbranches=self.keepbranchesf, |
464 date=self.date) |
465 date=self.date) |
465 mergemod.mergestate.clean(repo) |
466 mergemod.mergestate.clean(repo) |
466 else: |
467 else: |
467 newnode = concludenode(repo, rev, p1, p2, |
468 newnode = concludenode(repo, ctx, p1, p2, |
468 extrafn=_makeextrafn(self.extrafns), |
469 extrafn=_makeextrafn(self.extrafns), |
469 commitmsg=commitmsg, |
470 commitmsg=commitmsg, |
470 editor=editor, |
471 editor=editor, |
471 keepbranches=self.keepbranchesf, |
472 keepbranches=self.keepbranchesf, |
472 date=self.date) |
473 date=self.date) |
1026 raise error.Abort(_('unable to collapse on top of %d, there is more ' |
1027 raise error.Abort(_('unable to collapse on top of %d, there is more ' |
1027 'than one external parent: %s') % |
1028 'than one external parent: %s') % |
1028 (max(destancestors), |
1029 (max(destancestors), |
1029 ', '.join("%d" % p for p in sorted(parents)))) |
1030 ', '.join("%d" % p for p in sorted(parents)))) |
1030 |
1031 |
1031 def concludememorynode(repo, rev, p1, p2, wctx, editor, extrafn, keepbranches, |
1032 def concludememorynode(repo, ctx, p1, p2, wctx, editor, extrafn, keepbranches, |
1032 date, commitmsg=None): |
1033 date, commitmsg=None): |
1033 '''Commit the memory changes with parents p1 and p2. Reuse commit info from |
1034 '''Commit the memory changes with parents p1 and p2. Reuse commit info from |
1034 rev but also store useful information in extra. |
1035 ctx but also store useful information in extra. |
1035 Return node of committed revision.''' |
1036 Return node of committed revision.''' |
1036 ctx = repo[rev] |
|
1037 if commitmsg is None: |
1037 if commitmsg is None: |
1038 commitmsg = ctx.description() |
1038 commitmsg = ctx.description() |
1039 keepbranch = keepbranches and repo[p1].branch() != ctx.branch() |
1039 keepbranch = keepbranches and repo[p1].branch() != ctx.branch() |
1040 extra = {'rebase_source': ctx.hex()} |
1040 extra = {'rebase_source': ctx.hex()} |
1041 if extrafn: |
1041 if extrafn: |
1063 extra=extra, user=ctx.user(), branch=branch, editor=editor) |
1063 extra=extra, user=ctx.user(), branch=branch, editor=editor) |
1064 commitres = repo.commitctx(memctx) |
1064 commitres = repo.commitctx(memctx) |
1065 wctx.clean() # Might be reused |
1065 wctx.clean() # Might be reused |
1066 return commitres |
1066 return commitres |
1067 |
1067 |
1068 def concludenode(repo, rev, p1, p2, editor, extrafn, keepbranches, date, |
1068 def concludenode(repo, ctx, p1, p2, editor, extrafn, keepbranches, date, |
1069 commitmsg=None): |
1069 commitmsg=None): |
1070 '''Commit the wd changes with parents p1 and p2. Reuse commit info from rev |
1070 '''Commit the wd changes with parents p1 and p2. Reuse commit info from ctx |
1071 but also store useful information in extra. |
1071 but also store useful information in extra. |
1072 Return node of committed revision.''' |
1072 Return node of committed revision.''' |
1073 dsguard = util.nullcontextmanager() |
1073 dsguard = util.nullcontextmanager() |
1074 if not repo.ui.configbool('rebase', 'singletransaction'): |
1074 if not repo.ui.configbool('rebase', 'singletransaction'): |
1075 dsguard = dirstateguard.dirstateguard(repo, 'rebase') |
1075 dsguard = dirstateguard.dirstateguard(repo, 'rebase') |
1076 with dsguard: |
1076 with dsguard: |
1077 repo.setparents(repo[p1].node(), repo[p2].node()) |
1077 repo.setparents(repo[p1].node(), repo[p2].node()) |
1078 ctx = repo[rev] |
|
1079 if commitmsg is None: |
1078 if commitmsg is None: |
1080 commitmsg = ctx.description() |
1079 commitmsg = ctx.description() |
1081 keepbranch = keepbranches and repo[p1].branch() != ctx.branch() |
1080 keepbranch = keepbranches and repo[p1].branch() != ctx.branch() |
1082 extra = {'rebase_source': ctx.hex()} |
1081 extra = {'rebase_source': ctx.hex()} |
1083 if extrafn: |
1082 if extrafn: |