From: Michael Schroeder Date: Mon, 13 Mar 2017 12:04:47 +0000 (+0100) Subject: Do not erase solvables of a different color when requesting a specific solvable X-Git-Tag: 0.6.27~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=08f787b290b62c342e33431cd96dfd7bae6c443d;p=thirdparty%2Flibsolv.git Do not erase solvables of a different color when requesting a specific solvable --- diff --git a/src/solver.c b/src/solver.c index c7597466..fb1554a1 100644 --- a/src/solver.c +++ b/src/solver.c @@ -3528,7 +3528,7 @@ solver_solve(Solver *solv, Queue *job) Map installcandidatemap; Id how, what, select, name, weak, p, pp, d; Queue q; - Solvable *s; + Solvable *s, *name_s; Rule *r; int now, solve_start; int needduprules = 0; @@ -4020,6 +4020,7 @@ solver_solve(Solver *solv, Queue *job) map_grow(&solv->cleandepsmap, installed->end - installed->start); /* specific solvable: by id or by nevra */ name = (select == SOLVER_SOLVABLE || (select == SOLVER_SOLVABLE_NAME && ISRELDEP(what))) ? 0 : -1; + name_s = 0; if (select == SOLVER_SOLVABLE_ALL) /* hmmm ;) */ { FOR_POOL_SOLVABLES(p) @@ -4046,7 +4047,10 @@ solver_solve(Solver *solv, Queue *job) { s = pool->solvables + p; if (installed && s->repo == installed) - name = !name ? s->name : -1; + { + name = !name ? s->name : -1; + name_s = s; + } solver_addjobrule(solv, -p, 0, 0, i, weak); } /* special case for "erase a specific solvable": we also @@ -4070,6 +4074,8 @@ solver_solve(Solver *solv, Queue *job) /* keep installcandidates of other jobs */ if (MAPTST(&installcandidatemap, p)) continue; + if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, name_s, s)) + continue; /* don't add the same rule twice */ for (j = oldnrules; j < k; j++) if (solv->rules[j].p == -p)