alpm-hooks: add Description field

The "Description" field allows a hook to provide a some text for frontends
to use in describing what the hook is doing.  For example:

Description = updating info page directory

Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Allan McRae 2015-12-14 20:23:26 +10:00
parent 760bea5432
commit d721bae443
4 changed files with 14 additions and 1 deletions

View File

@ -19,6 +19,7 @@ Type = File|Package (Required)
Target = <Path|PkgName> (Required, Repeatable) Target = <Path|PkgName> (Required, Repeatable)
[Action] (Required) [Action] (Required)
Description = ... (Optional)
When = PreTransaction|PostTransaction (Required) When = PreTransaction|PostTransaction (Required)
Exec = <Command> (Required) Exec = <Command> (Required)
Depends = <PkgName> (Optional) Depends = <PkgName> (Optional)
@ -63,6 +64,10 @@ defined the hook will run if the transaction matches *any* of the triggers.
ACTIONS ACTIONS
------- -------
* Description =* ...::
An optional description that describes the action being taken by the
hook for use in front-end output.
*Exec =* <command>:: *Exec =* <command>::
Command to run. Command arguments are split on whitespace. Values Command to run. Command arguments are split on whitespace. Values
containing whitespace should be enclosed in quotes. Required. containing whitespace should be enclosed in quotes. Required.

View File

@ -568,6 +568,8 @@ typedef struct _alpm_event_hook_run_t {
alpm_event_type_t type; alpm_event_type_t type;
/** Name of hook */ /** Name of hook */
const char *name; const char *name;
/** Description of hook to be outputted */
const char *desc;
/** position of hook being run */ /** position of hook being run */
size_t position; size_t position;
/** total hooks being run */ /** total hooks being run */

View File

@ -48,6 +48,7 @@ struct _alpm_trigger_t {
struct _alpm_hook_t { struct _alpm_hook_t {
char *name; char *name;
char *desc;
alpm_list_t *triggers; alpm_list_t *triggers;
alpm_list_t *depends; alpm_list_t *depends;
char **cmd; char **cmd;
@ -84,6 +85,7 @@ static void _alpm_hook_free(struct _alpm_hook_t *hook)
{ {
if(hook) { if(hook) {
free(hook->name); free(hook->name);
free(hook->desc);
_alpm_wordsplit_free(hook->cmd); _alpm_wordsplit_free(hook->cmd);
alpm_list_free_inner(hook->triggers, (alpm_list_fn_free) _alpm_trigger_free); alpm_list_free_inner(hook->triggers, (alpm_list_fn_free) _alpm_trigger_free);
alpm_list_free(hook->triggers); alpm_list_free(hook->triggers);
@ -316,6 +318,8 @@ static int _alpm_hook_parse_cb(const char *file, int line,
} else { } else {
error(_("hook %s line %d: invalid value %s\n"), file, line, value); error(_("hook %s line %d: invalid value %s\n"), file, line, value);
} }
} else if(strcmp(key, "Description") == 0) {
STRDUP(hook->desc, value, return 1);
} else if(strcmp(key, "Depends") == 0) { } else if(strcmp(key, "Depends") == 0) {
char *val; char *val;
STRDUP(val, value, return 1); STRDUP(val, value, return 1);
@ -732,6 +736,7 @@ int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when)
hook_event.type = ALPM_EVENT_HOOK_RUN_START; hook_event.type = ALPM_EVENT_HOOK_RUN_START;
hook_event.name = hook->name; hook_event.name = hook->name;
hook_event.desc = hook->desc;
EVENT(handle, &hook_event); EVENT(handle, &hook_event);
if(_alpm_hook_run_hook(handle, hook) != 0 && hook->abort_on_fail) { if(_alpm_hook_run_hook(handle, hook) != 0 && hook->abort_on_fail) {

View File

@ -189,7 +189,8 @@ void cb_event(alpm_event_t *event)
alpm_event_hook_run_t *e = &event->hook_run; alpm_event_hook_run_t *e = &event->hook_run;
int digits = number_length(e->total); int digits = number_length(e->total);
printf("(%*zu/%*zu) %s\n", digits, e->position, printf("(%*zu/%*zu) %s\n", digits, e->position,
digits, e->total, e->name); digits, e->total,
e->desc ? e->desc : e->name);
} }
break; break;
case ALPM_EVENT_CHECKDEPS_START: case ALPM_EVENT_CHECKDEPS_START: