equal
deleted
inserted
replaced
36 unmodified commands (e.g. mercurial.commands.update) can |
36 unmodified commands (e.g. mercurial.commands.update) can |
37 be run as hooks without wrappers to convert return values.''' |
37 be run as hooks without wrappers to convert return values.''' |
38 |
38 |
39 if callable(funcname): |
39 if callable(funcname): |
40 obj = funcname |
40 obj = funcname |
41 funcname = pycompat.sysbytes(obj.__module__ + r"." + obj.__name__) |
41 funcname = pycompat.sysbytes(obj.__module__ + "." + obj.__name__) |
42 else: |
42 else: |
43 d = funcname.rfind(b'.') |
43 d = funcname.rfind(b'.') |
44 if d == -1: |
44 if d == -1: |
45 raise error.HookLoadError( |
45 raise error.HookLoadError( |
46 _(b'%s hook is invalid: "%s" not in a module') |
46 _(b'%s hook is invalid: "%s" not in a module') |
59 obj = __import__(pycompat.sysstr(modname)) |
59 obj = __import__(pycompat.sysstr(modname)) |
60 except (ImportError, SyntaxError): |
60 except (ImportError, SyntaxError): |
61 e1 = sys.exc_info() |
61 e1 = sys.exc_info() |
62 try: |
62 try: |
63 # extensions are loaded with hgext_ prefix |
63 # extensions are loaded with hgext_ prefix |
64 obj = __import__(r"hgext_%s" % pycompat.sysstr(modname)) |
64 obj = __import__("hgext_%s" % pycompat.sysstr(modname)) |
65 except (ImportError, SyntaxError): |
65 except (ImportError, SyntaxError): |
66 e2 = sys.exc_info() |
66 e2 = sys.exc_info() |
67 if ui.tracebackflag: |
67 if ui.tracebackflag: |
68 ui.warn( |
68 ui.warn( |
69 _( |
69 _( |