demandimport: fix
issue579 and add a test
fix suggested by Brendan
--- a/mercurial/demandimport.py Mon Jun 18 17:49:56 2007 -0500
+++ b/mercurial/demandimport.py Mon Jun 18 19:43:26 2007 -0500
@@ -61,7 +61,10 @@
if locals and locals.get(head) == self:
locals[head] = mod
object.__setattr__(self, "_module", mod)
+
def __repr__(self):
+ if self._module:
+ return "<proxied module '%s'>" % self._data[0]
return "<unloaded module '%s'>" % self._data[0]
def __call__(self, *args, **kwargs):
raise TypeError("'unloaded module' object is not callable")
@@ -102,7 +105,7 @@
for x in fromlist:
# set requested submodules for demand load
if not(hasattr(mod, x)):
- setattr(mod, x, _demandmod(x, mod.__dict__, mod.__dict__))
+ setattr(mod, x, _demandmod(x, mod.__dict__, locals))
return mod
ignore = ['_hashlib', '_xmlplus', 'fcntl', 'win32com.gen_py']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-demandimport Mon Jun 18 19:43:26 2007 -0500
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+
+from mercurial import demandimport
+demandimport.enable()
+
+import re
+
+rsub = re.sub
+def f(obj):
+ l = repr(obj)
+ l = rsub("0x[0-9a-f]+", "0x?", l)
+ l = rsub("from '.*'", "from '?'", l)
+ return l
+
+import os
+
+print "os =", f(os)
+print "os.system =", f(os.system)
+print "os =", f(os)
+
+import mercurial.version
+
+print "mercurial.version =", f(mercurial.version)
+print "mercurial.version.get_version =", f(mercurial.version.get_version)
+print "mercurial.version =", f(mercurial.version)
+print "mercurial =", f(mercurial)
+
+from mercurial import util
+
+print "util =", f(util)
+print "util.system =", f(util.system)
+print "util =", f(util)
+print "util.system =", f(util.system)
+
+import re as fred
+print "fred =", f(fred)
+
+import sys as re
+print "re =", f(re)
+
+print "fred =", f(fred)
+print "fred.sub =", f(fred.sub)
+print "fred =", f(fred)
+
+print "re =", f(re)
+print "re.stdout =", f(re.stdout)
+print "re =", f(re)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-demandimport.out Mon Jun 18 19:43:26 2007 -0500
@@ -0,0 +1,19 @@
+os = <unloaded module 'os'>
+os.system = <built-in function system>
+os = <module 'os' from '?'>
+mercurial.version = <unloaded module 'version'>
+mercurial.version.get_version = <function get_version at 0x?>
+mercurial.version = <module 'mercurial.version' from '?'>
+mercurial = <module 'mercurial' from '?'>
+util = <unloaded module 'util'>
+util.system = <function system at 0x?>
+util = <module 'mercurial.util' from '?'>
+util.system = <function system at 0x?>
+fred = <unloaded module 're'>
+re = <unloaded module 'sys'>
+fred = <unloaded module 're'>
+fred.sub = <function sub at 0x?>
+fred = <proxied module 're'>
+re = <unloaded module 'sys'>
+re.stdout = <open file '<stdout>', mode 'w' at 0x?>
+re = <proxied module 'sys'>