From 44df7f6351a5fb2ccd1efd0358a654265499d1ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Lebleu?= Date: Thu, 4 Dec 2014 18:45:20 +0100 Subject: [PATCH] [enh] Use hook_list and be more verbose in hook_callback --- hook.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/hook.py b/hook.py index d71accf0..127a7a2b 100644 --- a/hook.py +++ b/hook.py @@ -163,18 +163,31 @@ def hook_callback(action, args=None): args -- Ordered list of arguments to pass to the script """ - try: os.listdir(hook_folder + action) - except OSError: pass - else: - if args is None: - args = [] - elif not isinstance(args, list): - args = [args] + result = { 'succeed': list(), 'failed': list() } - for hook in sorted(os.listdir(hook_folder + action)): + # Retrieve hooks by priority + hooks = hook_list(action, list_by='priority', show_info=True)['hooks'] + if not hooks: + return result + + # Format arguments + if args is None: + args = [] + elif not isinstance(args, list): + args = [args] + + # Iterate over hooks and execute them + for priority in sorted(hooks): + for name, info in iter(hooks[priority].items()): try: - hook_exec(file=hook_folder + action +'/'+ hook, args=args) - except: pass + hook_exec(info['path'], args=args) + except: + logger.exception("error while executing hook '%s'", + info['path']) + result['failed'].append(name) + else: + result['succeed'].append(name) + return result def hook_check(file):