--- a/mercurial/hook.py Mon Jul 25 14:59:55 2011 -0500
+++ b/mercurial/hook.py Mon Jul 25 16:24:37 2011 -0500
@@ -21,7 +21,7 @@
ui.note(_("calling hook %s: %s\n") % (hname, funcname))
obj = funcname
- if not hasattr(obj, '__call__'):
+ if not util.safehasattr(obj, '__call__'):
d = funcname.rfind('.')
if d == -1:
raise util.Abort(_('%s hook is invalid ("%s" not in '
@@ -60,7 +60,7 @@
raise util.Abort(_('%s hook is invalid '
'("%s" is not defined)') %
(hname, funcname))
- if not hasattr(obj, '__call__'):
+ if not util.safehasattr(obj, '__call__'):
raise util.Abort(_('%s hook is invalid '
'("%s" is not callable)') %
(hname, funcname))
@@ -99,7 +99,7 @@
env = {}
for k, v in args.iteritems():
- if hasattr(v, '__call__'):
+ if util.safehasattr(v, '__call__'):
v = v()
if isinstance(v, dict):
# make the dictionary element order stable across Python
@@ -145,7 +145,7 @@
for hname, cmd in ui.configitems('hooks'):
if hname.split('.')[0] != name or not cmd:
continue
- if hasattr(cmd, '__call__'):
+ if util.safehasattr(cmd, '__call__'):
r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r
elif cmd.startswith('python:'):
if cmd.count(':') >= 2: