Blob Blame History Raw
From 08f787b290b62c342e33431cd96dfd7bae6c443d Mon Sep 17 00:00:00 2001
From: Michael Schroeder <mls@suse.de>
Date: Mon, 13 Mar 2017 13:04:47 +0100
Subject: [PATCH 1/3] Do not erase solvables of a different color when
 requesting a specific solvable

---
 src/solver.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/solver.c b/src/solver.c
index c759746..fb1554a 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)
-- 
2.12.1