X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fsolver_util.c;h=79faaf25301fff8fad474b71534ee3af49c2ae67;hb=d7f392b2f466c04078ccda3c9871b18edc0cdd86;hp=fb17bf4dc7eeffb7704311200f34e669a8edf4d2;hpb=79b3a6b7ab494c5ff10e740fd147f21a04907907;p=platform%2Fupstream%2Flibsolv.git diff --git a/src/solver_util.c b/src/solver_util.c index fb17bf4..79faaf2 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; }