equal
deleted
inserted
replaced
19 unmodified commands (e.g. mercurial.commands.update) can |
19 unmodified commands (e.g. mercurial.commands.update) can |
20 be run as hooks without wrappers to convert return values.''' |
20 be run as hooks without wrappers to convert return values.''' |
21 |
21 |
22 ui.note(_("calling hook %s: %s\n") % (hname, funcname)) |
22 ui.note(_("calling hook %s: %s\n") % (hname, funcname)) |
23 obj = funcname |
23 obj = funcname |
24 if not callable(obj): |
24 if not hasattr(obj, '__call__'): |
25 d = funcname.rfind('.') |
25 d = funcname.rfind('.') |
26 if d == -1: |
26 if d == -1: |
27 raise util.Abort(_('%s hook is invalid ("%s" not in ' |
27 raise util.Abort(_('%s hook is invalid ("%s" not in ' |
28 'a module)') % (hname, funcname)) |
28 'a module)') % (hname, funcname)) |
29 modname = funcname[:d] |
29 modname = funcname[:d] |
42 obj = getattr(obj, p) |
42 obj = getattr(obj, p) |
43 except AttributeError: |
43 except AttributeError: |
44 raise util.Abort(_('%s hook is invalid ' |
44 raise util.Abort(_('%s hook is invalid ' |
45 '("%s" is not defined)') % |
45 '("%s" is not defined)') % |
46 (hname, funcname)) |
46 (hname, funcname)) |
47 if not callable(obj): |
47 if not hasattr(obj, '__call__'): |
48 raise util.Abort(_('%s hook is invalid ' |
48 raise util.Abort(_('%s hook is invalid ' |
49 '("%s" is not callable)') % |
49 '("%s" is not callable)') % |
50 (hname, funcname)) |
50 (hname, funcname)) |
51 try: |
51 try: |
52 r = obj(ui=ui, repo=repo, hooktype=name, **args) |
52 r = obj(ui=ui, repo=repo, hooktype=name, **args) |
72 def _exthook(ui, repo, name, cmd, args, throw): |
72 def _exthook(ui, repo, name, cmd, args, throw): |
73 ui.note(_("running hook %s: %s\n") % (name, cmd)) |
73 ui.note(_("running hook %s: %s\n") % (name, cmd)) |
74 |
74 |
75 env = {} |
75 env = {} |
76 for k, v in args.iteritems(): |
76 for k, v in args.iteritems(): |
77 if callable(v): |
77 if hasattr(v, '__call__'): |
78 v = v() |
78 v = v() |
79 env['HG_' + k.upper()] = v |
79 env['HG_' + k.upper()] = v |
80 |
80 |
81 if repo: |
81 if repo: |
82 cwd = repo.root |
82 cwd = repo.root |
105 |
105 |
106 try: |
106 try: |
107 for hname, cmd in ui.configitems('hooks'): |
107 for hname, cmd in ui.configitems('hooks'): |
108 if hname.split('.')[0] != name or not cmd: |
108 if hname.split('.')[0] != name or not cmd: |
109 continue |
109 continue |
110 if callable(cmd): |
110 if hasattr(cmd, '__call__'): |
111 r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r |
111 r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r |
112 elif cmd.startswith('python:'): |
112 elif cmd.startswith('python:'): |
113 if cmd.count(':') == 2: |
113 if cmd.count(':') == 2: |
114 path, cmd = cmd[7:].split(':') |
114 path, cmd = cmd[7:].split(':') |
115 mod = extensions.loadpath(path, 'hgkook.%s' % hname) |
115 mod = extensions.loadpath(path, 'hgkook.%s' % hname) |