Rework scriptlet printing and callbacks

This adds more info to the scriptlet callbacks and adds callbacks for
when and install file is about to run/finished running.

Indent and colour the scriptlet output so the user can see it clearly.
This commit is contained in:
morganamilo 2023-11-28 22:18:38 +00:00
parent 18e49f2c97
commit 47ee7e9442
No known key found for this signature in database
GPG key ID: E48D0A8326DE47C5
11 changed files with 124 additions and 51 deletions

View file

@ -469,7 +469,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
!(trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) { !(trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) {
const char *scriptlet_name = is_upgrade ? "pre_upgrade" : "pre_install"; const char *scriptlet_name = is_upgrade ? "pre_upgrade" : "pre_install";
_alpm_runscriptlet(handle, pkgfile, scriptlet_name, _alpm_runscriptlet(handle, newpkg->name, pkgfile, scriptlet_name,
newpkg->version, oldpkg ? oldpkg->version : NULL, 1); newpkg->version, oldpkg ? oldpkg->version : NULL, 1);
} }
@ -641,7 +641,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
char *scriptlet = _alpm_local_db_pkgpath(db, newpkg, "install"); char *scriptlet = _alpm_local_db_pkgpath(db, newpkg, "install");
const char *scriptlet_name = is_upgrade ? "post_upgrade" : "post_install"; const char *scriptlet_name = is_upgrade ? "post_upgrade" : "post_install";
_alpm_runscriptlet(handle, scriptlet, scriptlet_name, _alpm_runscriptlet(handle, newpkg->name, scriptlet, scriptlet_name,
newpkg->version, oldpkg ? oldpkg->version : NULL, 0); newpkg->version, oldpkg ? oldpkg->version : NULL, 0);
free(scriptlet); free(scriptlet);
} }

View file

@ -750,6 +750,10 @@ typedef enum _alpm_event_type_t {
ALPM_EVENT_LOAD_START, ALPM_EVENT_LOAD_START,
/** Target package is finished loading. */ /** Target package is finished loading. */
ALPM_EVENT_LOAD_DONE, ALPM_EVENT_LOAD_DONE,
/** An install file is about to be ran */
ALPM_EVENT_INSTALL_RUN_START,
/** An install file has finished running */
ALPM_EVENT_INSTALL_RUN_DONE,
/** Scriptlet has printed information; See alpm_event_scriptlet_info_t for /** Scriptlet has printed information; See alpm_event_scriptlet_info_t for
* arguments. */ * arguments. */
ALPM_EVENT_SCRIPTLET_INFO, ALPM_EVENT_SCRIPTLET_INFO,
@ -840,10 +844,32 @@ typedef struct _alpm_event_optdep_removal_t {
alpm_depend_t *optdep; alpm_depend_t *optdep;
} alpm_event_optdep_removal_t; } alpm_event_optdep_removal_t;
/** Enum of the kinds of scriptlets */
typedef enum _alpm_scriptlet_kind_t {
/** We are running an install file */
ALPM_SCRIPTLET_KIND_INSTALL_FILE,
/** We are running a hook */
ALPM_SCRIPTLET_KIND_HOOK,
/** We are running a command */
ALPM_SCRIPTLET_KIND_COMMAND,
} alpm_scriptlet_kind_t;
/** We are running an install file. */
typedef struct _alpm_event_install_run_t {
/** Type of event */
alpm_event_type_t type;
/** The name of the package */
const char *pkgname;
} alpm_event_install_run_t;
/** A scriptlet was ran. */ /** A scriptlet was ran. */
typedef struct _alpm_event_scriptlet_info_t { typedef struct _alpm_event_scriptlet_info_t {
/** Type of event */ /** Type of event */
alpm_event_type_t type; alpm_event_type_t type;
/** The kind of scriptlet being ran */
alpm_scriptlet_kind_t kind;
/** The name of the scriptlet **/
const char *name;
/** Line of scriptlet output */ /** Line of scriptlet output */
const char *line; const char *line;
} alpm_event_scriptlet_info_t; } alpm_event_scriptlet_info_t;
@ -946,6 +972,8 @@ typedef union _alpm_event_t {
alpm_event_package_operation_t package_operation; alpm_event_package_operation_t package_operation;
/** An optdept was remove */ /** An optdept was remove */
alpm_event_optdep_removal_t optdep_removal; alpm_event_optdep_removal_t optdep_removal;
/** An install file is about to be run */
alpm_event_install_run_t install_run;
/** A scriptlet was ran */ /** A scriptlet was ran */
alpm_event_scriptlet_info_t scriptlet_info; alpm_event_scriptlet_info_t scriptlet_info;
/** A database is missing */ /** A database is missing */

View file

@ -522,10 +522,10 @@ static int _alpm_hook_run_hook(alpm_handle_t *handle, struct _alpm_hook_t *hook)
alpm_list_count(hook->matches), (alpm_list_fn_cmp)strcmp); alpm_list_count(hook->matches), (alpm_list_fn_cmp)strcmp);
/* hooks with multiple triggers could have duplicate matches */ /* hooks with multiple triggers could have duplicate matches */
ctx = hook->matches = _alpm_strlist_dedup(hook->matches); ctx = hook->matches = _alpm_strlist_dedup(hook->matches);
return _alpm_run_chroot(handle, hook->cmd[0], hook->cmd, return _alpm_run_chroot(handle, hook->name, ALPM_SCRIPTLET_KIND_HOOK, hook->cmd[0], hook->cmd,
(_alpm_cb_io) _alpm_hook_feed_targets, &ctx); (_alpm_cb_io) _alpm_hook_feed_targets, &ctx);
} else { } else {
return _alpm_run_chroot(handle, hook->cmd[0], hook->cmd, NULL, NULL); return _alpm_run_chroot(handle, hook->name, ALPM_SCRIPTLET_KIND_HOOK, hook->cmd[0], hook->cmd, NULL, NULL);
} }
} }

View file

@ -692,7 +692,7 @@ int _alpm_remove_single_package(alpm_handle_t *handle,
!(handle->trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) { !(handle->trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) {
char *scriptlet = _alpm_local_db_pkgpath(handle->db_local, char *scriptlet = _alpm_local_db_pkgpath(handle->db_local,
oldpkg, "install"); oldpkg, "install");
_alpm_runscriptlet(handle, scriptlet, "pre_remove", pkgver, NULL, 0); _alpm_runscriptlet(handle, oldpkg->name, scriptlet, "pre_remove", pkgver, NULL, 0);
free(scriptlet); free(scriptlet);
} }
} }
@ -712,7 +712,7 @@ int _alpm_remove_single_package(alpm_handle_t *handle,
!(handle->trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) { !(handle->trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) {
char *scriptlet = _alpm_local_db_pkgpath(handle->db_local, char *scriptlet = _alpm_local_db_pkgpath(handle->db_local,
oldpkg, "install"); oldpkg, "install");
_alpm_runscriptlet(handle, scriptlet, "post_remove", pkgver, NULL, 0); _alpm_runscriptlet(handle, oldpkg->name, scriptlet, "post_remove", pkgver, NULL, 0);
free(scriptlet); free(scriptlet);
} }

View file

@ -334,7 +334,7 @@ static int grep(const char *fn, const char *needle)
return 0; return 0;
} }
int _alpm_runscriptlet(alpm_handle_t *handle, const char *filepath, int _alpm_runscriptlet(alpm_handle_t *handle, const char *pkgname, const char *filepath,
const char *script, const char *ver, const char *oldver, int is_archive) const char *script, const char *ver, const char *oldver, int is_archive)
{ {
char arg0[64], arg1[3], cmdline[PATH_MAX]; char arg0[64], arg1[3], cmdline[PATH_MAX];
@ -407,7 +407,16 @@ int _alpm_runscriptlet(alpm_handle_t *handle, const char *filepath,
_alpm_log(handle, ALPM_LOG_DEBUG, "executing \"%s\"\n", cmdline); _alpm_log(handle, ALPM_LOG_DEBUG, "executing \"%s\"\n", cmdline);
retval = _alpm_run_chroot(handle, SCRIPTLET_SHELL, argv, NULL, NULL); alpm_event_install_run_t event = {
.type = ALPM_EVENT_INSTALL_RUN_START,
.pkgname = pkgname,
};
EVENT(handle, &event);
retval = _alpm_run_chroot(handle, pkgname, ALPM_SCRIPTLET_KIND_INSTALL_FILE, SCRIPTLET_SHELL, argv, NULL, NULL);
event.type = ALPM_EVENT_INSTALL_RUN_DONE;
EVENT(handle, &event);
cleanup: cleanup:
if(scriptfn && unlink(scriptfn)) { if(scriptfn && unlink(scriptfn)) {

View file

@ -49,7 +49,7 @@ typedef struct _alpm_trans_t {
void _alpm_trans_free(alpm_trans_t *trans); void _alpm_trans_free(alpm_trans_t *trans);
/* flags is a bitfield of alpm_transflag_t flags */ /* flags is a bitfield of alpm_transflag_t flags */
int _alpm_trans_init(alpm_trans_t *trans, int flags); int _alpm_trans_init(alpm_trans_t *trans, int flags);
int _alpm_runscriptlet(alpm_handle_t *handle, const char *filepath, int _alpm_runscriptlet(alpm_handle_t *handle, const char *name, const char *filepath,
const char *script, const char *ver, const char *oldver, int is_archive); const char *script, const char *ver, const char *oldver, int is_archive);
#endif /* ALPM_TRANS_H */ #endif /* ALPM_TRANS_H */

View file

@ -497,18 +497,21 @@ static int _alpm_chroot_write_to_child(alpm_handle_t *handle, int fd,
return 0; return 0;
} }
static void _alpm_chroot_process_output(alpm_handle_t *handle, const char *line) static void _alpm_chroot_process_output(alpm_handle_t *handle, const char *name,
alpm_scriptlet_kind_t kind, const char *line)
{ {
alpm_event_scriptlet_info_t event = { alpm_event_scriptlet_info_t event = {
.type = ALPM_EVENT_SCRIPTLET_INFO, .type = ALPM_EVENT_SCRIPTLET_INFO,
.kind = kind,
.name = name,
.line = line .line = line
}; };
alpm_logaction(handle, "ALPM-SCRIPTLET", "%s", line); alpm_logaction(handle, "ALPM-SCRIPTLET", "%s", line);
EVENT(handle, &event); EVENT(handle, &event);
} }
static int _alpm_chroot_read_from_child(alpm_handle_t *handle, int fd, static int _alpm_chroot_read_from_child(alpm_handle_t *handle, int fd, const char *name,
char *buf, ssize_t *buf_size, ssize_t buf_limit) alpm_scriptlet_kind_t kind, char *buf, ssize_t *buf_size, ssize_t buf_limit)
{ {
ssize_t space = buf_limit - *buf_size - 2; /* reserve 2 for "\n\0" */ ssize_t space = buf_limit - *buf_size - 2; /* reserve 2 for "\n\0" */
ssize_t nread = read(fd, buf + *buf_size, space); ssize_t nread = read(fd, buf + *buf_size, space);
@ -520,7 +523,7 @@ static int _alpm_chroot_read_from_child(alpm_handle_t *handle, int fd,
size_t linelen = newline - buf + 1; size_t linelen = newline - buf + 1;
char old = buf[linelen]; char old = buf[linelen];
buf[linelen] = '\0'; buf[linelen] = '\0';
_alpm_chroot_process_output(handle, buf); _alpm_chroot_process_output(handle, name, kind, buf);
buf[linelen] = old; buf[linelen] = old;
*buf_size -= linelen; *buf_size -= linelen;
@ -530,14 +533,14 @@ static int _alpm_chroot_read_from_child(alpm_handle_t *handle, int fd,
} else if(nread == space) { } else if(nread == space) {
/* we didn't read a full line, but we're out of space */ /* we didn't read a full line, but we're out of space */
strcpy(buf + *buf_size, "\n"); strcpy(buf + *buf_size, "\n");
_alpm_chroot_process_output(handle, buf); _alpm_chroot_process_output(handle, name, kind, buf);
*buf_size = 0; *buf_size = 0;
} }
} else if(nread == 0) { } else if(nread == 0) {
/* end-of-file */ /* end-of-file */
if(*buf_size) { if(*buf_size) {
strcpy(buf + *buf_size, "\n"); strcpy(buf + *buf_size, "\n");
_alpm_chroot_process_output(handle, buf); _alpm_chroot_process_output(handle, name, kind, buf);
} }
return -1; return -1;
} else if(should_retry(errno)) { } else if(should_retry(errno)) {
@ -546,7 +549,7 @@ static int _alpm_chroot_read_from_child(alpm_handle_t *handle, int fd,
/* read error */ /* read error */
if(*buf_size) { if(*buf_size) {
strcpy(buf + *buf_size, "\n"); strcpy(buf + *buf_size, "\n");
_alpm_chroot_process_output(handle, buf); _alpm_chroot_process_output(handle, name, kind, buf);
} }
_alpm_log(handle, ALPM_LOG_ERROR, _alpm_log(handle, ALPM_LOG_ERROR,
_("unable to read from pipe (%s)\n"), strerror(errno)); _("unable to read from pipe (%s)\n"), strerror(errno));
@ -582,14 +585,16 @@ static void _alpm_reset_signals(void)
/** Execute a command with arguments in a chroot. /** Execute a command with arguments in a chroot.
* @param handle the context handle * @param handle the context handle
* @param name a human readable name to describe the command
* @param kind what kind of scriptlet is running
* @param cmd command to execute * @param cmd command to execute
* @param argv arguments to pass to cmd * @param argv arguments to pass to cmd
* @param stdin_cb callback to provide input to the chroot on stdin * @param stdin_cb callback to provide input to the chroot on stdin
* @param stdin_ctx context to be passed to @a stdin_cb * @param stdin_ctx context to be passed to @a stdin_cb
* @return 0 on success, 1 on error * @return 0 on success, 1 on error
*/ */
int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[], int _alpm_run_chroot(alpm_handle_t *handle, const char *name, alpm_scriptlet_kind_t kind,
_alpm_cb_io stdin_cb, void *stdin_ctx) const char *cmd, char *const argv[], _alpm_cb_io stdin_cb, void *stdin_ctx)
{ {
pid_t pid; pid_t pid;
int child2parent_pipefd[2], parent2child_pipefd[2]; int child2parent_pipefd[2], parent2child_pipefd[2];
@ -650,6 +655,7 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
close(parent2child_pipefd[HEAD]); close(parent2child_pipefd[HEAD]);
close(child2parent_pipefd[TAIL]); close(child2parent_pipefd[TAIL]);
close(child2parent_pipefd[HEAD]); close(child2parent_pipefd[HEAD]);
if(cwdfd >= 0) { if(cwdfd >= 0) {
close(cwdfd); close(cwdfd);
} }
@ -677,24 +683,38 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
_alpm_reset_signals(); _alpm_reset_signals();
execv(cmd, argv); execv(cmd, argv);
/* execv only returns if there was an error */ /* execv only returns if there was an error */
fprintf(stderr, _("call to execv failed (%s)\n"), strerror(errno)); fprintf(stderr, _("%s: failed to execv '%s' (%s)\n"), name, cmd, strerror(errno));
exit(1); exit(1);
} else { } else {
/* this code runs for the parent only (wait on the child) */ /* this code runs for the parent only (wait on the child) */
int status; int status;
char obuf[PIPE_BUF]; /* writes <= PIPE_BUF are guaranteed atomic */ char obuf[PIPE_BUF]; /* writes <= PIPE_BUF are guaranteed atomic */
char ibuf[LINE_MAX]; char ibuf[LINE_MAX];
char sciptlet_name[32];
ssize_t olen = 0, ilen = 0; ssize_t olen = 0, ilen = 0;
nfds_t nfds = 2; nfds_t nfds = 2;
struct pollfd fds[2], *child2parent = &(fds[0]), *parent2child = &(fds[1]); struct pollfd fds[2], *child2parent = &(fds[0]), *parent2child = &(fds[1]);
int poll_ret; int poll_ret;
switch(kind) {
case ALPM_SCRIPTLET_KIND_HOOK:
snprintf(sciptlet_name, 32, "hook '%s'", name);
break;
case ALPM_SCRIPTLET_KIND_INSTALL_FILE:
snprintf(sciptlet_name, 32, "'%s.install'", name);
break;
case ALPM_SCRIPTLET_KIND_COMMAND:
strncpy(sciptlet_name, "ldconfig", 32);
break;
}
child2parent->fd = child2parent_pipefd[TAIL]; child2parent->fd = child2parent_pipefd[TAIL];
child2parent->events = POLLIN; child2parent->events = POLLIN;
fcntl(child2parent->fd, F_SETFL, O_NONBLOCK); fcntl(child2parent->fd, F_SETFL, O_NONBLOCK);
close(child2parent_pipefd[HEAD]); close(child2parent_pipefd[HEAD]);
close(parent2child_pipefd[TAIL]); close(parent2child_pipefd[TAIL]);
if(stdin_cb) { if(stdin_cb) {
parent2child->fd = parent2child_pipefd[HEAD]; parent2child->fd = parent2child_pipefd[HEAD];
parent2child->events = POLLOUT; parent2child->events = POLLOUT;
@ -717,7 +737,7 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
} }
} }
if(child2parent->revents & POLLIN) { if(child2parent->revents & POLLIN) {
if(_alpm_chroot_read_from_child(handle, child2parent->fd, if(_alpm_chroot_read_from_child(handle, child2parent->fd, name, kind,
ibuf, &ilen, sizeof(ibuf)) != 0) { ibuf, &ilen, sizeof(ibuf)) != 0) {
/* we encountered end-of-file or an error */ /* we encountered end-of-file or an error */
STOP_POLLING(child2parent); STOP_POLLING(child2parent);
@ -740,7 +760,7 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
if(ilen) { if(ilen) {
/* buffer would have already been flushed if it had a newline */ /* buffer would have already been flushed if it had a newline */
strcpy(ibuf + ilen, "\n"); strcpy(ibuf + ilen, "\n");
_alpm_chroot_process_output(handle, ibuf); _alpm_chroot_process_output(handle, name, kind, ibuf);
} }
#undef STOP_POLLING #undef STOP_POLLING
@ -756,7 +776,7 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
while(waitpid(pid, &status, 0) == -1) { while(waitpid(pid, &status, 0) == -1) {
if(errno != EINTR) { if(errno != EINTR) {
_alpm_log(handle, ALPM_LOG_ERROR, _("call to waitpid failed (%s)\n"), strerror(errno)); _alpm_log(handle, ALPM_LOG_ERROR, _("failed to run %s: call to waitpid failed (%s)\n"), sciptlet_name, strerror(errno));
retval = 1; retval = 1;
goto cleanup; goto cleanup;
} }
@ -766,7 +786,8 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
if(WIFEXITED(status)) { if(WIFEXITED(status)) {
_alpm_log(handle, ALPM_LOG_DEBUG, "call to waitpid succeeded\n"); _alpm_log(handle, ALPM_LOG_DEBUG, "call to waitpid succeeded\n");
if(WEXITSTATUS(status) != 0) { if(WEXITSTATUS(status) != 0) {
_alpm_log(handle, ALPM_LOG_ERROR, _("command failed to execute correctly\n")); _alpm_log(handle, ALPM_LOG_ERROR, _("%s did not complete sucessfully (%s exited %d)\n"),
sciptlet_name, cmd, WEXITSTATUS(status));
retval = 1; retval = 1;
} }
} else if(WIFSIGNALED(status) != 0) { } else if(WIFSIGNALED(status) != 0) {
@ -775,8 +796,8 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
if(signal_description == NULL) { if(signal_description == NULL) {
signal_description = _("Unknown signal"); signal_description = _("Unknown signal");
} }
_alpm_log(handle, ALPM_LOG_ERROR, _("command terminated by signal %d: %s\n"), _alpm_log(handle, ALPM_LOG_ERROR, _("%s terminated by signal %d: %s\n"),
WTERMSIG(status), signal_description); sciptlet_name, WTERMSIG(status), signal_description);
retval = 1; retval = 1;
} }
} }
@ -807,10 +828,9 @@ int _alpm_ldconfig(alpm_handle_t *handle)
if(access(line, F_OK) == 0) { if(access(line, F_OK) == 0) {
snprintf(line, PATH_MAX, "%s%s", handle->root, LDCONFIG); snprintf(line, PATH_MAX, "%s%s", handle->root, LDCONFIG);
if(access(line, X_OK) == 0) { if(access(line, X_OK) == 0) {
char arg0[32]; char *arg0 = strdup(LDCONFIG);
char *argv[] = { arg0, NULL }; char *argv[] = { arg0, NULL };
strcpy(arg0, "ldconfig"); return _alpm_run_chroot(handle, "ldconfig", ALPM_SCRIPTLET_KIND_COMMAND, LDCONFIG, argv, NULL, NULL);
return _alpm_run_chroot(handle, LDCONFIG, argv, NULL, NULL);
} }
} }

View file

@ -129,8 +129,8 @@ ssize_t _alpm_files_in_directory(alpm_handle_t *handle, const char *path, int fu
typedef ssize_t (*_alpm_cb_io)(void *buf, ssize_t len, void *ctx); typedef ssize_t (*_alpm_cb_io)(void *buf, ssize_t len, void *ctx);
int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[], int _alpm_run_chroot(alpm_handle_t *handle, const char *name, alpm_scriptlet_kind_t kind,
_alpm_cb_io in_cb, void *in_ctx); const char *cmd, char *const argv[], _alpm_cb_io in_cb, void *in_ctx);
int _alpm_ldconfig(alpm_handle_t *handle); int _alpm_ldconfig(alpm_handle_t *handle);
int _alpm_str_cmp(const void *s1, const void *s2); int _alpm_str_cmp(const void *s1, const void *s2);
char *_alpm_filecache_find(alpm_handle_t *handle, const char *filename); char *_alpm_filecache_find(alpm_handle_t *handle, const char *filename);

View file

@ -217,7 +217,10 @@ static int number_length(size_t n)
/* callback to handle messages/notifications from libalpm transactions */ /* callback to handle messages/notifications from libalpm transactions */
void cb_event(void *ctx, alpm_event_t *event) void cb_event(void *ctx, alpm_event_t *event)
{ {
static int install_line_count = 0;
const colstr_t *colstr = &config->colstr;
(void)ctx; (void)ctx;
if(config->print) { if(config->print) {
console_cursor_move_end(); console_cursor_move_end();
return; return;
@ -313,8 +316,16 @@ void cb_event(void *ctx, alpm_event_t *event)
printf(_("loading package files...\n")); printf(_("loading package files...\n"));
} }
break; break;
case ALPM_EVENT_INSTALL_RUN_START:
install_line_count = 0;
break;
case ALPM_EVENT_SCRIPTLET_INFO: case ALPM_EVENT_SCRIPTLET_INFO:
fputs(event->scriptlet_info.line, stdout); /* onlt say we're running the install file if it outputs */
if(install_line_count == 0 && event->scriptlet_info.kind == ALPM_SCRIPTLET_KIND_INSTALL_FILE) {
printf("Running %s.install...\n", event->scriptlet_info.name);
}
install_line_count++;
printf(" %s%s%s", colstr->scriptlet, event->scriptlet_info.line, colstr->nocolor);
break; break;
case ALPM_EVENT_DB_RETRIEVE_START: case ALPM_EVENT_DB_RETRIEVE_START:
on_progress = 1; on_progress = 1;
@ -413,6 +424,7 @@ void cb_event(void *ctx, alpm_event_t *event)
case ALPM_EVENT_DISKSPACE_DONE: case ALPM_EVENT_DISKSPACE_DONE:
case ALPM_EVENT_HOOK_DONE: case ALPM_EVENT_HOOK_DONE:
case ALPM_EVENT_HOOK_RUN_DONE: case ALPM_EVENT_HOOK_RUN_DONE:
case ALPM_EVENT_INSTALL_RUN_DONE:
/* nothing */ /* nothing */
break; break;
} }

View file

@ -63,6 +63,7 @@ config_t *config = NULL;
#define BOLDMAGENTA "\033[1;35m" #define BOLDMAGENTA "\033[1;35m"
#define BOLDCYAN "\033[1;36m" #define BOLDCYAN "\033[1;36m"
#define BOLDWHITE "\033[1;37m" #define BOLDWHITE "\033[1;37m"
#define BLUE117 "\033[38;5;117m"
#define GREY46 "\033[38;5;243m" #define GREY46 "\033[38;5;243m"
void enable_colors(int colors) void enable_colors(int colors)
@ -78,6 +79,7 @@ void enable_colors(int colors)
colstr->meta = BOLDCYAN; colstr->meta = BOLDCYAN;
colstr->warn = BOLDYELLOW; colstr->warn = BOLDYELLOW;
colstr->err = BOLDRED; colstr->err = BOLDRED;
colstr->scriptlet = BLUE117;
colstr->faint = GREY46; colstr->faint = GREY46;
colstr->nocolor = NOCOLOR; colstr->nocolor = NOCOLOR;
} else { } else {
@ -89,6 +91,7 @@ void enable_colors(int colors)
colstr->meta = ""; colstr->meta = "";
colstr->warn = ""; colstr->warn = "";
colstr->err = ""; colstr->err = "";
colstr->scriptlet = "";
colstr->faint = ""; colstr->faint = "";
colstr->nocolor = ""; colstr->nocolor = "";
} }

View file

@ -32,6 +32,7 @@ typedef struct __colstr_t {
const char *warn; const char *warn;
const char *err; const char *err;
const char *faint; const char *faint;
const char *scriptlet;
const char *nocolor; const char *nocolor;
} colstr_t; } colstr_t;