mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 07:17:55 +03:00
hook: raise a separate exception for when loading a hook fails
For easier catching.
This commit is contained in:
parent
15ac94d01f
commit
d01bcde561
@ -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
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user