Mageia Bugzilla – Attachment 9433 Details for
Bug 18797
rpm fails to run glib-2.0 %transfiletriggerin which breaks gnote
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
New Account
|
Forgot Password
[patch]
Debug patch
rpm-debug-filetriggers.patch (text/plain), 8.13 KB, created by
Pascal Terjan
on 2017-06-20 20:03:35 CEST
(
hide
)
Description:
Debug patch
Filename:
MIME Type:
Creator:
Pascal Terjan
Created:
2017-06-20 20:03:35 CEST
Size:
8.13 KB
patch
obsolete
>diff -ru rpm-4.13.0.1.orig/lib/psm.c rpm-4.13.0.1/lib/psm.c >--- rpm-4.13.0.1.orig/lib/psm.c 2016-11-30 07:12:37.267947162 +0000 >+++ rpm-4.13.0.1/lib/psm.c 2017-06-20 18:19:56.550000000 +0100 >@@ -820,6 +820,8 @@ > case PKG_VERIFY: return " verify"; > case PKG_PRETRANS: return " pretrans"; > case PKG_POSTTRANS: return "posttrans"; >+ case PKG_TRANSFILETRIGGERIN: return "transfileinstall"; >+ case PKG_TRANSFILETRIGGERUN: return "transfileerase"; > default: return "unknown"; > } > } >diff -ru rpm-4.13.0.1.orig/lib/rpmtriggers.c rpm-4.13.0.1/lib/rpmtriggers.c >--- rpm-4.13.0.1.orig/lib/rpmtriggers.c 2017-02-16 09:40:09.904649460 +0000 >+++ rpm-4.13.0.1/lib/rpmtriggers.c 2017-06-20 18:21:11.060000000 +0100 >@@ -1,5 +1,6 @@ > #include "system.h" > >+#include <rpm/rpmlog.h> > #include <rpm/rpmts.h> > #include <rpm/rpmdb.h> > #include <rpm/rpmds.h> >@@ -108,6 +109,7 @@ > rpmds rpmdsTrigger; > int tix = 0; > >+ rpmlog(RPMLOG_DEBUG, "rpmtriggersPrepPostUnTransFileTrigs\n"); > ii = rpmdbIndexIteratorInit(rpmtsGetRdb(ts), RPMDBI_TRANSFILETRIGGERNAME); > mi = rpmdbNewIterator(rpmtsGetRdb(ts), RPMDBI_PACKAGES); > files = rpmteFiles(te); >@@ -117,9 +119,11 @@ > char pfx[keylen + 1]; > memcpy(pfx, key, keylen); > pfx[keylen] = '\0'; >+ rpmlog(RPMLOG_DEBUG, "Checking if %s matches\n", pfx); > /* Check if file trigger matches any file in this te */ > rpmfi fi = rpmfilesFindPrefix(files, pfx); > if (rpmfiFC(fi) > 0) { >+ rpmlog(RPMLOG_DEBUG, "It does!\n"); > /* If yes then store it */ > rpmdbAppendIterator(mi, rpmdbIndexIteratorPkgOffsets(ii), > rpmdbIndexIteratorNumPkgs(ii)); >@@ -271,10 +275,13 @@ > > /* If inTransaction is set then filter out packages that aren't in transaction */ > if (inTransaction) { >- if (sense & RPMSENSE_TRIGGERIN) >+ if (sense & RPMSENSE_TRIGGERIN) { >+ rpmlog(RPMLOG_DEBUG, "Restricting to packages installed in this transaction\n"); > mfi->tranPkgs = ts->members->installedPackages; >- else >+ } else { >+ rpmlog(RPMLOG_DEBUG, "Restricting to packages removed in this transaction\n"); > mfi->tranPkgs = ts->members->removedPackages; >+ } > } > return mfi; > } >@@ -387,7 +394,6 @@ > */ > if ((rpmdsNext(rpmdsTrigger) >= 0) && > (rpmdsFlags(rpmdsTrigger) & sense)) { >- > switch (searchMode) { > case 0: > /* Create iterator over files in te that this trigger matches */ >@@ -405,7 +411,10 @@ > } > > /* If this trigger matches any file then run trigger script */ >- if (!matchFilesEmpty(mfi)) { >+ if (matchFilesEmpty(mfi)) { >+ rpmlog(RPMLOG_DEBUG, "matchFilesEmpty\n"); >+ } else { >+ rpmlog(RPMLOG_DEBUG, "There is a match, runnning script\n"); > script = rpmScriptFromTriggerTag(h, triggertag(sense), tm, ti); > > headerGet(h, RPMTAG_INSTPREFIXES, &installPrefixes, >@@ -458,17 +467,22 @@ > int rc = 1; > rpmdbMatchIterator pi; > >+ rpmlog(RPMLOG_DEBUG, "matchFilesInTran\n"); > /* Get all files from rpmdb starting with pfx */ > pi = rpmdbInitPrefixIterator(rpmtsGetRdb(ts), RPMDBI_DIRNAMES, pfx, 0); >+ rpmlog(RPMLOG_DEBUG, "Found %d matches\n", rpmdbGetIteratorCount(pi)); > >- if (sense & RPMSENSE_TRIGGERIN) >+ if (sense & RPMSENSE_TRIGGERIN) { > /* Leave in pi only files installed in ts */ >+ rpmlog(RPMLOG_DEBUG, "Dropping packages not installed\n"); > rpmdbFilterIterator(pi, ts->members->installedPackages, 0); >- else >+ } else { > /* Leave in pi only files removed in ts */ >+ rpmlog(RPMLOG_DEBUG, "Dropping packages not removed\n"); > rpmdbFilterIterator(pi, ts->members->removedPackages, 0); >- >+ } > rc = rpmdbGetIteratorCount(pi); >+ rpmlog(RPMLOG_DEBUG, "Found %d matches after filtering\n", rc); > rpmdbFreeIterator(pi); > > return rc; >@@ -487,11 +501,14 @@ > rpmTagVal priorityTag; > rpmtriggers triggers = rpmtriggersCreate(10); > >+ rpmlog(RPMLOG_DEBUG, "runFileTriggers\n"); > /* Decide if we match triggers against files in te or in whole ts */ > if (tm == RPMSCRIPT_FILETRIGGER) { >+ rpmlog(RPMLOG_DEBUG, "Searching only in package\n"); > matchFunc = matchFilesInPkg; > priorityTag = RPMTAG_FILETRIGGERPRIORITIES; > } else { >+ rpmlog(RPMLOG_DEBUG, "Searching in whole transaction\n"); > matchFunc = matchFilesInTran; > priorityTag = RPMTAG_TRANSFILETRIGGERPRIORITIES; > } >@@ -503,9 +520,11 @@ > pfx = xmalloc(keylen + 1); > memcpy(pfx, key, keylen); > pfx[keylen] = '\0'; >+ rpmlog(RPMLOG_DEBUG, "Checking if %s matches\n", pfx); > > /* Check if file trigger is fired by any file in ts/te */ > if (matchFunc(ts, te, pfx, sense)) { >+ rpmlog(RPMLOG_DEBUG, "It does!\n"); > for (i = 0; i < rpmdbIndexIteratorNumPkgs(ii); i++) { > struct rpmtd_s priorities; > unsigned int priority; >@@ -519,8 +538,10 @@ > */ > if (tm == RPMSCRIPT_TRANSFILETRIGGER && > (packageHashHasEntry(ts->members->removedPackages, offset) || >- packageHashHasEntry(ts->members->installedPackages, offset))) >+ packageHashHasEntry(ts->members->installedPackages, offset))) { >+ rpmlog(RPMLOG_DEBUG, "Skipping trigger as it comes from a package in this transaction\n"); > continue; >+ } > > /* Get priority of trigger from header */ > trigH = rpmdbGetHeaderAt(rpmtsGetRdb(ts), offset); >@@ -530,6 +551,7 @@ > headerFree(trigH); > > /* Store file trigger in array */ >+ rpmlog(RPMLOG_DEBUG, "Adding trigger on %s from offset %d (i=%d, priority=%d, tix=%d)\n", pfx, offset, i, priority, tix); > rpmtriggersAdd(triggers, offset, tix, priority); > } > } >@@ -548,20 +570,26 @@ > /* Handle stored triggers */ > for (i = 0; i < triggers->count; i++) { > if (priorityClass == 1) { >- if (triggers->triggerInfo[i].priority < TRIGGER_PRIORITY_BOUND) >+ if (triggers->triggerInfo[i].priority < TRIGGER_PRIORITY_BOUND) { >+ rpmlog(RPMLOG_DEBUG, "Dropping trigger %d as priority is too low (%d < %d)\n", i, triggers->triggerInfo[i].priority, TRIGGER_PRIORITY_BOUND); > continue; >+ } > } else if (priorityClass == 2) { >- if (triggers->triggerInfo[i].priority >= TRIGGER_PRIORITY_BOUND) >+ if (triggers->triggerInfo[i].priority >= TRIGGER_PRIORITY_BOUND) { >+ rpmlog(RPMLOG_DEBUG, "Dropping trigger %d as priority is too high (%d >= %d)\n", i, triggers->triggerInfo[i].priority, TRIGGER_PRIORITY_BOUND); > continue; >+ } > } > > trigH = rpmdbGetHeaderAt(rpmtsGetRdb(ts), triggers->triggerInfo[i].hdrNum); > if (tm == RPMSCRIPT_FILETRIGGER) > nerrors += runHandleTriggersInPkg(ts, te, trigH, sense, tm, 0, > triggers->triggerInfo[i].tix); >- else >+ else { >+ rpmlog(RPMLOG_DEBUG, "runHandleTriggersInPkg on hdr %d (tix=%d)\n", triggers->triggerInfo[i].hdrNum, triggers->triggerInfo[i].tix); > nerrors += runHandleTriggersInPkg(ts, te, trigH, sense, tm, 1, > triggers->triggerInfo[i].tix); >+ } > headerFree(trigH); > } > rpmtriggersFree(triggers); >@@ -581,6 +609,7 @@ > rpmTagVal priorityTag; > rpmtriggers triggers; > >+ rpmlog(RPMLOG_DEBUG, "runImmedFileTriggers\n"); > if (tm == RPMSCRIPT_FILETRIGGER) { > priorityTag = RPMTAG_FILETRIGGERPRIORITIES; > } else { >@@ -597,6 +626,7 @@ > rpmtriggersAdd(triggers, 0, i, *rpmtdGetUint32(&priorities)); > } > >+ > /* Sort triggers by priority, offset, trigger index */ > rpmtriggersSortAndUniq(triggers); > >diff -ru rpm-4.13.0.1.orig/lib/transaction.c rpm-4.13.0.1/lib/transaction.c >--- rpm-4.13.0.1.orig/lib/transaction.c 2017-06-20 15:14:55.080000000 +0100 >+++ rpm-4.13.0.1/lib/transaction.c 2017-06-20 18:19:56.550000000 +0100 >@@ -1583,14 +1583,17 @@ > > /* Run file triggers in other package(s) this package sets off. */ > if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { >+ rpmlog(RPMLOG_DEBUG, "running post-transaction install file triggers\n"); > runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0); > } > if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { >+ rpmlog(RPMLOG_DEBUG, "running post-transaction erase file triggers\n"); > runPostUnTransFileTrigs(ts); > } > > /* Run file triggers in this package other package(s) set off. */ > if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { >+ rpmlog(RPMLOG_DEBUG, "running post-transaction something\n"); > runTransScripts(ts, PKG_TRANSFILETRIGGERIN); > } > exit:
diff -ru rpm-4.13.0.1.orig/lib/psm.c rpm-4.13.0.1/lib/psm.c --- rpm-4.13.0.1.orig/lib/psm.c 2016-11-30 07:12:37.267947162 +0000 +++ rpm-4.13.0.1/lib/psm.c 2017-06-20 18:19:56.550000000 +0100 @@ -820,6 +820,8 @@ case PKG_VERIFY: return " verify"; case PKG_PRETRANS: return " pretrans"; case PKG_POSTTRANS: return "posttrans"; + case PKG_TRANSFILETRIGGERIN: return "transfileinstall"; + case PKG_TRANSFILETRIGGERUN: return "transfileerase"; default: return "unknown"; } } diff -ru rpm-4.13.0.1.orig/lib/rpmtriggers.c rpm-4.13.0.1/lib/rpmtriggers.c --- rpm-4.13.0.1.orig/lib/rpmtriggers.c 2017-02-16 09:40:09.904649460 +0000 +++ rpm-4.13.0.1/lib/rpmtriggers.c 2017-06-20 18:21:11.060000000 +0100 @@ -1,5 +1,6 @@ #include "system.h" +#include <rpm/rpmlog.h> #include <rpm/rpmts.h> #include <rpm/rpmdb.h> #include <rpm/rpmds.h> @@ -108,6 +109,7 @@ rpmds rpmdsTrigger; int tix = 0; + rpmlog(RPMLOG_DEBUG, "rpmtriggersPrepPostUnTransFileTrigs\n"); ii = rpmdbIndexIteratorInit(rpmtsGetRdb(ts), RPMDBI_TRANSFILETRIGGERNAME); mi = rpmdbNewIterator(rpmtsGetRdb(ts), RPMDBI_PACKAGES); files = rpmteFiles(te); @@ -117,9 +119,11 @@ char pfx[keylen + 1]; memcpy(pfx, key, keylen); pfx[keylen] = '\0'; + rpmlog(RPMLOG_DEBUG, "Checking if %s matches\n", pfx); /* Check if file trigger matches any file in this te */ rpmfi fi = rpmfilesFindPrefix(files, pfx); if (rpmfiFC(fi) > 0) { + rpmlog(RPMLOG_DEBUG, "It does!\n"); /* If yes then store it */ rpmdbAppendIterator(mi, rpmdbIndexIteratorPkgOffsets(ii), rpmdbIndexIteratorNumPkgs(ii)); @@ -271,10 +275,13 @@ /* If inTransaction is set then filter out packages that aren't in transaction */ if (inTransaction) { - if (sense & RPMSENSE_TRIGGERIN) + if (sense & RPMSENSE_TRIGGERIN) { + rpmlog(RPMLOG_DEBUG, "Restricting to packages installed in this transaction\n"); mfi->tranPkgs = ts->members->installedPackages; - else + } else { + rpmlog(RPMLOG_DEBUG, "Restricting to packages removed in this transaction\n"); mfi->tranPkgs = ts->members->removedPackages; + } } return mfi; } @@ -387,7 +394,6 @@ */ if ((rpmdsNext(rpmdsTrigger) >= 0) && (rpmdsFlags(rpmdsTrigger) & sense)) { - switch (searchMode) { case 0: /* Create iterator over files in te that this trigger matches */ @@ -405,7 +411,10 @@ } /* If this trigger matches any file then run trigger script */ - if (!matchFilesEmpty(mfi)) { + if (matchFilesEmpty(mfi)) { + rpmlog(RPMLOG_DEBUG, "matchFilesEmpty\n"); + } else { + rpmlog(RPMLOG_DEBUG, "There is a match, runnning script\n"); script = rpmScriptFromTriggerTag(h, triggertag(sense), tm, ti); headerGet(h, RPMTAG_INSTPREFIXES, &installPrefixes, @@ -458,17 +467,22 @@ int rc = 1; rpmdbMatchIterator pi; + rpmlog(RPMLOG_DEBUG, "matchFilesInTran\n"); /* Get all files from rpmdb starting with pfx */ pi = rpmdbInitPrefixIterator(rpmtsGetRdb(ts), RPMDBI_DIRNAMES, pfx, 0); + rpmlog(RPMLOG_DEBUG, "Found %d matches\n", rpmdbGetIteratorCount(pi)); - if (sense & RPMSENSE_TRIGGERIN) + if (sense & RPMSENSE_TRIGGERIN) { /* Leave in pi only files installed in ts */ + rpmlog(RPMLOG_DEBUG, "Dropping packages not installed\n"); rpmdbFilterIterator(pi, ts->members->installedPackages, 0); - else + } else { /* Leave in pi only files removed in ts */ + rpmlog(RPMLOG_DEBUG, "Dropping packages not removed\n"); rpmdbFilterIterator(pi, ts->members->removedPackages, 0); - + } rc = rpmdbGetIteratorCount(pi); + rpmlog(RPMLOG_DEBUG, "Found %d matches after filtering\n", rc); rpmdbFreeIterator(pi); return rc; @@ -487,11 +501,14 @@ rpmTagVal priorityTag; rpmtriggers triggers = rpmtriggersCreate(10); + rpmlog(RPMLOG_DEBUG, "runFileTriggers\n"); /* Decide if we match triggers against files in te or in whole ts */ if (tm == RPMSCRIPT_FILETRIGGER) { + rpmlog(RPMLOG_DEBUG, "Searching only in package\n"); matchFunc = matchFilesInPkg; priorityTag = RPMTAG_FILETRIGGERPRIORITIES; } else { + rpmlog(RPMLOG_DEBUG, "Searching in whole transaction\n"); matchFunc = matchFilesInTran; priorityTag = RPMTAG_TRANSFILETRIGGERPRIORITIES; } @@ -503,9 +520,11 @@ pfx = xmalloc(keylen + 1); memcpy(pfx, key, keylen); pfx[keylen] = '\0'; + rpmlog(RPMLOG_DEBUG, "Checking if %s matches\n", pfx); /* Check if file trigger is fired by any file in ts/te */ if (matchFunc(ts, te, pfx, sense)) { + rpmlog(RPMLOG_DEBUG, "It does!\n"); for (i = 0; i < rpmdbIndexIteratorNumPkgs(ii); i++) { struct rpmtd_s priorities; unsigned int priority; @@ -519,8 +538,10 @@ */ if (tm == RPMSCRIPT_TRANSFILETRIGGER && (packageHashHasEntry(ts->members->removedPackages, offset) || - packageHashHasEntry(ts->members->installedPackages, offset))) + packageHashHasEntry(ts->members->installedPackages, offset))) { + rpmlog(RPMLOG_DEBUG, "Skipping trigger as it comes from a package in this transaction\n"); continue; + } /* Get priority of trigger from header */ trigH = rpmdbGetHeaderAt(rpmtsGetRdb(ts), offset); @@ -530,6 +551,7 @@ headerFree(trigH); /* Store file trigger in array */ + rpmlog(RPMLOG_DEBUG, "Adding trigger on %s from offset %d (i=%d, priority=%d, tix=%d)\n", pfx, offset, i, priority, tix); rpmtriggersAdd(triggers, offset, tix, priority); } } @@ -548,20 +570,26 @@ /* Handle stored triggers */ for (i = 0; i < triggers->count; i++) { if (priorityClass == 1) { - if (triggers->triggerInfo[i].priority < TRIGGER_PRIORITY_BOUND) + if (triggers->triggerInfo[i].priority < TRIGGER_PRIORITY_BOUND) { + rpmlog(RPMLOG_DEBUG, "Dropping trigger %d as priority is too low (%d < %d)\n", i, triggers->triggerInfo[i].priority, TRIGGER_PRIORITY_BOUND); continue; + } } else if (priorityClass == 2) { - if (triggers->triggerInfo[i].priority >= TRIGGER_PRIORITY_BOUND) + if (triggers->triggerInfo[i].priority >= TRIGGER_PRIORITY_BOUND) { + rpmlog(RPMLOG_DEBUG, "Dropping trigger %d as priority is too high (%d >= %d)\n", i, triggers->triggerInfo[i].priority, TRIGGER_PRIORITY_BOUND); continue; + } } trigH = rpmdbGetHeaderAt(rpmtsGetRdb(ts), triggers->triggerInfo[i].hdrNum); if (tm == RPMSCRIPT_FILETRIGGER) nerrors += runHandleTriggersInPkg(ts, te, trigH, sense, tm, 0, triggers->triggerInfo[i].tix); - else + else { + rpmlog(RPMLOG_DEBUG, "runHandleTriggersInPkg on hdr %d (tix=%d)\n", triggers->triggerInfo[i].hdrNum, triggers->triggerInfo[i].tix); nerrors += runHandleTriggersInPkg(ts, te, trigH, sense, tm, 1, triggers->triggerInfo[i].tix); + } headerFree(trigH); } rpmtriggersFree(triggers); @@ -581,6 +609,7 @@ rpmTagVal priorityTag; rpmtriggers triggers; + rpmlog(RPMLOG_DEBUG, "runImmedFileTriggers\n"); if (tm == RPMSCRIPT_FILETRIGGER) { priorityTag = RPMTAG_FILETRIGGERPRIORITIES; } else { @@ -597,6 +626,7 @@ rpmtriggersAdd(triggers, 0, i, *rpmtdGetUint32(&priorities)); } + /* Sort triggers by priority, offset, trigger index */ rpmtriggersSortAndUniq(triggers); diff -ru rpm-4.13.0.1.orig/lib/transaction.c rpm-4.13.0.1/lib/transaction.c --- rpm-4.13.0.1.orig/lib/transaction.c 2017-06-20 15:14:55.080000000 +0100 +++ rpm-4.13.0.1/lib/transaction.c 2017-06-20 18:19:56.550000000 +0100 @@ -1583,14 +1583,17 @@ /* Run file triggers in other package(s) this package sets off. */ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { + rpmlog(RPMLOG_DEBUG, "running post-transaction install file triggers\n"); runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0); } if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { + rpmlog(RPMLOG_DEBUG, "running post-transaction erase file triggers\n"); runPostUnTransFileTrigs(ts); } /* Run file triggers in this package other package(s) set off. */ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { + rpmlog(RPMLOG_DEBUG, "running post-transaction something\n"); runTransScripts(ts, PKG_TRANSFILETRIGGERIN); } exit:
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 18797
:
9147
| 9433 |
9434