From: Michael Schroeder Date: Tue, 8 Feb 2022 11:41:58 +0000 (+0100) Subject: Fix split provides not working if the update includes a forbidden vendor change X-Git-Tag: 0.7.21~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2857be8a3ecfbc6793589e267ab8784716370acf;p=thirdparty%2Flibsolv.git Fix split provides not working if the update includes a forbidden vendor change Check the feature rule instead of the update rule and make sure that the old package really is updated. --- diff --git a/src/solver_util.c b/src/solver_util.c index fb17bf4d..79faaf25 100644 --- a/src/solver_util.c +++ b/src/solver_util.c @@ -22,6 +22,7 @@ #include "pool.h" #include "poolarch.h" #include "util.h" +#include "evr.h" /*------------------------------------------------------------------- @@ -36,10 +37,18 @@ solver_is_updating(Solver *solv, Id p) Id l, pp; if (solv->decisionmap[p] >= 0) return 0; /* old package stayed */ - r = solv->rules + solv->updaterules + (p - solv->installed->start); + r = solv->rules + solv->featurerules + (p - solv->installed->start); + if (!r->p) + r = solv->rules + solv->updaterules + (p - solv->installed->start); FOR_RULELITERALS(l, pp, r) if (l > 0 && l != p && solv->decisionmap[l] > 0) - return 1; + { + /* check that this is really an upgrade */ + Solvable *si = pool->solvables + p; + Solvable *s = pool->solvables + l; + if (s->name != si->name || pool_evrcmp(pool, s->evr, si->evr, EVRCMP_COMPARE) > 0) + return 1; + } return 0; }