indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Previously, we tried to import a module and handle the ImportError.
  Our lazy module importer doesn't verify the module exists and returns
  a dummy object representing the module. Only once we attempt to load
  a symbol in the module does the ImportError get raises.
  
  This means that simple imports inside `try..except ImportError` don't
  detect missing modules.
  
  This commit changes imports in zope.interface to access symbols, thus
  forcing module load and triggering ImportError.
  
  This fixes zope.interface for pure builds.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2980

AFFECTED FILES
  mercurial/thirdparty/zope/interface/declarations.py

CHANGE DETAILS

diff --git a/mercurial/thirdparty/zope/interface/declarations.py 
b/mercurial/thirdparty/zope/interface/declarations.py
--- a/mercurial/thirdparty/zope/interface/declarations.py
+++ b/mercurial/thirdparty/zope/interface/declarations.py
@@ -640,12 +640,9 @@
 
 # Try to get C base:
 try:
-    from . import _zope_interface_coptimizations
+    from ._zope_interface_coptimizations import ClassProvidesBase
 except ImportError:
     pass
-else:
-    from ._zope_interface_coptimizations import ClassProvidesBase
-
 
 class ClassProvides(Declaration, ClassProvidesBase):
     """Special descriptor for class __provides__
@@ -917,15 +914,13 @@
 _empty = Declaration()
 
 try:
-    from . import _zope_interface_coptimizations
+    from ._zope_interface_coptimizations import (
+        getObjectSpecification,
+        implementedBy,
+        ObjectSpecificationDescriptor,
+        providedBy,
+    )
 except ImportError:
     pass
-else:
-    from ._zope_interface_coptimizations import implementedBy
-    from ._zope_interface_coptimizations import providedBy
-    from ._zope_interface_coptimizations import (
-        getObjectSpecification)
-    from ._zope_interface_coptimizations import (
-        ObjectSpecificationDescriptor)
 
 objectSpecificationDescriptor = ObjectSpecificationDescriptor()



To: indygreg, #hg-reviewers
Cc: mercurial-devel
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to