From d3791d00832eb0cbe1ef02a84b140d570c27ab4249d3614ed75f95d09d282b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Fri, 27 Sep 2013 13:16:06 +0000 Subject: [PATCH] - add selfconflicts.diff OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=295 --- rpm.changes | 8 +++++- rpm.spec | 3 ++- selfconflicts.diff | 67 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 selfconflicts.diff diff --git a/rpm.changes b/rpm.changes index aaf2e8f..a046453 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Fri Sep 27 15:13:45 CEST 2013 - mls@suse.de + +- add selfconflicts.diff: fix self-conflicts and self-obsoletes + handling for verify operations [bnc#838133] + ------------------------------------------------------------------- Tue Sep 24 10:36:15 UTC 2013 - mail@bernhard-voelker.de @@ -9,7 +15,7 @@ Tue Sep 24 10:36:15 UTC 2013 - mail@bernhard-voelker.de Wed Sep 11 18:28:39 CEST 2013 - mls@suse.de - fix two bugs in the rpmstrPoolRehash() function: - adding strpoolrehash.diff and ignore_poolstr_dummy_entries.diff + adding strpoolrehash.diff and ignore_poolstr_dummy_entries.diff ------------------------------------------------------------------- Thu Sep 5 12:01:51 UTC 2013 - schwab@linux-m68k.org diff --git a/rpm.spec b/rpm.spec index 6316ce8..0916491 100644 --- a/rpm.spec +++ b/rpm.spec @@ -139,6 +139,7 @@ Patch84: beedigest.diff Patch85: brp-compress-no-img.patch Patch86: strpoolrehash.diff Patch87: ignore_poolstr_dummy_entries.diff +Patch88: selfconflicts.diff Patch6464: auto-config-update-aarch64.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build # @@ -225,7 +226,7 @@ rm -f rpmdb/db.h %patch -P 50 -P 51 -P 52 -P 53 -P 54 -P 55 -P 56 -P 57 -P 58 -P 59 %patch -P 60 -P 61 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69 %patch -P 70 -P 71 -P 72 -P 73 -P 74 -P 75 -P 76 -P 77 -P 78 -P 79 -%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 -P 86 -P 87 +%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 -P 86 -P 87 -P 88 %ifarch aarch64 %patch6464 %endif diff --git a/selfconflicts.diff b/selfconflicts.diff new file mode 100644 index 0000000..08088d6 --- /dev/null +++ b/selfconflicts.diff @@ -0,0 +1,67 @@ +From fae0eef24582dd9e071be8e884ff0851d4b57437 Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Fri, 27 Sep 2013 15:09:20 +0200 +Subject: [PATCH] Ignore self-obsoletes and self-conflicts in dependency check + code + +We already ignored them when checking against the added package list, +but not when checking against installed packages. Thus, rpm -V reported +them as errors. +--- + lib/depends.c | 26 ++++++++++++++++++++++++-- + 1 file changed, 24 insertions(+), 2 deletions(-) + +diff --git lib/depends.c lib/depends.c +index 3d70e68..3ef27bc 100644 +--- lib/depends.c ++++ lib/depends.c +@@ -504,6 +504,12 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep) + if (deptag != RPMTAG_OBSOLETENAME && Name[0] == '/') { + mi = rpmtsPrunedIterator(ts, RPMDBI_INSTFILENAMES, Name, prune); + while ((h = rpmdbNextIterator(mi)) != NULL) { ++ /* Ignore self-conflicts */ ++ if (deptag == RPMTAG_CONFLICTNAME) { ++ unsigned int instance = headerGetInstance(h); ++ if (instance && instance == rpmdsInstance(dep)) ++ continue; ++ } + rpmdsNotify(dep, "(db files)", rc); + break; + } +@@ -527,6 +533,12 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep) + int prix = (selfevr) ? -1 : rpmdbGetIteratorFileNum(mi); + int match = rpmdsMatches(tspool, h, prix, dep, selfevr, + _rpmds_nopromote); ++ /* Ignore self-obsoletes and self-conflicts */ ++ if (match && (deptag == RPMTAG_OBSOLETENAME || deptag == RPMTAG_CONFLICTNAME)) { ++ unsigned int instance = headerGetInstance(h); ++ if (instance && instance == rpmdsInstance(dep)) ++ match = 0; ++ } + if (match) { + rpmdsNotify(dep, "(db provides)", rc); + break; +@@ -672,8 +684,18 @@ static void checkInstDeps(rpmts ts, depCache dcache, rpmte te, + rpmstrPool pool = rpmtsPool(ts); + + while ((h = rpmdbNextIterator(mi)) != NULL) { +- char * pkgNEVRA = headerGetAsString(h, RPMTAG_NEVRA); +- rpmds ds = rpmdsNewPool(pool, h, depTag, 0); ++ char * pkgNEVRA; ++ rpmds ds; ++ ++ /* Ignore self-obsoletes and self-conflicts */ ++ if (depTag == RPMTAG_OBSOLETENAME || depTag == RPMTAG_CONFLICTNAME) { ++ unsigned int instance = headerGetInstance(h); ++ if (instance && instance == rpmteDBInstance(te)) ++ continue; ++ } ++ ++ pkgNEVRA = headerGetAsString(h, RPMTAG_NEVRA); ++ ds = rpmdsNewPool(pool, h, depTag, 0); + + checkDS(ts, dcache, te, pkgNEVRA, ds, dep, 0); + +-- +1.8.1.4 +