demandimport: back out 50a4e55aa278 (issue2467) stable
authorMatt Mackall <mpm@selenic.com>
Sat, 30 Oct 2010 11:32:04 -0500
branchstable
changeset 12894 bc91a79fa3d0
parent 12893 15ca4bfecfe3
child 12895 53cfde2b3cf9
demandimport: back out 50a4e55aa278 (issue2467)
mercurial/demandimport.py
--- a/mercurial/demandimport.py	Sat Oct 30 02:47:35 2010 -0500
+++ b/mercurial/demandimport.py	Sat Oct 30 11:32:04 2010 -0500
@@ -29,35 +29,29 @@
 
 class _demandmod(object):
     """module demand-loader and proxy"""
-    def __init__(self, name, globals, locals, level):
+    def __init__(self, name, globals, locals):
         if '.' in name:
             head, rest = name.split('.', 1)
             after = [rest]
         else:
             head = name
             after = []
-        object.__setattr__(self, "_data", (head, globals, locals, after, level))
+        object.__setattr__(self, "_data", (head, globals, locals, after))
         object.__setattr__(self, "_module", None)
     def _extend(self, name):
         """add to the list of submodules to load"""
         self._data[3].append(name)
     def _load(self):
         if not self._module:
-            head, globals, locals, after, level = self._data
-            if level is not None:
-                mod = _origimport(head, globals, locals, level)
-            else:
-                mod = _origimport(head, globals, locals)
+            head, globals, locals, after = self._data
+            mod = _origimport(head, globals, locals)
             # load submodules
             def subload(mod, p):
                 h, t = p, None
                 if '.' in p:
                     h, t = p.split('.', 1)
                 if not hasattr(mod, h):
-                    # TODO: should we adjust the level here?
-                    submod = _demandmod(p, mod.__dict__, mod.__dict__,
-                                        level=level)
-                    setattr(mod, h, submod)
+                    setattr(mod, h, _demandmod(p, mod.__dict__, mod.__dict__))
                 elif t:
                     subload(getattr(mod, h), t)
 
@@ -97,36 +91,28 @@
             base, rest = name.split('.', 1)
             # email.__init__ loading email.mime
             if globals and globals.get('__name__', None) == base:
-                if level is not None:
-                    return _origimport(name, globals, locals, fromlist, level)
-                else:
-                    return _origimport(name, globals, locals, fromlist)
+                return _origimport(name, globals, locals, fromlist)
             # if a is already demand-loaded, add b to its submodule list
             if base in locals:
                 if isinstance(locals[base], _demandmod):
                     locals[base]._extend(rest)
                 return locals[base]
-        return _demandmod(name, globals, locals, level=level)
+        return _demandmod(name, globals, locals)
     else:
-        # from a import b,c,d
         if level is not None:
-            mod = _origimport(name, globals, locals, level=level)
-        else:
-            mod = _origimport(name, globals, locals)
+            # from . import b,c,d or from .a import b,c,d
+            return _origimport(name, globals, locals, fromlist, level)
+        # from a import b,c,d
+        mod = _origimport(name, globals, locals)
         # recurse down the module chain
         for comp in name.split('.')[1:]:
             if not hasattr(mod, comp):
-                # TODO: should we adjust the level here?
-                submod = _demandmod(comp, mod.__dict__, mod.__dict__,
-                                    level=level)
-                setattr(mod, comp, submod)
+                setattr(mod, comp, _demandmod(comp, mod.__dict__, mod.__dict__))
             mod = getattr(mod, comp)
         for x in fromlist:
             # set requested submodules for demand load
             if not(hasattr(mod, x)):
-                # TODO: should we adjust the level here?
-                submod = _demandmod(x, mod.__dict__, locals, level=level)
-                setattr(mod, x, submod)
+                setattr(mod, x, _demandmod(x, mod.__dict__, locals))
         return mod
 
 ignore = [