1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-12-21 23:38:49 -05:00

Collect all triggered hooks before running them

Having a first pass that checks which hooks are triggered followed by a
second pass of the triggered hooks allows us to only provide output when
a hook is actually triggered.

Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Allan McRae 2015-12-14 12:40:26 +10:00
parent f98541400b
commit 3802cab563

View File

@ -610,7 +610,7 @@ static int _alpm_hook_run_hook(alpm_handle_t *handle, struct _alpm_hook_t *hook)
int _alpm_hook_run(alpm_handle_t *handle, enum _alpm_hook_when_t when)
{
alpm_list_t *i, *hooks = NULL;
alpm_list_t *i, *hooks = NULL, *hooks_triggered = NULL;
const char *suffix = ".hook";
size_t suflen = strlen(suffix);
int ret = 0;
@ -712,11 +712,20 @@ int _alpm_hook_run(alpm_handle_t *handle, enum _alpm_hook_when_t when)
for(i = hooks; i; i = i->next) {
struct _alpm_hook_t *hook = i->data;
if(hook && hook->when == when && _alpm_hook_triggered(handle, hook)) {
hooks_triggered = alpm_list_add(hooks_triggered, hook);
}
}
if(hooks_triggered != NULL) {
for(i = hooks_triggered; i; i = i->next) {
struct _alpm_hook_t *hook = i->data;
_alpm_log(handle, ALPM_LOG_DEBUG, "running hook %s\n", hook->name);
if(_alpm_hook_run_hook(handle, hook) != 0 && hook->abort_on_fail) {
ret = -1;
}
}
alpm_list_free(hooks_triggered);
}
cleanup: