changeset 3018:66357d4d03b2

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.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Sun, 10 Sep 2017 22:41:54 +0900
parents 23c9600607e7
children 8c2d3c474fc6
files hgext3rd/topic/__init__.py hgext3rd/topic/compat.py hgext3rd/topic/evolvebits.py
diffstat 3 files changed, 29 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/hgext3rd/topic/__init__.py
+++ b/hgext3rd/topic/__init__.py
@@ -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]:
new file mode 100644
--- /dev/null
+++ b/hgext3rd/topic/compat.py
@@ -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
+++ b/hgext3rd/topic/evolvebits.py
@@ -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)