[PATCH 23 of 23 v2] rebase: move handling of obsolete commits to a separate rebase runtime method

Kostia Balytskyi ikostia at fb.com
Tue May 31 19:23:43 EDT 2016


# HG changeset patch
# User Kostia Balytskyi <ikostia at fb.com>
# Date 1464616871 -3600
#      Mon May 30 15:01:11 2016 +0100
# Node ID 40fb0b98974b45b78f1b673953cba586cefe1e43
# Parent  3258b18e240aaa2b0190144fb2f27d3600b96c05
rebase: move handling of obsolete commits to a separate rebase runtime method

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -267,6 +267,24 @@
         self.external = external
         self.activebookmark = activebookmark
 
+    def _handleskippingobsolete(self, rebaserevs, obsoleterevs, target):
+        """Compute structures necessary for skipping obsolete revisions
+
+        rebaserevs:     iterable of all revisions that are to be rebased
+        obsoleterevs:   iterable of all obsolete revisions in rebaseset
+        target:         a destination revision for the rebase operation
+        """
+        self.obsoletenotrebased = {}
+        if not self.ui.configbool('experimental', 'rebaseskipobsolete',
+                                  default=True):
+            return
+        rebaseset = set(rebaserevs)
+        obsoleteset = set(obsoleterevs)
+        self.obsoletenotrebased = _computeobsoletenotrebased(self.repo,
+                                    obsoleteset, target)
+        skippedset = set(self.obsoletenotrebased)
+        _checkobsrebase(self.repo, self.ui, obsoleteset, rebaseset, skippedset)
+
     def _prepareabortorcontinue(self):
         try:
             self.restorestatus()
@@ -286,17 +304,8 @@
             return abort(self.repo, self.originalwd, self.target,
                          self.state, activebookmark=self.activebookmark)
 
-        self.obsoletenotrebased = {}
-        if self.ui.configbool('experimental', 'rebaseskipobsolete',
-                              default=True):
-            rebaseobsrevs = set([r for r, st in self.state.items()
-                                    if st == revprecursor])
-            rebasesetrevs = set(self.state.keys())
-            self.obsoletenotrebased = _computeobsoletenotrebased(self.repo,
-                                            rebaseobsrevs, self.target)
-            rebaseobsskipped = set(self.obsoletenotrebased)
-            _checkobsrebase(self.repo, self.ui, rebaseobsrevs, rebasesetrevs,
-                            rebaseobsskipped)
+        obsrevs = (r for r, st in self.state.items() if st == revprecursor)
+        self._handleskippingobsolete(self.state.keys(), obsrevs, self.target)
 
     def _preparenewrebase(self):
         dest, rebaseset = _definesets(self.ui, self.repo, self.destf, self.srcf,
@@ -314,18 +323,8 @@
                   " 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)
+        obsrevs = _filterobsoleterevs(self.repo, rebaseset)
+        self._handleskippingobsolete(rebaseset, obsrevs, dest)
 
         result = buildstate(self.repo, dest, rebaseset, self.collapsef,
                             self.obsoletenotrebased)


More information about the Mercurial-devel mailing list