#endif
-/*
- * prune to recommended/suggested packages.
- * does not prune installed packages (they are also somewhat recommended).
- */
-static void
-prune_to_recommended(Solver *solv, Queue *plist)
+void
+policy_update_recommendsmap(Solver *solv)
{
Pool *pool = solv->pool;
- int i, j, k, ninst;
Solvable *s;
Id p, pp, rec, *recp, sug, *sugp;
- ninst = 0;
- if (pool->installed)
- {
- for (i = 0; i < plist->count; i++)
- {
- p = plist->elements[i];
- s = pool->solvables + p;
- if (pool->installed && s->repo == pool->installed)
- ninst++;
- }
- }
- if (plist->count - ninst < 2)
- return;
-
- /* update our recommendsmap/suggestsmap */
if (solv->recommends_index < 0)
{
MAPZERO(&solv->recommendsmap);
}
}
}
+}
+
+/*
+ * prune to recommended/suggested packages.
+ * does not prune installed packages (they are also somewhat recommended).
+ */
+
+static void
+prune_to_recommended(Solver *solv, Queue *plist)
+{
+ Pool *pool = solv->pool;
+ int i, j, k, ninst;
+ Solvable *s;
+ Id p;
+
+ ninst = 0;
+ if (pool->installed)
+ {
+ for (i = 0; i < plist->count; i++)
+ {
+ p = plist->elements[i];
+ s = pool->solvables + p;
+ if (pool->installed && s->repo == pool->installed)
+ ninst++;
+ }
+ }
+ if (plist->count - ninst < 2)
+ return;
+
+ /* update our recommendsmap/suggestsmap */
+ if (solv->recommends_index < solv->decisionq.count)
+ policy_update_recommendsmap(solv);
/* prune to recommended/supplemented */
ninst = 0;
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;
}
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 */
{
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;
}
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;
queue_push(qs, p);
}
}