- change findproblemrule heuristics so that it looks at the arch
authorMichael Schroeder <mls@suse.de>
Mon, 17 Nov 2008 18:46:25 +0000 (18:46 +0000)
committerMichael Schroeder <mls@suse.de>
Mon, 17 Nov 2008 18:46:25 +0000 (18:46 +0000)
  [bnc#445432]

src/solver.c

index 6747c10..923cb33 100644 (file)
@@ -3783,18 +3783,22 @@ findproblemrule_internal(Solver *solv, Id idx, Id *reqrp, Id *conrp, Id *sysrp,
            {
              if (!d && r->w2 == 0 && !reqassert)
                {
-                 /* prefer assertions (XXX: bad idea?) */
+                 if (*reqrp > 0 && r->p < -1)
+                   {
+                     Id op = -solv->rules[*reqrp].p;
+                     if (op > 1 && solv->pool->solvables[op].arch != solv->pool->solvables[-r->p].arch)
+                       continue;       /* different arch, skip */
+                   }
+                 /* prefer assertions */
                  *reqrp = rid;
                  reqassert = 1;
                }
              if (!*reqrp)
                *reqrp = rid;
-             else if (solv->installed && r->p < 0 && solv->pool->solvables[-r->p].repo == solv->installed)
+             else if (solv->installed && r->p < 0 && solv->pool->solvables[-r->p].repo == solv->installed && !reqassert)
                {
                  /* prefer rules of installed packages */
-                 Id op = *reqrp >= 0 ? solv->rules[*reqrp].p : -*reqrp;
-                 if (op <= 0 || solv->pool->solvables[op].repo != solv->installed)
-                   *reqrp = rid;
+                 *reqrp = rid;
                }
            }
        }