summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2015-12-14 13:39:58 +1000
committerAllan McRae <allan@archlinux.org>2015-12-15 15:12:32 +1000
commit8d3bd4ec13940da70f946e6e63d59a05c89cbb50 (patch)
treefe1d4e60c27d4f2797b1517aae8f88c722339d33
parent132ec4c3b9f761fb76ff9cf567f3723db62d72df (diff)
downloadpacman-8d3bd4ec13940da70f946e6e63d59a05c89cbb50.tar.xz
Add ALPM_EVENT_TRANSACTION_{START,DONE} events
This provides a way to detect when the processing of package changes starts, allowing pacman to delineate hook output and package installation/removal output. Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--lib/libalpm/alpm.h4
-rw-r--r--lib/libalpm/trans.c5
-rw-r--r--src/pacman/callback.c4
3 files changed, 13 insertions, 0 deletions
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index f8e1f254..8fcdfdfc 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -384,6 +384,10 @@ typedef enum _alpm_event_type_t {
ALPM_EVENT_INTERCONFLICTS_START,
/** Inter-conflicts were checked for target package. */
ALPM_EVENT_INTERCONFLICTS_DONE,
+ /** Processing the package transaction is starting. */
+ ALPM_EVENT_TRANSACTION_START,
+ /** Processing the package transaction is finished. */
+ ALPM_EVENT_TRANSACTION_DONE,
/** Package will be installed/upgraded/downgraded/re-installed/removed; See
* alpm_event_package_operation_t for arguments. */
ALPM_EVENT_PACKAGE_OPERATION_START,
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 06997a09..5b52049d 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -160,6 +160,7 @@ int SYMEXPORT alpm_trans_prepare(alpm_handle_t *handle, alpm_list_t **data)
int SYMEXPORT alpm_trans_commit(alpm_handle_t *handle, alpm_list_t **data)
{
alpm_trans_t *trans;
+ alpm_event_any_t event;
/* Sanity checks */
CHECK_HANDLE(handle, return -1);
@@ -197,6 +198,8 @@ int SYMEXPORT alpm_trans_commit(alpm_handle_t *handle, alpm_list_t **data)
trans->state = STATE_COMMITING;
alpm_logaction(handle, ALPM_CALLER_PREFIX, "transaction started\n");
+ event.type = ALPM_EVENT_TRANSACTION_START;
+ EVENT(handle, &event);
if(trans->add == NULL) {
if(_alpm_remove_packages(handle, 1) == -1) {
@@ -219,6 +222,8 @@ int SYMEXPORT alpm_trans_commit(alpm_handle_t *handle, alpm_list_t **data)
if(trans->state == STATE_INTERRUPTED) {
alpm_logaction(handle, ALPM_CALLER_PREFIX, "transaction interrupted\n");
} else {
+ event.type = ALPM_EVENT_TRANSACTION_DONE;
+ EVENT(handle, &event);
alpm_logaction(handle, ALPM_CALLER_PREFIX, "transaction completed\n");
_alpm_hook_run(handle, ALPM_HOOK_POST_TRANSACTION);
}
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index b8ded3d0..a71d94ba 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -188,6 +188,9 @@ void cb_event(alpm_event_t *event)
case ALPM_EVENT_INTERCONFLICTS_START:
printf(_("looking for conflicting packages...\n"));
break;
+ case ALPM_EVENT_TRANSACTION_START:
+ colon_printf(_("Processing package changes...\n"));
+ break;
case ALPM_EVENT_PACKAGE_OPERATION_START:
if(config->noprogressbar) {
alpm_event_package_operation_t *e = &event->package_operation;
@@ -327,6 +330,7 @@ void cb_event(alpm_event_t *event)
case ALPM_EVENT_CHECKDEPS_DONE:
case ALPM_EVENT_RESOLVEDEPS_DONE:
case ALPM_EVENT_INTERCONFLICTS_DONE:
+ case ALPM_EVENT_TRANSACTION_DONE:
case ALPM_EVENT_INTEGRITY_DONE:
case ALPM_EVENT_KEYRING_DONE:
case ALPM_EVENT_KEY_DOWNLOAD_DONE: