mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
hg: explicitly check that peer lookup object has instance() if call failed
If a "thing" is callable but raises TypeError for some reason, a callable object would be returned. Thereafter, unfriendly traceback would be displayed: Traceback (most recent call last): ... File "mercurial/hg.pyc", line 119, in _peerorrepo obj = _peerlookup(path).instance(ui, path, create) AttributeError: 'function' object has no attribute 'instance' Instead, we should show the reason why "thing(path)" didn't work: Traceback (most recent call last): ... File "hggit/__init__.py", line 89, in _local p = urlcls(path).localpath() TypeError: 'NoneType' object is not callable If a "thing" is not callable, it must be a module or an object that implements instance(). If that module didn't have instance(), the error message would be "<unloaded module 'foo'> object is not callable". It doesn't make perfect sense, but it isn't so bad as it can blame which module went wrong.
This commit is contained in:
parent
8c4e6f9099
commit
1e094de1ee
@ -92,6 +92,10 @@ def _peerlookup(path):
|
||||
try:
|
||||
return thing(path)
|
||||
except TypeError:
|
||||
# we can't test callable(thing) because 'thing' can be an unloaded
|
||||
# module that implements __call__
|
||||
if not util.safehasattr(thing, 'instance'):
|
||||
raise
|
||||
return thing
|
||||
|
||||
def islocal(repo):
|
||||
|
Loading…
Reference in New Issue
Block a user