hook: raise a separate exception for when loading a hook fails
For easier catching.
--- a/mercurial/error.py Wed Oct 14 11:05:53 2015 -0700
+++ b/mercurial/error.py Mon Oct 12 18:49:23 2015 -0700
@@ -57,6 +57,12 @@
"""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
--- a/mercurial/hook.py Wed Oct 14 11:05:53 2015 -0700
+++ b/mercurial/hook.py Mon Oct 12 18:49:23 2015 -0700
@@ -35,8 +35,9 @@
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 @@
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()
--- a/tests/test-hook.t Wed Oct 14 11:05:53 2015 -0700
+++ b/tests/test-hook.t Mon Oct 12 18:49:23 2015 -0700
@@ -628,7 +628,7 @@
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