445 ) |
445 ) |
446 for rev in sortedrevs: |
446 for rev in sortedrevs: |
447 self._rebasenode(tr, rev, allowdivergence, progress) |
447 self._rebasenode(tr, rev, allowdivergence, progress) |
448 ui.progress(_('rebasing'), None) |
448 ui.progress(_('rebasing'), None) |
449 ui.note(_('rebase merging completed\n')) |
449 ui.note(_('rebase merging completed\n')) |
|
450 |
|
451 def _concludenode(self, rev, p1, p2, editor, commitmsg=None): |
|
452 '''Commit the wd changes with parents p1 and p2. |
|
453 |
|
454 Reuse commit info from rev but also store useful information in extra. |
|
455 Return node of committed revision.''' |
|
456 repo = self.repo |
|
457 if self.inmemory: |
|
458 newnode = concludememorynode(repo, rev, p1, p2, |
|
459 wctx=self.wctx, |
|
460 extrafn=_makeextrafn(self.extrafns), |
|
461 commitmsg=commitmsg, |
|
462 editor=editor, |
|
463 keepbranches=self.keepbranchesf, |
|
464 date=self.date) |
|
465 mergemod.mergestate.clean(repo) |
|
466 else: |
|
467 newnode = concludenode(repo, rev, p1, p2, |
|
468 extrafn=_makeextrafn(self.extrafns), |
|
469 commitmsg=commitmsg, |
|
470 editor=editor, |
|
471 keepbranches=self.keepbranchesf, |
|
472 date=self.date) |
|
473 |
|
474 if newnode is None: |
|
475 # If it ended up being a no-op commit, then the normal |
|
476 # merge state clean-up path doesn't happen, so do it |
|
477 # here. Fix issue5494 |
|
478 mergemod.mergestate.clean(repo) |
|
479 return newnode |
450 |
480 |
451 def _rebasenode(self, tr, rev, allowdivergence, progressfn): |
481 def _rebasenode(self, tr, rev, allowdivergence, progressfn): |
452 repo, ui, opts = self.repo, self.ui, self.opts |
482 repo, ui, opts = self.repo, self.ui, self.opts |
453 dest = self.destmap[rev] |
483 dest = self.destmap[rev] |
454 ctx = repo[rev] |
484 ctx = repo[rev] |
501 if not self.collapsef: |
531 if not self.collapsef: |
502 merging = p2 != nullrev |
532 merging = p2 != nullrev |
503 editform = cmdutil.mergeeditform(merging, 'rebase') |
533 editform = cmdutil.mergeeditform(merging, 'rebase') |
504 editor = cmdutil.getcommiteditor(editform=editform, |
534 editor = cmdutil.getcommiteditor(editform=editform, |
505 **pycompat.strkwargs(opts)) |
535 **pycompat.strkwargs(opts)) |
506 if self.inmemory: |
536 newnode = self._concludenode(rev, p1, p2, editor) |
507 newnode = concludememorynode(repo, rev, p1, p2, |
|
508 wctx=self.wctx, |
|
509 extrafn=_makeextrafn(self.extrafns), |
|
510 editor=editor, |
|
511 keepbranches=self.keepbranchesf, |
|
512 date=self.date) |
|
513 mergemod.mergestate.clean(repo) |
|
514 else: |
|
515 newnode = concludenode(repo, rev, p1, p2, |
|
516 extrafn=_makeextrafn(self.extrafns), |
|
517 editor=editor, |
|
518 keepbranches=self.keepbranchesf, |
|
519 date=self.date) |
|
520 |
|
521 if newnode is None: |
|
522 # If it ended up being a no-op commit, then the normal |
|
523 # merge state clean-up path doesn't happen, so do it |
|
524 # here. Fix issue5494 |
|
525 mergemod.mergestate.clean(repo) |
|
526 else: |
537 else: |
527 # Skip commit if we are collapsing |
538 # Skip commit if we are collapsing |
528 if self.inmemory: |
539 if self.inmemory: |
529 self.wctx.setbase(repo[p1]) |
540 self.wctx.setbase(repo[p1]) |
530 else: |
541 else: |
570 commitmsg += '\n* %s' % repo[rebased].description() |
581 commitmsg += '\n* %s' % repo[rebased].description() |
571 editopt = True |
582 editopt = True |
572 editor = cmdutil.getcommiteditor(edit=editopt, editform=editform) |
583 editor = cmdutil.getcommiteditor(edit=editopt, editform=editform) |
573 revtoreuse = max(self.state) |
584 revtoreuse = max(self.state) |
574 |
585 |
575 if self.inmemory: |
586 newnode = self._concludenode(revtoreuse, p1, self.external, |
576 newnode = concludememorynode(repo, revtoreuse, p1, |
587 editor, commitmsg=commitmsg) |
577 self.external, |
588 |
578 commitmsg=commitmsg, |
|
579 extrafn=_makeextrafn(self.extrafns), |
|
580 editor=editor, |
|
581 keepbranches=self.keepbranchesf, |
|
582 date=self.date, wctx=self.wctx) |
|
583 else: |
|
584 newnode = concludenode(repo, revtoreuse, p1, self.external, |
|
585 commitmsg=commitmsg, |
|
586 extrafn=_makeextrafn(self.extrafns), |
|
587 editor=editor, |
|
588 keepbranches=self.keepbranchesf, |
|
589 date=self.date) |
|
590 |
|
591 if newnode is None: |
|
592 # If it ended up being a no-op commit, then the normal |
|
593 # merge state clean-up path doesn't happen, so do it |
|
594 # here. Fix issue5494 |
|
595 mergemod.mergestate.clean(repo) |
|
596 if newnode is not None: |
589 if newnode is not None: |
597 newrev = repo[newnode].rev() |
590 newrev = repo[newnode].rev() |
598 for oldrev in self.state: |
591 for oldrev in self.state: |
599 self.state[oldrev] = newrev |
592 self.state[oldrev] = newrev |
600 |
593 |