We will only consider packages of the same color as update candidate.
This currently also is true for the feature rules, thus the solver
will not offer to use replacement packages of a different color.
Let's see how this works out in real life...
ps = pool->solvables + p;
if (s->name == ps->name) /* name match */
{
ps = pool->solvables + p;
if (s->name == ps->name) /* name match */
{
- /* XXX: check implicitobsoleteusescolors? */
+ if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, ps))
+ continue;
if (!allowdowngrade && pool_evrcmp(pool, s->evr, ps->evr, EVRCMP_COMPARE) > 0)
continue;
}
if (!allowdowngrade && pool_evrcmp(pool, s->evr, ps->evr, EVRCMP_COMPARE) > 0)
continue;
}
continue;
else if (!solv->noupdateprovide && ps->obsoletes) /* provides/obsoletes combination ? */
{
continue;
else if (!solv->noupdateprovide && ps->obsoletes) /* provides/obsoletes combination ? */
{
+ /* check if package ps obsoletes installed package s */
+ /* implicitobsoleteusescolors is somewhat wrong here, but we nevertheless
+ * use it to limit our update candidates */
+ if ((pool->obsoleteusescolors || pool->implicitobsoleteusescolors) && !pool_colormatch(pool, s, ps))
+ continue;
obsp = ps->repo->idarraydata + ps->obsoletes;
while ((obs = *obsp++) != 0) /* for all obsoletes */
{
obsp = ps->repo->idarraydata + ps->obsoletes;
while ((obs = *obsp++) != 0) /* for all obsoletes */
{
Solvable *ps2 = pool->solvables + p2;
if (!pool->obsoleteusesprovides && !pool_match_nevr(pool, ps2, obs))
continue;
Solvable *ps2 = pool->solvables + p2;
if (!pool->obsoleteusesprovides && !pool_match_nevr(pool, ps2, obs))
continue;
- if (pool->obsoleteusescolors && !pool_colormatch(pool, s, ps2))
- continue;
if (p2 == n) /* match ! */
break;
}
if (p2 == n) /* match ! */
break;
}
continue;
if (!allowvendorchange && s->vendor != ps->vendor && policy_illegal_vendorchange(solv, s, ps))
continue;
continue;
if (!allowvendorchange && s->vendor != ps->vendor && policy_illegal_vendorchange(solv, s, ps))
continue;
+ /* implicitobsoleteusescolors is somewhat wrong here, but we nevertheless
+ * use it to limit our update candidates */
+ if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, ps))
+ continue;