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:
parent
f98541400b
commit
3802cab563
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user