Rebase to rpm 4.17.1 (http://rpm.org/wiki/Releases/4.17.1)
This commit is contained in:
parent
d71a7685ce
commit
e9927df0cb
1
.gitignore
vendored
1
.gitignore
vendored
@ -50,3 +50,4 @@
|
|||||||
/rpm-4.17.0-beta1.tar.bz2
|
/rpm-4.17.0-beta1.tar.bz2
|
||||||
/rpm-4.17.0-rc1.tar.bz2
|
/rpm-4.17.0-rc1.tar.bz2
|
||||||
/rpm-4.17.0.tar.bz2
|
/rpm-4.17.0.tar.bz2
|
||||||
|
/rpm-4.17.1.tar.bz2
|
||||||
|
@ -1,120 +0,0 @@
|
|||||||
From b3d672a5523dfec033160e5cc866432a0e808649 Mon Sep 17 00:00:00 2001
|
|
||||||
Message-Id: <b3d672a5523dfec033160e5cc866432a0e808649.1642160603.git.pmatilai@redhat.com>
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Tue, 16 Nov 2021 11:49:18 +0200
|
|
||||||
Subject: [PATCH] Fix spurious %transfiletriggerpostun execution
|
|
||||||
(RhBug:2023311)
|
|
||||||
|
|
||||||
If a package has multiple %transfiletriggerpostun triggers, any one
|
|
||||||
of them matching would cause all of them to run, due to disconnect
|
|
||||||
in the intel gathering stage: we'd gather all the headers with matching
|
|
||||||
files into a lump, and then add any postun triggers found in them,
|
|
||||||
but this loses the triggering file information and causes all postuns
|
|
||||||
to run.
|
|
||||||
|
|
||||||
The triggers need to be added while looping over the file matches,
|
|
||||||
like runFileTriggers() does. Doing so actually simplifies the code.
|
|
||||||
These should really be unified to use the same code, but leaving
|
|
||||||
that exercise to another rainy day.
|
|
||||||
---
|
|
||||||
lib/rpmtriggers.c | 64 +++++++++++++++++++++++------------------------
|
|
||||||
1 file changed, 31 insertions(+), 33 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rpmtriggers.c b/lib/rpmtriggers.c
|
|
||||||
index d541974e8..6fe4db65d 100644
|
|
||||||
--- a/lib/rpmtriggers.c
|
|
||||||
+++ b/lib/rpmtriggers.c
|
|
||||||
@@ -97,19 +97,37 @@ static void rpmtriggersSortAndUniq(rpmtriggers trigs)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void addTriggers(rpmts ts, Header trigH, rpmsenseFlags filter)
|
|
||||||
+{
|
|
||||||
+ int tix = 0;
|
|
||||||
+ rpmds ds;
|
|
||||||
+ rpmds triggers = rpmdsNew(trigH, RPMTAG_TRANSFILETRIGGERNAME, 0);
|
|
||||||
+
|
|
||||||
+ while ((ds = rpmdsFilterTi(triggers, tix))) {
|
|
||||||
+ if ((rpmdsNext(ds) >= 0) && (rpmdsFlags(ds) & filter)) {
|
|
||||||
+ struct rpmtd_s priorities;
|
|
||||||
+
|
|
||||||
+ if (headerGet(trigH, RPMTAG_TRANSFILETRIGGERPRIORITIES,
|
|
||||||
+ &priorities, HEADERGET_MINMEM)) {
|
|
||||||
+ rpmtdSetIndex(&priorities, tix);
|
|
||||||
+ rpmtriggersAdd(ts->trigs2run, headerGetInstance(trigH),
|
|
||||||
+ tix, *rpmtdGetUint32(&priorities));
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ rpmdsFree(ds);
|
|
||||||
+ tix++;
|
|
||||||
+ }
|
|
||||||
+ rpmdsFree(triggers);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void rpmtriggersPrepPostUnTransFileTrigs(rpmts ts, rpmte te)
|
|
||||||
{
|
|
||||||
- rpmdbMatchIterator mi;
|
|
||||||
rpmdbIndexIterator ii;
|
|
||||||
- Header trigH;
|
|
||||||
const void *key;
|
|
||||||
size_t keylen;
|
|
||||||
rpmfiles files;
|
|
||||||
- rpmds rpmdsTriggers;
|
|
||||||
- rpmds rpmdsTrigger;
|
|
||||||
|
|
||||||
ii = rpmdbIndexIteratorInit(rpmtsGetRdb(ts), RPMDBI_TRANSFILETRIGGERNAME);
|
|
||||||
- mi = rpmdbNewIterator(rpmtsGetRdb(ts), RPMDBI_PACKAGES);
|
|
||||||
files = rpmteFiles(te);
|
|
||||||
|
|
||||||
/* Iterate over file triggers in rpmdb */
|
|
||||||
@@ -121,39 +139,19 @@ void rpmtriggersPrepPostUnTransFileTrigs(rpmts ts, rpmte te)
|
|
||||||
rpmfi fi = rpmfilesFindPrefix(files, pfx);
|
|
||||||
while (rpmfiNext(fi) >= 0) {
|
|
||||||
if (RPMFILE_IS_INSTALLED(rpmfiFState(fi))) {
|
|
||||||
- /* If yes then store it */
|
|
||||||
- rpmdbAppendIterator(mi, rpmdbIndexIteratorPkgOffsets(ii),
|
|
||||||
- rpmdbIndexIteratorNumPkgs(ii));
|
|
||||||
- break;
|
|
||||||
+ unsigned int npkg = rpmdbIndexIteratorNumPkgs(ii);
|
|
||||||
+ const unsigned int *offs = rpmdbIndexIteratorPkgOffsets(ii);
|
|
||||||
+ /* Save any matching postun triggers */
|
|
||||||
+ for (int i = 0; i < npkg; i++) {
|
|
||||||
+ Header h = rpmdbGetHeaderAt(rpmtsGetRdb(ts), offs[i]);
|
|
||||||
+ addTriggers(ts, h, RPMSENSE_TRIGGERPOSTUN);
|
|
||||||
+ headerFree(h);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rpmfiFree(fi);
|
|
||||||
}
|
|
||||||
rpmdbIndexIteratorFree(ii);
|
|
||||||
-
|
|
||||||
- if (rpmdbGetIteratorCount(mi)) {
|
|
||||||
- /* Filter triggers and save only trans postun triggers into ts */
|
|
||||||
- while ((trigH = rpmdbNextIterator(mi)) != NULL) {
|
|
||||||
- int tix = 0;
|
|
||||||
- rpmdsTriggers = rpmdsNew(trigH, RPMTAG_TRANSFILETRIGGERNAME, 0);
|
|
||||||
- while ((rpmdsTrigger = rpmdsFilterTi(rpmdsTriggers, tix))) {
|
|
||||||
- if ((rpmdsNext(rpmdsTrigger) >= 0) &&
|
|
||||||
- (rpmdsFlags(rpmdsTrigger) & RPMSENSE_TRIGGERPOSTUN)) {
|
|
||||||
- struct rpmtd_s priorities;
|
|
||||||
-
|
|
||||||
- headerGet(trigH, RPMTAG_TRANSFILETRIGGERPRIORITIES,
|
|
||||||
- &priorities, HEADERGET_MINMEM);
|
|
||||||
- rpmtdSetIndex(&priorities, tix);
|
|
||||||
- rpmtriggersAdd(ts->trigs2run, rpmdbGetIteratorOffset(mi),
|
|
||||||
- tix, *rpmtdGetUint32(&priorities));
|
|
||||||
- }
|
|
||||||
- rpmdsFree(rpmdsTrigger);
|
|
||||||
- tix++;
|
|
||||||
- }
|
|
||||||
- rpmdsFree(rpmdsTriggers);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- rpmdbFreeIterator(mi);
|
|
||||||
rpmfilesFree(files);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
@ -1,64 +0,0 @@
|
|||||||
From 2d85f74afc3ccfa584dd8f0981673ff2b06277d1 Mon Sep 17 00:00:00 2001
|
|
||||||
Message-Id: <2d85f74afc3ccfa584dd8f0981673ff2b06277d1.1643803240.git.pmatilai@redhat.com>
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Wed, 2 Feb 2022 13:46:23 +0200
|
|
||||||
Subject: [PATCH] Really fix spurious %transfiletriggerpostun execution
|
|
||||||
(RhBug:2023311)
|
|
||||||
|
|
||||||
Commit b3d672a5523dfec033160e5cc866432a0e808649 got the base reasoning
|
|
||||||
in the ballpark but the code all wrong, introducing a severe performance
|
|
||||||
regression without actually fixing what it claimed to.
|
|
||||||
|
|
||||||
The missing incredient is actually comparing the current prefix with the
|
|
||||||
triggers in matched package (trying to describe this makes my head
|
|
||||||
spin): a package may have multiple triggers on multiple prefixes and
|
|
||||||
we need to make sure we only execute triggers of this type, from this
|
|
||||||
prefix.
|
|
||||||
|
|
||||||
Fixes: b3d672a5523dfec033160e5cc866432a0e808649
|
|
||||||
---
|
|
||||||
lib/rpmtriggers.c | 11 +++++++----
|
|
||||||
1 file changed, 7 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rpmtriggers.c b/lib/rpmtriggers.c
|
|
||||||
index 6fe4db65d..3f8fa22d0 100644
|
|
||||||
--- a/lib/rpmtriggers.c
|
|
||||||
+++ b/lib/rpmtriggers.c
|
|
||||||
@@ -97,14 +97,16 @@ static void rpmtriggersSortAndUniq(rpmtriggers trigs)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void addTriggers(rpmts ts, Header trigH, rpmsenseFlags filter)
|
|
||||||
+static void addTriggers(rpmts ts, Header trigH, rpmsenseFlags filter,
|
|
||||||
+ const char *prefix)
|
|
||||||
{
|
|
||||||
int tix = 0;
|
|
||||||
rpmds ds;
|
|
||||||
rpmds triggers = rpmdsNew(trigH, RPMTAG_TRANSFILETRIGGERNAME, 0);
|
|
||||||
|
|
||||||
while ((ds = rpmdsFilterTi(triggers, tix))) {
|
|
||||||
- if ((rpmdsNext(ds) >= 0) && (rpmdsFlags(ds) & filter)) {
|
|
||||||
+ if ((rpmdsNext(ds) >= 0) && (rpmdsFlags(ds) & filter) &&
|
|
||||||
+ strcmp(prefix, rpmdsN(ds)) == 0) {
|
|
||||||
struct rpmtd_s priorities;
|
|
||||||
|
|
||||||
if (headerGet(trigH, RPMTAG_TRANSFILETRIGGERPRIORITIES,
|
|
||||||
@@ -141,12 +143,13 @@ void rpmtriggersPrepPostUnTransFileTrigs(rpmts ts, rpmte te)
|
|
||||||
if (RPMFILE_IS_INSTALLED(rpmfiFState(fi))) {
|
|
||||||
unsigned int npkg = rpmdbIndexIteratorNumPkgs(ii);
|
|
||||||
const unsigned int *offs = rpmdbIndexIteratorPkgOffsets(ii);
|
|
||||||
- /* Save any matching postun triggers */
|
|
||||||
+ /* Save any postun triggers matching this prefix */
|
|
||||||
for (int i = 0; i < npkg; i++) {
|
|
||||||
Header h = rpmdbGetHeaderAt(rpmtsGetRdb(ts), offs[i]);
|
|
||||||
- addTriggers(ts, h, RPMSENSE_TRIGGERPOSTUN);
|
|
||||||
+ addTriggers(ts, h, RPMSENSE_TRIGGERPOSTUN, pfx);
|
|
||||||
headerFree(h);
|
|
||||||
}
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rpmfiFree(fi);
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
9
rpm.spec
9
rpm.spec
@ -28,9 +28,9 @@
|
|||||||
|
|
||||||
%define rpmhome /usr/lib/rpm
|
%define rpmhome /usr/lib/rpm
|
||||||
|
|
||||||
%global rpmver 4.17.0
|
%global rpmver 4.17.1
|
||||||
#global snapver rc1
|
#global snapver rc1
|
||||||
%global rel 4
|
%global rel 1
|
||||||
%global sover 9
|
%global sover 9
|
||||||
|
|
||||||
%global srcver %{rpmver}%{?snapver:-%{snapver}}
|
%global srcver %{rpmver}%{?snapver:-%{snapver}}
|
||||||
@ -51,8 +51,6 @@ Patch1: rpm-4.17.x-siteconfig.patch
|
|||||||
Patch3: rpm-4.9.90-no-man-dirs.patch
|
Patch3: rpm-4.9.90-no-man-dirs.patch
|
||||||
|
|
||||||
# Patches already upstream:
|
# Patches already upstream:
|
||||||
Patch100: 0001-Fix-spurious-transfiletriggerpostun-execution-RhBug-.patch
|
|
||||||
Patch101: 0001-Really-fix-spurious-transfiletriggerpostun-execution.patch
|
|
||||||
|
|
||||||
# These are not yet upstream
|
# These are not yet upstream
|
||||||
Patch906: rpm-4.7.1-geode-i686.patch
|
Patch906: rpm-4.7.1-geode-i686.patch
|
||||||
@ -581,6 +579,9 @@ fi
|
|||||||
%doc docs/librpm/html/*
|
%doc docs/librpm/html/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jul 01 2022 Michal Domonkos <mdomonko@redhat.com> - 4.17.1-1
|
||||||
|
- Rebase to rpm 4.17.1 (http://rpm.org/wiki/Releases/4.17.1)
|
||||||
|
|
||||||
* Wed Feb 02 2022 Panu Matilainen <pmatilai@redhat.com> - 4.17.0-4
|
* Wed Feb 02 2022 Panu Matilainen <pmatilai@redhat.com> - 4.17.0-4
|
||||||
- Really fix spurious %%transfiletriggerpostun execution (#2023311, #2048168)
|
- Really fix spurious %%transfiletriggerpostun execution (#2023311, #2048168)
|
||||||
|
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (rpm-4.17.0.tar.bz2) = d32af8649c6d47796a645b6ecbe580df97f5423bfb17414d5ed0016373f5cfab86ebcfad6c480fb8bfafaf3a960f9bc095ef6faad7b40bdb208cc60e4080b0c8
|
SHA512 (rpm-4.17.1.tar.bz2) = d0429510140f25a25b6c9441abe2027d27c485bbd4969752f69e1c843435c9508b9f85e5bb68085dd64b7da533801aa5c04d8c9d962e08d2ddd3199d0265cc85
|
||||||
|
Loading…
Reference in New Issue
Block a user