[PATCH 16 of 16] rebase: move new rebase preparation to a rebase runtime object method

Kostia Balytskyi ikostia at fb.com
Sun May 29 18:38:47 EDT 2016


# HG changeset patch
# User Kostia Balytskyi <ikostia at fb.com>
# Date 1464553809 -3600
#      Sun May 29 21:30:09 2016 +0100
# Node ID 424f2dac39b226b9eca74e070290cb3ce939fa88
# Parent  53d5ffc14360e0feb3d86bf5596b9fb5c6520bab
rebase: move new rebase preparation to a rebase runtime object method

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -298,6 +298,60 @@
             _checkobsrebase(self.repo, self.ui, rebaseobsrevs, rebasesetrevs,
                             rebaseobsskipped)
 
+    def _preparenewrebase(self):
+        dest, rebaseset = _definesets(self.ui, self.repo, self.destf, self.srcf,
+                                      self.basef, self.revf,
+                                      destspace=self.destspace)
+        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')),
@@ -421,58 +475,9 @@
             if retcode is not None:
                 return retcode
         else:
-            dest, rebaseset = _definesets(ui, repo, rtstate.destf, rtstate.srcf,
-                                          rtstate.basef, rtstate.revf,
-                                          destspace=rtstate.destspace)
-            if dest is None:
-                return _nothingtorebase()
-
-            allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt)
-            if (not (rtstate.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'))
-
-            rtstate.obsoletenotrebased = {}
-            if ui.configbool('experimental', 'rebaseskipobsolete',
-                             default=True):
-                rebasesetrevs = set(rebaseset)
-                rebaseobsrevs = _filterobsoleterevs(repo, rebasesetrevs)
-                rtstate.obsoletenotrebased = _computeobsoletenotrebased(repo,
-                                                                rebaseobsrevs,
-                                                                dest)
-                rebaseobsskipped = set(rtstate.obsoletenotrebased)
-                _checkobsrebase(repo, ui, rebaseobsrevs,
-                                              rebasesetrevs,
-                                              rebaseobsskipped)
-
-            result = buildstate(repo, dest, rebaseset, rtstate.collapsef,
-                                rtstate.obsoletenotrebased)
-
-            if not result:
-                # Empty state built, nothing to rebase
-                ui.status(_('nothing to rebase\n'))
-                return _nothingtorebase()
-
-            root = min(rebaseset)
-            if not rtstate.keepf and not repo[root].mutable():
-                raise error.Abort(_("can't rebase public changeset %s")
-                                 % repo[root],
-                                 hint=_('see "hg help phases" for details'))
-
-            (rtstate.originalwd, rtstate.target, rtstate.state) = result
-            if rtstate.collapsef:
-                rtstate.targetancestors = repo.changelog.ancestors(
-                                            [rtstate.target],
-                                            inclusive=True)
-                rtstate.external = externalparent(repo, rtstate.state,
-                                                  rtstate.targetancestors)
-
-            if dest.closesbranch() and not rtstate.keepbranchesf:
-                ui.status(_('reopening closed branch head %s\n') % dest)
+            retcode = rtstate._preparenewrebase()
+            if retcode is not None:
+                return retcode
 
         if rtstate.keepbranchesf:
             # insert _savebranch at the start of extrafns so if


More information about the Mercurial-devel mailing list