Mercurial > public > mercurial-scm > hg
comparison mercurial/packagescan.py @ 2325:c4ea7f927dab
merge with crew.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Fri, 19 May 2006 08:57:26 -0700 |
parents | c58a403aa830 685597676a13 |
children | 82cef38fea56 |
comparison
equal
deleted
inserted
replaced
2324:7cbe8cd69d6b | 2325:c4ea7f927dab |
---|---|
8 # of the GNU General Public License, incorporated herein by reference. | 8 # of the GNU General Public License, incorporated herein by reference. |
9 import glob | 9 import glob |
10 import os | 10 import os |
11 import sys | 11 import sys |
12 import ihooks | 12 import ihooks |
13 import types | |
14 import string | |
13 | 15 |
14 # Install this module as fake demandload module | 16 # Install this module as fake demandload module |
15 sys.modules['mercurial.demandload'] = sys.modules[__name__] | 17 sys.modules['mercurial.demandload'] = sys.modules[__name__] |
16 | 18 |
17 # Requiredmodules contains the modules imported by demandload. | 19 # Requiredmodules contains the modules imported by demandload. |
18 # Please note that demandload can be invoked before the | 20 # Please note that demandload can be invoked before the |
19 # mercurial.packagescan.scan method is invoked in case a mercurial | 21 # mercurial.packagescan.scan method is invoked in case a mercurial |
20 # module is imported. | 22 # module is imported. |
21 requiredmodules = {} | 23 requiredmodules = {} |
22 def demandload(scope, modules): | 24 def demandload(scope, modules): |
23 """ fake demandload function that collects the required modules """ | 25 """ fake demandload function that collects the required modules |
26 foo import foo | |
27 foo bar import foo, bar | |
28 foo.bar import foo.bar | |
29 foo:bar from foo import bar | |
30 foo:bar,quux from foo import bar, quux | |
31 foo.bar:quux from foo.bar import quux""" | |
32 | |
24 for m in modules.split(): | 33 for m in modules.split(): |
25 mod = None | 34 mod = None |
26 try: | 35 try: |
27 module, submodules = m.split(':') | 36 module, fromlist = m.split(':') |
28 submodules = submodules.split(',') | 37 fromlist = fromlist.split(',') |
29 except: | 38 except: |
30 module = m | 39 module = m |
31 submodules = [] | 40 fromlist = [] |
32 mod = __import__(module, scope, scope, submodules) | 41 mod = __import__(module, scope, scope, fromlist) |
33 scope[module] = mod | 42 if fromlist == []: |
34 requiredmodules[mod.__name__] = 1 | 43 # mod is only the top package, but we need all packages |
44 comp = module.split('.') | |
45 i = 1 | |
46 mn = comp[0] | |
47 while True: | |
48 # mn and mod.__name__ might not be the same | |
49 scope[mn] = mod | |
50 requiredmodules[mod.__name__] = 1 | |
51 if len(comp) == i: break | |
52 mod = getattr(mod,comp[i]) | |
53 mn = string.join(comp[:i+1],'.') | |
54 i += 1 | |
55 else: | |
56 # mod is the last package in the component list | |
57 requiredmodules[mod.__name__] = 1 | |
58 for f in fromlist: | |
59 scope[f] = getattr(mod,f) | |
60 if type(scope[f]) == types.ModuleType: | |
61 requiredmodules[scope[f].__name__] = 1 | |
35 | 62 |
36 def scan(libpath,packagename): | 63 def scan(libpath,packagename): |
37 """ helper for finding all required modules of package <packagename> """ | 64 """ helper for finding all required modules of package <packagename> """ |
38 # Use the package in the build directory | 65 # Use the package in the build directory |
39 libpath = os.path.abspath(libpath) | 66 libpath = os.path.abspath(libpath) |