diff --git a/.gitignore b/.gitignore index 8301e32..91251dc 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ /rpm-4.17.0-beta1.tar.bz2 /rpm-4.17.0-rc1.tar.bz2 /rpm-4.17.0.tar.bz2 +/rpm-4.17.1.tar.bz2 diff --git a/0001-Fix-spurious-transfiletriggerpostun-execution-RhBug-.patch b/0001-Fix-spurious-transfiletriggerpostun-execution-RhBug-.patch deleted file mode 100644 index dc8074f..0000000 --- a/0001-Fix-spurious-transfiletriggerpostun-execution-RhBug-.patch +++ /dev/null @@ -1,120 +0,0 @@ -From b3d672a5523dfec033160e5cc866432a0e808649 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Panu Matilainen -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 - diff --git a/0001-Really-fix-spurious-transfiletriggerpostun-execution.patch b/0001-Really-fix-spurious-transfiletriggerpostun-execution.patch deleted file mode 100644 index 72f42b6..0000000 --- a/0001-Really-fix-spurious-transfiletriggerpostun-execution.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 2d85f74afc3ccfa584dd8f0981673ff2b06277d1 Mon Sep 17 00:00:00 2001 -Message-Id: <2d85f74afc3ccfa584dd8f0981673ff2b06277d1.1643803240.git.pmatilai@redhat.com> -From: Panu Matilainen -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 - diff --git a/rpm.spec b/rpm.spec index 9775d12..6efc405 100644 --- a/rpm.spec +++ b/rpm.spec @@ -28,9 +28,9 @@ %define rpmhome /usr/lib/rpm -%global rpmver 4.17.0 +%global rpmver 4.17.1 #global snapver rc1 -%global rel 4 +%global rel 1 %global sover 9 %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 # Patches already upstream: -Patch100: 0001-Fix-spurious-transfiletriggerpostun-execution-RhBug-.patch -Patch101: 0001-Really-fix-spurious-transfiletriggerpostun-execution.patch # These are not yet upstream Patch906: rpm-4.7.1-geode-i686.patch @@ -581,6 +579,9 @@ fi %doc docs/librpm/html/* %changelog +* Fri Jul 01 2022 Michal Domonkos - 4.17.1-1 +- Rebase to rpm 4.17.1 (http://rpm.org/wiki/Releases/4.17.1) + * Wed Feb 02 2022 Panu Matilainen - 4.17.0-4 - Really fix spurious %%transfiletriggerpostun execution (#2023311, #2048168) diff --git a/sources b/sources index 5966020..25d310c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (rpm-4.17.0.tar.bz2) = d32af8649c6d47796a645b6ecbe580df97f5423bfb17414d5ed0016373f5cfab86ebcfad6c480fb8bfafaf3a960f9bc095ef6faad7b40bdb208cc60e4080b0c8 +SHA512 (rpm-4.17.1.tar.bz2) = d0429510140f25a25b6c9441abe2027d27c485bbd4969752f69e1c843435c9508b9f85e5bb68085dd64b7da533801aa5c04d8c9d962e08d2ddd3199d0265cc85