33 # binary installs require sys.path manipulation |
33 # binary installs require sys.path manipulation |
34 modpath, modfile = os.path.split(modname) |
34 modpath, modfile = os.path.split(modname) |
35 if modpath and modfile: |
35 if modpath and modfile: |
36 sys.path = sys.path[:] + [modpath] |
36 sys.path = sys.path[:] + [modpath] |
37 modname = modfile |
37 modname = modfile |
38 demandimportenabled = demandimport.isenabled() |
38 with demandimport.deactivated(): |
39 if demandimportenabled: |
|
40 demandimport.disable() |
|
41 try: |
|
42 obj = __import__(modname) |
|
43 except ImportError: |
|
44 e1 = sys.exc_type, sys.exc_value, sys.exc_traceback |
|
45 try: |
39 try: |
46 # extensions are loaded with hgext_ prefix |
40 obj = __import__(modname) |
47 obj = __import__("hgext_%s" % modname) |
|
48 except ImportError: |
41 except ImportError: |
49 e2 = sys.exc_type, sys.exc_value, sys.exc_traceback |
42 e1 = sys.exc_type, sys.exc_value, sys.exc_traceback |
50 if ui.tracebackflag: |
43 try: |
51 ui.warn(_('exception from first failed import ' |
44 # extensions are loaded with hgext_ prefix |
52 'attempt:\n')) |
45 obj = __import__("hgext_%s" % modname) |
53 ui.traceback(e1) |
46 except ImportError: |
54 if ui.tracebackflag: |
47 e2 = sys.exc_type, sys.exc_value, sys.exc_traceback |
55 ui.warn(_('exception from second failed import ' |
48 if ui.tracebackflag: |
56 'attempt:\n')) |
49 ui.warn(_('exception from first failed import ' |
57 ui.traceback(e2) |
50 'attempt:\n')) |
58 raise util.Abort(_('%s hook is invalid ' |
51 ui.traceback(e1) |
59 '(import of "%s" failed)') % |
52 if ui.tracebackflag: |
60 (hname, modname)) |
53 ui.warn(_('exception from second failed import ' |
61 finally: |
54 'attempt:\n')) |
62 if demandimportenabled: |
55 ui.traceback(e2) |
63 demandimport.enable() |
56 raise util.Abort(_('%s hook is invalid ' |
|
57 '(import of "%s" failed)') % |
|
58 (hname, modname)) |
64 sys.path = oldpaths |
59 sys.path = oldpaths |
65 try: |
60 try: |
66 for p in funcname.split('.')[1:]: |
61 for p in funcname.split('.')[1:]: |
67 obj = getattr(obj, p) |
62 obj = getattr(obj, p) |
68 except AttributeError: |
63 except AttributeError: |