# HG changeset patch # User Siddharth Agarwal # Date 1444700963 25200 # Node ID 8d1cfd77b64fedadba87dac17d8ea7dce3161436 # Parent 23c0da28c0348a8d5bd4529d5dad2c7f5d2c3a30 hook: raise a separate exception for when loading a hook fails For easier catching. diff -r 23c0da28c034 -r 8d1cfd77b64f mercurial/error.py --- 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 diff -r 23c0da28c034 -r 8d1cfd77b64f mercurial/hook.py --- 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() diff -r 23c0da28c034 -r 8d1cfd77b64f tests/test-hook.t --- 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