hook: raise a separate exception for when loading a hook fails

For easier catching.
This commit is contained in:
Siddharth Agarwal 2015-10-12 18:49:23 -07:00
parent 15ac94d01f
commit d01bcde561
3 changed files with 19 additions and 12 deletions

View File

@ -57,6 +57,12 @@ class Abort(HintException):
"""Raised if a command needs to print an error and exit."""
pass
class HookLoadError(Abort):
"""raised when loading a hook fails, aborting an operation
Exists to allow more specialized catching."""
pass
class HookAbort(Abort):
"""raised when a validation hook fails, aborting an operation

View File

@ -35,8 +35,9 @@ def _pythonhook(ui, repo, name, hname, funcname, args, throw):
else:
d = funcname.rfind('.')
if d == -1:
raise error.Abort(_('%s hook is invalid ("%s" not in '
'a module)') % (hname, funcname))
raise error.HookLoadError(
_('%s hook is invalid ("%s" not in a module)')
% (hname, funcname))
modname = funcname[:d]
oldpaths = sys.path
if util.mainfrozen():
@ -63,21 +64,21 @@ def _pythonhook(ui, repo, name, hname, funcname, args, throw):
ui.warn(_('exception from second failed import '
'attempt:\n'))
ui.traceback(e2)
raise error.Abort(_('%s hook is invalid '
'(import of "%s" failed)') %
(hname, modname))
raise error.HookLoadError(
_('%s hook is invalid (import of "%s" failed)') %
(hname, modname))
sys.path = oldpaths
try:
for p in funcname.split('.')[1:]:
obj = getattr(obj, p)
except AttributeError:
raise error.Abort(_('%s hook is invalid '
'("%s" is not defined)') %
(hname, funcname))
raise error.HookLoadError(
_('%s hook is invalid ("%s" is not defined)')
% (hname, funcname))
if not callable(obj):
raise error.Abort(_('%s hook is invalid '
'("%s" is not callable)') %
(hname, funcname))
raise error.HookLoadError(
_('%s hook is invalid ("%s" is not callable)')
% (hname, funcname))
ui.note(_("calling hook %s: %s\n") % (hname, funcname))
starttime = time.time()

View File

@ -628,7 +628,7 @@ make sure --traceback works on hook import failure
Traceback (most recent call last):
ImportError: No module named hgext_importfail
Traceback (most recent call last):
Abort: precommit.importfail hook is invalid (import of "importfail" failed)
HookLoadError: precommit.importfail hook is invalid (import of "importfail" failed)
abort: precommit.importfail hook is invalid (import of "importfail" failed)
Issue1827: Hooks Update & Commit not completely post operation