Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/hook.py @ 14943:d3bb825ddae3
globally: use safehasattr(x, '__call__') instead of hasattr(x, '__call__')
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Mon, 25 Jul 2011 16:24:37 -0500 |
parents | 4a28cb4df1f8 |
children | f6a737357195 |
comparison
equal
deleted
inserted
replaced
14942:5b072d4b62f2 | 14943:d3bb825ddae3 |
---|---|
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 hasattr(obj, '__call__'): | 24 if not util.safehasattr(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] |
58 obj = getattr(obj, p) | 58 obj = getattr(obj, p) |
59 except AttributeError: | 59 except AttributeError: |
60 raise util.Abort(_('%s hook is invalid ' | 60 raise util.Abort(_('%s hook is invalid ' |
61 '("%s" is not defined)') % | 61 '("%s" is not defined)') % |
62 (hname, funcname)) | 62 (hname, funcname)) |
63 if not hasattr(obj, '__call__'): | 63 if not util.safehasattr(obj, '__call__'): |
64 raise util.Abort(_('%s hook is invalid ' | 64 raise util.Abort(_('%s hook is invalid ' |
65 '("%s" is not callable)') % | 65 '("%s" is not callable)') % |
66 (hname, funcname)) | 66 (hname, funcname)) |
67 try: | 67 try: |
68 try: | 68 try: |
97 def _exthook(ui, repo, name, cmd, args, throw): | 97 def _exthook(ui, repo, name, cmd, args, throw): |
98 ui.note(_("running hook %s: %s\n") % (name, cmd)) | 98 ui.note(_("running hook %s: %s\n") % (name, cmd)) |
99 | 99 |
100 env = {} | 100 env = {} |
101 for k, v in args.iteritems(): | 101 for k, v in args.iteritems(): |
102 if hasattr(v, '__call__'): | 102 if util.safehasattr(v, '__call__'): |
103 v = v() | 103 v = v() |
104 if isinstance(v, dict): | 104 if isinstance(v, dict): |
105 # make the dictionary element order stable across Python | 105 # make the dictionary element order stable across Python |
106 # implementations | 106 # implementations |
107 v = ('{' + | 107 v = ('{' + |
143 | 143 |
144 try: | 144 try: |
145 for hname, cmd in ui.configitems('hooks'): | 145 for hname, cmd in ui.configitems('hooks'): |
146 if hname.split('.')[0] != name or not cmd: | 146 if hname.split('.')[0] != name or not cmd: |
147 continue | 147 continue |
148 if hasattr(cmd, '__call__'): | 148 if util.safehasattr(cmd, '__call__'): |
149 r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r | 149 r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r |
150 elif cmd.startswith('python:'): | 150 elif cmd.startswith('python:'): |
151 if cmd.count(':') >= 2: | 151 if cmd.count(':') >= 2: |
152 path, cmd = cmd[7:].rsplit(':', 1) | 152 path, cmd = cmd[7:].rsplit(':', 1) |
153 path = util.expandpath(path) | 153 path = util.expandpath(path) |