You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.6 KiB
77 lines
2.6 KiB
From 08473f4ad8d79e6d232832c6863b2848f8a41734 Mon Sep 17 00:00:00 2001 |
|
From: Michal Domonkos <mdomonko@redhat.com> |
|
Date: Mon, 7 Dec 2015 17:13:26 +0100 |
|
Subject: [PATCH] Add RPMCALLBACK_ELEM_PROGRESS callback type |
|
|
|
Currently, there's no callback type that would be issued per each |
|
transaction element. RPMCALLBACK_TRANS_PROGRESS is only issued during |
|
the prepare phase but not when packages are actually installed or |
|
erased. Likewise, RPMCALLBACK_INST_ST* and RPMCALLBACK_UNINST_ST* won't |
|
be issued if an install or erase operation is skipped for some reason (a |
|
script or package upgrade failure). |
|
|
|
Having such a callback would allow the Python API consumers to always |
|
know upfront which element is about to be processed, before any other |
|
callbacks are issued. This is important since not every callback type |
|
carries enough data about the subject package; while the INST types |
|
provide the user object passed to a former addInstall call, the UNINST |
|
types only provide the package name (which may not be unique within the |
|
transaction set). |
|
|
|
This commit adds such a callback. |
|
|
|
(cherry picked from commit 448db68ceb5be3c7171b7ec0ea908d905792dc2f) |
|
--- |
|
lib/rpmcallback.h | 1 + |
|
lib/transaction.c | 4 ++++ |
|
python/rpmmodule.c | 1 + |
|
3 files changed, 6 insertions(+) |
|
|
|
diff --git a/lib/rpmcallback.h b/lib/rpmcallback.h |
|
index b3b05c6c1..b6d434c01 100644 |
|
--- a/lib/rpmcallback.h |
|
+++ b/lib/rpmcallback.h |
|
@@ -31,6 +31,7 @@ typedef enum rpmCallbackType_e { |
|
RPMCALLBACK_SCRIPT_START = (1 << 16), |
|
RPMCALLBACK_SCRIPT_STOP = (1 << 17), |
|
RPMCALLBACK_INST_STOP = (1 << 18), |
|
+ RPMCALLBACK_ELEM_PROGRESS = (1 << 19), |
|
} rpmCallbackType; |
|
|
|
/** |
|
diff --git a/lib/transaction.c b/lib/transaction.c |
|
index 45c30b5ba..1cd9ca674 100644 |
|
--- a/lib/transaction.c |
|
+++ b/lib/transaction.c |
|
@@ -1410,12 +1410,16 @@ exit: |
|
static int rpmtsProcess(rpmts ts) |
|
{ |
|
rpmtsi pi; rpmte p; |
|
+ tsMembers tsmem = rpmtsMembers(ts); |
|
int rc = 0; |
|
+ int i = 0; |
|
|
|
pi = rpmtsiInit(ts); |
|
while ((p = rpmtsiNext(pi, 0)) != NULL) { |
|
int failed; |
|
|
|
+ rpmtsNotify(ts, NULL, RPMCALLBACK_ELEM_PROGRESS, i++, |
|
+ tsmem->orderCount); |
|
rpmlog(RPMLOG_DEBUG, "========== +++ %s %s-%s 0x%x\n", |
|
rpmteNEVR(p), rpmteA(p), rpmteO(p), rpmteColor(p)); |
|
|
|
diff --git a/python/rpmmodule.c b/python/rpmmodule.c |
|
index 04285a63f..fc8115d30 100644 |
|
--- a/python/rpmmodule.c |
|
+++ b/python/rpmmodule.c |
|
@@ -459,6 +459,7 @@ static int initModule(PyObject *m) |
|
REGISTER_ENUM(RPMCALLBACK_SCRIPT_START); |
|
REGISTER_ENUM(RPMCALLBACK_SCRIPT_STOP); |
|
REGISTER_ENUM(RPMCALLBACK_INST_STOP); |
|
+ REGISTER_ENUM(RPMCALLBACK_ELEM_PROGRESS); |
|
|
|
REGISTER_ENUM(RPMPROB_BADARCH); |
|
REGISTER_ENUM(RPMPROB_BADOS); |
|
-- |
|
2.13.2 |
|
|
|
|