diff -r f585ce6878e3 -r e25da98052a4 hgext/rebase.py --- a/hgext/rebase.py Fri Jul 01 14:09:53 2016 +0200 +++ b/hgext/rebase.py Fri Jul 01 14:09:53 2016 +0200 @@ -258,6 +258,57 @@ _checkobsrebase(self.repo, self.ui, rebaseobsrevs, rebasesetrevs, rebaseobsskipped) + def _preparenewrebase(self, dest, rebaseset): + if dest is None: + return _nothingtorebase() + + allowunstable = obsolete.isenabled(self.repo, obsolete.allowunstableopt) + if (not (self.keepf or allowunstable) + and self.repo.revs('first(children(%ld) - %ld)', + rebaseset, rebaseset)): + raise error.Abort( + _("can't remove original changesets with" + " unrebased descendants"), + hint=_('use --keep to keep original changesets')) + + self.obsoletenotrebased = {} + if self.ui.configbool('experimental', 'rebaseskipobsolete', + default=True): + rebasesetrevs = set(rebaseset) + rebaseobsrevs = _filterobsoleterevs(self.repo, rebasesetrevs) + self.obsoletenotrebased = _computeobsoletenotrebased(self.repo, + rebaseobsrevs, + dest) + rebaseobsskipped = set(self.obsoletenotrebased) + _checkobsrebase(self.repo, self.ui, rebaseobsrevs, + rebasesetrevs, + rebaseobsskipped) + + result = buildstate(self.repo, dest, rebaseset, self.collapsef, + self.obsoletenotrebased) + + if not result: + # Empty state built, nothing to rebase + self.ui.status(_('nothing to rebase\n')) + return _nothingtorebase() + + root = min(rebaseset) + if not self.keepf and not self.repo[root].mutable(): + raise error.Abort(_("can't rebase public changeset %s") + % self.repo[root], + hint=_('see "hg help phases" for details')) + + (self.originalwd, self.target, self.state) = result + if self.collapsef: + self.targetancestors = self.repo.changelog.ancestors( + [self.target], + inclusive=True) + self.external = externalparent(self.repo, self.state, + self.targetancestors) + + if dest.closesbranch() and not self.keepbranchesf: + self.ui.status(_('reopening closed branch head %s\n') % dest) + @command('rebase', [('s', 'source', '', _('rebase the specified changeset and descendants'), _('REV')), @@ -418,54 +469,9 @@ else: dest, rebaseset = _definesets(ui, repo, destf, srcf, basef, revf, destspace=destspace) - if dest is None: - return _nothingtorebase() - - allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) - if (not (rbsrt.keepf or allowunstable) - and repo.revs('first(children(%ld) - %ld)', - rebaseset, rebaseset)): - raise error.Abort( - _("can't remove original changesets with" - " unrebased descendants"), - hint=_('use --keep to keep original changesets')) - - rbsrt.obsoletenotrebased = {} - if ui.configbool('experimental', 'rebaseskipobsolete', - default=True): - rebasesetrevs = set(rebaseset) - rebaseobsrevs = _filterobsoleterevs(repo, rebasesetrevs) - rbsrt.obsoletenotrebased = _computeobsoletenotrebased(repo, - rebaseobsrevs, - dest) - rebaseobsskipped = set(rbsrt.obsoletenotrebased) - _checkobsrebase(repo, ui, rebaseobsrevs, - rebasesetrevs, - rebaseobsskipped) - - result = buildstate(repo, dest, rebaseset, rbsrt.collapsef, - rbsrt.obsoletenotrebased) - - if not result: - # Empty state built, nothing to rebase - ui.status(_('nothing to rebase\n')) - return _nothingtorebase() - - root = min(rebaseset) - if not rbsrt.keepf and not repo[root].mutable(): - raise error.Abort(_("can't rebase public changeset %s") - % repo[root], - hint=_('see "hg help phases" for details')) - - (rbsrt.originalwd, rbsrt.target, rbsrt.state) = result - if rbsrt.collapsef: - rbsrt.targetancestors = repo.changelog.ancestors([rbsrt.target], - inclusive=True) - rbsrt.external = externalparent(repo, rbsrt.state, - rbsrt.targetancestors) - - if dest.closesbranch() and not rbsrt.keepbranchesf: - ui.status(_('reopening closed branch head %s\n') % dest) + retcode = rbsrt._preparenewrebase(dest, rebaseset) + if retcode is not None: + return retcode if rbsrt.keepbranchesf: # insert _savebranch at the start of extrafns so if