##// END OF EJS Templates
rebase: move rebase finish logic to be a method of the RR class...
Kostia Balytskyi -
r29478:007da669 default
parent child Browse files
Show More
@@ -423,6 +423,93 b' class rebaseruntime(object):'
423 423 ui.progress(_('rebasing'), None)
424 424 ui.note(_('rebase merging completed\n'))
425 425
426 def _finishrebase(self):
427 repo, ui, opts = self.repo, self.ui, self.opts
428 if self.collapsef and not self.keepopen:
429 p1, p2, _base = defineparents(repo, min(self.state),
430 self.target, self.state,
431 self.targetancestors,
432 self.obsoletenotrebased)
433 editopt = opts.get('edit')
434 editform = 'rebase.collapse'
435 if self.collapsemsg:
436 commitmsg = self.collapsemsg
437 else:
438 commitmsg = 'Collapsed revision'
439 for rebased in self.state:
440 if rebased not in self.skipped and\
441 self.state[rebased] > nullmerge:
442 commitmsg += '\n* %s' % repo[rebased].description()
443 editopt = True
444 editor = cmdutil.getcommiteditor(edit=editopt, editform=editform)
445 revtoreuse = self.sortedstate[-1]
446 newnode = concludenode(repo, revtoreuse, p1, self.external,
447 commitmsg=commitmsg,
448 extrafn=self.extrafn, editor=editor,
449 keepbranches=self.keepbranchesf,
450 date=self.date)
451 if newnode is None:
452 newrev = self.target
453 else:
454 newrev = repo[newnode].rev()
455 for oldrev in self.state.iterkeys():
456 if self.state[oldrev] > nullmerge:
457 self.state[oldrev] = newrev
458
459 if 'qtip' in repo.tags():
460 updatemq(repo, self.state, self.skipped, **opts)
461
462 if self.currentbookmarks:
463 # Nodeids are needed to reset bookmarks
464 nstate = {}
465 for k, v in self.state.iteritems():
466 if v > nullmerge:
467 nstate[repo[k].node()] = repo[v].node()
468 elif v == revprecursor:
469 succ = self.obsoletenotrebased[k]
470 nstate[repo[k].node()] = repo[succ].node()
471 # XXX this is the same as dest.node() for the non-continue path --
472 # this should probably be cleaned up
473 targetnode = repo[self.target].node()
474
475 # restore original working directory
476 # (we do this before stripping)
477 newwd = self.state.get(self.originalwd, self.originalwd)
478 if newwd == revprecursor:
479 newwd = self.obsoletenotrebased[self.originalwd]
480 elif newwd < 0:
481 # original directory is a parent of rebase set root or ignored
482 newwd = self.originalwd
483 if newwd not in [c.rev() for c in repo[None].parents()]:
484 ui.note(_("update back to initial working directory parent\n"))
485 hg.updaterepo(repo, newwd, False)
486
487 if not self.keepf:
488 collapsedas = None
489 if self.collapsef:
490 collapsedas = newnode
491 clearrebased(ui, repo, self.state, self.skipped, collapsedas)
492
493 with repo.transaction('bookmark') as tr:
494 if self.currentbookmarks:
495 updatebookmarks(repo, targetnode, nstate,
496 self.currentbookmarks, tr)
497 if self.activebookmark not in repo._bookmarks:
498 # active bookmark was divergent one and has been deleted
499 self.activebookmark = None
500 clearstatus(repo)
501 clearcollapsemsg(repo)
502
503 ui.note(_("rebase completed\n"))
504 util.unlinkpath(repo.sjoin('undo'), ignoremissing=True)
505 if self.skipped:
506 skippedlen = len(self.skipped)
507 ui.note(_("%d revisions have been skipped\n") % skippedlen)
508
509 if (self.activebookmark and
510 repo['.'].node() == repo._bookmarks[self.activebookmark]):
511 bookmarks.activate(repo, self.activebookmark)
512
426 513 @command('rebase',
427 514 [('s', 'source', '',
428 515 _('rebase the specified changeset and descendants'), _('REV')),
@@ -588,92 +675,7 b' def rebase(ui, repo, **opts):'
588 675 return retcode
589 676
590 677 rbsrt._performrebase()
591
592 if rbsrt.collapsef and not rbsrt.keepopen:
593 p1, p2, _base = defineparents(repo, min(rbsrt.state),
594 rbsrt.target, rbsrt.state,
595 rbsrt.targetancestors,
596 rbsrt.obsoletenotrebased)
597 editopt = opts.get('edit')
598 editform = 'rebase.collapse'
599 if rbsrt.collapsemsg:
600 commitmsg = rbsrt.collapsemsg
601 else:
602 commitmsg = 'Collapsed revision'
603 for rebased in rbsrt.state:
604 if rebased not in rbsrt.skipped and\
605 rbsrt.state[rebased] > nullmerge:
606 commitmsg += '\n* %s' % repo[rebased].description()
607 editopt = True
608 editor = cmdutil.getcommiteditor(edit=editopt, editform=editform)
609 revtoreuse = rbsrt.sortedstate[-1]
610 newnode = concludenode(repo, revtoreuse, p1, rbsrt.external,
611 commitmsg=commitmsg,
612 extrafn=rbsrt.extrafn, editor=editor,
613 keepbranches=rbsrt.keepbranchesf,
614 date=rbsrt.date)
615 if newnode is None:
616 newrev = rbsrt.target
617 else:
618 newrev = repo[newnode].rev()
619 for oldrev in rbsrt.state.iterkeys():
620 if rbsrt.state[oldrev] > nullmerge:
621 rbsrt.state[oldrev] = newrev
622
623 if 'qtip' in repo.tags():
624 updatemq(repo, rbsrt.state, rbsrt.skipped, **opts)
625
626 if rbsrt.currentbookmarks:
627 # Nodeids are needed to reset bookmarks
628 nstate = {}
629 for k, v in rbsrt.state.iteritems():
630 if v > nullmerge:
631 nstate[repo[k].node()] = repo[v].node()
632 elif v == revprecursor:
633 succ = rbsrt.obsoletenotrebased[k]
634 nstate[repo[k].node()] = repo[succ].node()
635 # XXX this is the same as dest.node() for the non-continue path --
636 # this should probably be cleaned up
637 targetnode = repo[rbsrt.target].node()
638
639 # restore original working directory
640 # (we do this before stripping)
641 newwd = rbsrt.state.get(rbsrt.originalwd, rbsrt.originalwd)
642 if newwd == revprecursor:
643 newwd = rbsrt.obsoletenotrebased[rbsrt.originalwd]
644 elif newwd < 0:
645 # original directory is a parent of rebase set root or ignored
646 newwd = rbsrt.originalwd
647 if newwd not in [c.rev() for c in repo[None].parents()]:
648 ui.note(_("update back to initial working directory parent\n"))
649 hg.updaterepo(repo, newwd, False)
650
651 if not rbsrt.keepf:
652 collapsedas = None
653 if rbsrt.collapsef:
654 collapsedas = newnode
655 clearrebased(ui, repo, rbsrt.state, rbsrt.skipped, collapsedas)
656
657 with repo.transaction('bookmark') as tr:
658 if rbsrt.currentbookmarks:
659 updatebookmarks(repo, targetnode, nstate,
660 rbsrt.currentbookmarks, tr)
661 if rbsrt.activebookmark not in repo._bookmarks:
662 # active bookmark was divergent one and has been deleted
663 rbsrt.activebookmark = None
664 clearstatus(repo)
665 clearcollapsemsg(repo)
666
667 ui.note(_("rebase completed\n"))
668 util.unlinkpath(repo.sjoin('undo'), ignoremissing=True)
669 if rbsrt.skipped:
670 skippedlen = len(rbsrt.skipped)
671 ui.note(_("%d revisions have been skipped\n") % skippedlen)
672
673 if (rbsrt.activebookmark and
674 repo['.'].node() == repo._bookmarks[rbsrt.activebookmark]):
675 bookmarks.activate(repo, rbsrt.activebookmark)
676
678 rbsrt._finishrebase()
677 679 finally:
678 680 release(lock, wlock)
679 681
General Comments 0
You need to be logged in to leave comments. Login now