topic: centralize compatibility logic between hg versions into compat module
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Sun, 10 Sep 2017 22:41:54 +0900
changeset 2922 66357d4d03b2
parent 2921 23c9600607e7
child 2923 8c2d3c474fc6
topic: centralize compatibility logic between hg versions into compat module This patch can delay loading obsutil and obsolete modules until they are actually used at "hg topics" or so, if demandimport of Mercurial is enabled.
hgext3rd/topic/__init__.py
hgext3rd/topic/compat.py
hgext3rd/topic/evolvebits.py
--- a/hgext3rd/topic/__init__.py	Mon Sep 11 17:24:33 2017 +0200
+++ b/hgext3rd/topic/__init__.py	Sun Sep 10 22:41:54 2017 +0900
@@ -79,6 +79,7 @@
 )
 
 from . import (
+    compat,
     constants,
     revset as topicrevset,
     destination,
@@ -727,16 +728,6 @@
             fm.plain('\n')
     fm.end()
 
-getmarkers = None
-try:
-    from mercurial import obsutil
-    getmarkers = getattr(obsutil, 'getmarkers', None)
-except ImportError:
-    pass
-
-if getmarkers is None:
-    getmarkers = obsolete.getmarkers
-
 def _getlasttouched(repo, topics):
     """
     Calculates the last time a topic was used. Returns a dictionary of seconds
@@ -758,7 +749,7 @@
                 maxtime = rt
             # looking on the markers also to get more information and accurate
             # last touch time.
-            obsmarkers = getmarkers(repo, [repo[revs].node()])
+            obsmarkers = compat.getmarkers(repo, [repo[revs].node()])
             for marker in obsmarkers:
                 rt = marker.date()
                 if rt[0] > maxtime[0]:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext3rd/topic/compat.py	Sun Sep 10 22:41:54 2017 +0900
@@ -0,0 +1,24 @@
+# Copyright 2017 FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+"""
+Compatibility module
+"""
+from __future__ import absolute_import
+
+from mercurial import obsolete
+
+getmarkers = None
+successorssets = None
+try:
+    from mercurial import obsutil
+    getmarkers = getattr(obsutil, 'getmarkers', None)
+    successorssets = getattr(obsutil, 'successorssets', None)
+except ImportError:
+    pass
+
+if getmarkers is None:
+    getmarkers = obsolete.getmarkers
+if successorssets is None:
+    successorssets = obsolete.successorssets
--- a/hgext3rd/topic/evolvebits.py	Mon Sep 11 17:24:33 2017 +0200
+++ b/hgext3rd/topic/evolvebits.py	Sun Sep 10 22:41:54 2017 +0900
@@ -1,15 +1,6 @@
 import collections
-from mercurial import obsolete
 
-successorssets = None
-try:
-    from mercurial import obsutil
-    successorssets = getattr(obsutil, 'successorssets', None)
-except ImportError:
-    pass
-
-if successorssets is None:
-    successorssets = obsolete.successorssets
+from . import compat
 
 # Copied from evolve 081605c2e9b6
 
@@ -82,14 +73,14 @@
         return p.rev()
     obs = repo[p]
     ui = repo.ui
-    newer = successorssets(repo, obs.node())
+    newer = compat.successorssets(repo, obs.node())
     # search of a parent which is not killed
     while not newer:
         ui.debug("stabilize target %s is plain dead,"
                  " trying to stabilize on its parent\n" %
                  obs)
         obs = obs.parents()[0]
-        newer = successorssets(repo, obs.node())
+        newer = compat.successorssets(repo, obs.node())
     if len(newer) > 1 or len(newer[0]) > 1:
         raise MultipleSuccessorsError(newer)