- Add RPMCALLBACK_ELEM_PROGRESS callback type (needed by dnf)

This commit is contained in:
Lubos Kardos 2016-04-12 16:49:54 +02:00
parent 5d2cf89172
commit 761a0d9ec7
2 changed files with 80 additions and 1 deletions

View File

@ -0,0 +1,75 @@
From 448db68ceb5be3c7171b7ec0ea908d905792dc2f 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.
---
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 dfc22ab..f07892d 100644
--- a/lib/rpmcallback.h
+++ b/lib/rpmcallback.h
@@ -37,6 +37,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;
/** \ingroup rpmts
diff --git a/lib/transaction.c b/lib/transaction.c
index 66888af..4f90782 100644
--- a/lib/transaction.c
+++ b/lib/transaction.c
@@ -1345,12 +1345,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 0e3ab18..29753fd 100644
--- a/python/rpmmodule.c
+++ b/python/rpmmodule.c
@@ -512,6 +512,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);
--
1.9.3

View File

@ -29,7 +29,7 @@
Summary: The RPM package management system
Name: rpm
Version: %{rpmver}
Release: %{?snapver:0.%{snapver}.}28%{?dist}
Release: %{?snapver:0.%{snapver}.}29%{?dist}
Group: System Environment/Base
Url: http://www.rpm.org/
Source0: http://rpm.org/releases/rpm-4.12.x/%{name}-%{srcver}.tar.bz2
@ -74,6 +74,7 @@ Patch118: rpm-4.13.0-Use-pkg-dpaths-during-dependency-generation.patch
Patch119: rpm-4.13.0-Noarch-ExclusiveArch.patch
Patch120: rpm-4.13.0-redirect2null.patch
Patch121: rpm-4.13.0-lang-doc-directives.patch
Patch122: rpm-4.13.0-elem-progress-callback.patch
# These are not yet upstream
Patch302: rpm-4.7.1-geode-i686.patch
@ -585,6 +586,9 @@ exit 0
%doc doc/librpm/html/*
%changelog
* Tue Apr 12 2016 Lubos Kardos <lkardos@redhat.com> 4.13.0-0.rc1.29
- Add RPMCALLBACK_ELEM_PROGRESS callback type (needed by dnf)
* Wed Apr 06 2016 Lubos Kardos <lkardos@redhat.com> 4.13.0-0.rc1.28
- Fix non-working combination of %%lang and %%doc directive (#1254483)