# HG changeset patch # User Augie Fackler # Date 1403529878 14400 # Node ID b009dd135aa0601155e196de892215832e0a1baa # Parent 8225bb1f0ad364a5ec42f0dd9df9b4e6c891e7e6 hook: restore use of callable() since it was readded in Python 3.2 diff -r 8225bb1f0ad3 -r b009dd135aa0 mercurial/hook.py --- a/mercurial/hook.py Mon Jun 23 09:24:24 2014 -0400 +++ b/mercurial/hook.py Mon Jun 23 09:24:38 2014 -0400 @@ -19,7 +19,7 @@ unmodified commands (e.g. mercurial.commands.update) can be run as hooks without wrappers to convert return values.''' - if util.safehasattr(funcname, '__call__'): + if callable(funcname): obj = funcname funcname = obj.__module__ + "." + obj.__name__ else: @@ -70,7 +70,7 @@ raise util.Abort(_('%s hook is invalid ' '("%s" is not defined)') % (hname, funcname)) - if not util.safehasattr(obj, '__call__'): + if not callable(obj): raise util.Abort(_('%s hook is invalid ' '("%s" is not callable)') % (hname, funcname)) @@ -117,7 +117,7 @@ starttime = time.time() env = {} for k, v in args.iteritems(): - if util.safehasattr(v, '__call__'): + if callable(v): v = v() if isinstance(v, dict): # make the dictionary element order stable across Python @@ -184,7 +184,7 @@ # files seem to be bogus, give up on redirecting (WSGI, etc) pass - if util.safehasattr(cmd, '__call__'): + if callable(cmd): r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r elif cmd.startswith('python:'): if cmd.count(':') >= 2: