# HG changeset patch # User Augie Fackler # Date 1311629077 18000 # Node ID d3bb825ddae3d86f9f8a826918555df9c4ba3b55 # Parent 5b072d4b62f29a00fd5572806a6ac1c8aabe8ff3 globally: use safehasattr(x, '__call__') instead of hasattr(x, '__call__') diff -r 5b072d4b62f2 -r d3bb825ddae3 doc/gendoc.py --- a/doc/gendoc.py Mon Jul 25 14:59:55 2011 -0500 +++ b/doc/gendoc.py Mon Jul 25 16:24:37 2011 -0500 @@ -9,6 +9,7 @@ from mercurial.i18n import _ from mercurial.help import helptable from mercurial import extensions +from mercurial import util def get_desc(docstr): if not docstr: @@ -95,7 +96,7 @@ ui.write(".. _%s:\n" % name) ui.write("\n") section(ui, sec) - if hasattr(doc, '__call__'): + if util.safehasattr(doc, '__call__'): doc = doc() ui.write(doc) ui.write("\n") diff -r 5b072d4b62f2 -r d3bb825ddae3 hgext/mq.py --- a/hgext/mq.py Mon Jul 25 14:59:55 2011 -0500 +++ b/hgext/mq.py Mon Jul 25 16:24:37 2011 -0500 @@ -938,7 +938,7 @@ p.write("# User " + user + "\n") if date: p.write("# Date %s %s\n\n" % date) - if hasattr(msg, '__call__'): + if util.safehasattr(msg, '__call__'): msg = msg() commitmsg = msg and msg or ("[mq]: %s" % patchfn) n = repo.commit(commitmsg, user, date, match=match, force=True) diff -r 5b072d4b62f2 -r d3bb825ddae3 mercurial/commands.py --- a/mercurial/commands.py Mon Jul 25 14:59:55 2011 -0500 +++ b/mercurial/commands.py Mon Jul 25 16:24:37 2011 -0500 @@ -2732,7 +2732,7 @@ # description if not doc: doc = _("(no help text available)") - if hasattr(doc, '__call__'): + if util.safehasattr(doc, '__call__'): doc = doc() ui.write("%s\n\n" % header) diff -r 5b072d4b62f2 -r d3bb825ddae3 mercurial/extensions.py --- a/mercurial/extensions.py Mon Jul 25 14:59:55 2011 -0500 +++ b/mercurial/extensions.py Mon Jul 25 16:24:37 2011 -0500 @@ -124,7 +124,7 @@ where orig is the original (wrapped) function, and *args, **kwargs are the arguments passed to it. ''' - assert hasattr(wrapper, '__call__') + assert util.safehasattr(wrapper, '__call__') aliases, entry = cmdutil.findcmd(command, table) for alias, e in table.iteritems(): if e is entry: @@ -177,12 +177,12 @@ your end users, you should play nicely with others by using the subclass trick. ''' - assert hasattr(wrapper, '__call__') + assert util.safehasattr(wrapper, '__call__') def wrap(*args, **kwargs): return wrapper(origfn, *args, **kwargs) origfn = getattr(container, funcname) - assert hasattr(origfn, '__call__') + assert util.safehasattr(origfn, '__call__') setattr(container, funcname, wrap) return origfn diff -r 5b072d4b62f2 -r d3bb825ddae3 mercurial/fancyopts.py --- a/mercurial/fancyopts.py Mon Jul 25 14:59:55 2011 -0500 +++ b/mercurial/fancyopts.py Mon Jul 25 16:24:37 2011 -0500 @@ -75,7 +75,7 @@ # copy defaults to state if isinstance(default, list): state[name] = default[:] - elif hasattr(default, '__call__'): + elif getattr(default, '__call__', False): state[name] = None else: state[name] = default diff -r 5b072d4b62f2 -r d3bb825ddae3 mercurial/hook.py --- 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: diff -r 5b072d4b62f2 -r d3bb825ddae3 mercurial/templater.py --- a/mercurial/templater.py Mon Jul 25 14:59:55 2011 -0500 +++ b/mercurial/templater.py Mon Jul 25 16:24:37 2011 -0500 @@ -135,7 +135,7 @@ v = mapping.get(key) if v is None: v = context._defaults.get(key, '') - if hasattr(v, '__call__'): + if util.safehasattr(v, '__call__'): return v(**mapping) return v