Mercurial > public > mercurial-scm > hg
comparison mercurial/packagescan.py @ 2322:685597676a13
packagescan: handle demandload module naming changes.
author | Volker Kleinfeld <Volker.Kleinfeld@gmx.de> |
---|---|
date | Fri, 19 May 2006 08:51:58 -0700 |
parents | 7f12a63568ae |
children | c4ea7f927dab |
comparison
equal
deleted
inserted
replaced
2298:4be9a79b49b1 | 2322:685597676a13 |
---|---|
8 import glob | 8 import glob |
9 import os | 9 import os |
10 import sys | 10 import sys |
11 import demandload | 11 import demandload |
12 import ihooks | 12 import ihooks |
13 import types | |
14 import string | |
13 | 15 |
14 requiredmodules = {} # Will contain the modules imported by demandload | 16 requiredmodules = {} # Will contain the modules imported by demandload |
15 def demandload(scope, modules): | 17 def demandload(scope, modules): |
16 """ fake demandload function that collects the required modules """ | 18 """ fake demandload function that collects the required modules |
19 foo import foo | |
20 foo bar import foo, bar | |
21 foo.bar import foo.bar | |
22 foo:bar from foo import bar | |
23 foo:bar,quux from foo import bar, quux | |
24 foo.bar:quux from foo.bar import quux""" | |
25 | |
17 for m in modules.split(): | 26 for m in modules.split(): |
18 mod = None | 27 mod = None |
19 try: | 28 try: |
20 module, submodules = m.split(':') | 29 module, fromlist = m.split(':') |
21 submodules = submodules.split(',') | 30 fromlist = fromlist.split(',') |
22 except: | 31 except: |
23 module = m | 32 module = m |
24 submodules = [] | 33 fromlist = [] |
25 mod = __import__(module, scope, scope, submodules) | 34 mod = __import__(module, scope, scope, fromlist) |
26 scope[module] = mod | 35 if fromlist == []: |
27 requiredmodules[mod.__name__] = 1 | 36 # mod is only the top package, but we need all packages |
37 comp = module.split('.') | |
38 i = 1 | |
39 mn = comp[0] | |
40 while True: | |
41 # mn and mod.__name__ might not be the same | |
42 scope[mn] = mod | |
43 requiredmodules[mod.__name__] = 1 | |
44 if len(comp) == i: break | |
45 mod = getattr(mod,comp[i]) | |
46 mn = string.join(comp[:i+1],'.') | |
47 i += 1 | |
48 else: | |
49 # mod is the last package in the component list | |
50 requiredmodules[mod.__name__] = 1 | |
51 for f in fromlist: | |
52 scope[f] = getattr(mod,f) | |
53 if type(scope[f]) == types.ModuleType: | |
54 requiredmodules[scope[f].__name__] = 1 | |
28 | 55 |
29 def getmodules(libpath,packagename): | 56 def getmodules(libpath,packagename): |
30 """ helper for finding all required modules of package <packagename> """ | 57 """ helper for finding all required modules of package <packagename> """ |
31 # Use the package in the build directory | 58 # Use the package in the build directory |
32 libpath = os.path.abspath(libpath) | 59 libpath = os.path.abspath(libpath) |