- look at infarch/dup rules when creating choice rules, makes dup
authorMichael Schroeder <mls@suse.de>
Mon, 2 Nov 2009 13:12:33 +0000 (14:12 +0100)
committerMichael Schroeder <mls@suse.de>
Mon, 2 Nov 2009 13:12:33 +0000 (14:12 +0100)
  also install 32bit packages [bnc#551637]

VERSION.cmake
package/libsatsolver.changes
src/rules.c

index 32c77a8..361a4a3 100644 (file)
@@ -46,6 +46,6 @@
 
 SET(LIBSATSOLVER_MAJOR "0")
 SET(LIBSATSOLVER_MINOR "14")
-SET(LIBSATSOLVER_PATCH "9")
+SET(LIBSATSOLVER_PATCH "10")
 
-# last released 0.14.9
+# last released 0.14.10
index 886264c..a536493 100644 (file)
@@ -1,4 +1,11 @@
 -------------------------------------------------------------------
+Mon Nov  2 14:10:23 CET 2009 - mls@suse.de
+
+- look at infarch/dup rules when creating choice rules, makes dup
+  also install 32bit packages [bnc#551637]
+- 0.14.10
+
+-------------------------------------------------------------------
 Wed Oct 14 16:21:32 CEST 2009 - mls@suse.de
 
 - ignore products element so that repo2solv works
index 28111de..4629c06 100644 (file)
@@ -1779,7 +1779,7 @@ void
 addchoicerules(Solver *solv)
 {
   Pool *pool = solv->pool;
-  Map m;
+  Map m, mneg;
   Rule *r;
   Queue q, qi;
   int i, j, rid, havechoice;
@@ -1797,6 +1797,14 @@ addchoicerules(Solver *solv)
   queue_init(&q);
   queue_init(&qi);
   map_init(&m, pool->nsolvables);
+  map_init(&mneg, pool->nsolvables);
+  /* set up negative assertion map from infarch and dup rules */
+  for (rid = solv->infarchrules, r = solv->rules + rid; rid < solv->infarchrules_end; rid++, r++)
+    if (r->p < 0 && !r->w2 && (r->d == 0 || r->d == -1))
+      MAPSET(&mneg, -r->p);
+  for (rid = solv->duprules, r = solv->rules + rid; rid < solv->duprules_end; rid++, r++)
+    if (r->p < 0 && !r->w2 && (r->d == 0 || r->d == -1))
+      MAPSET(&mneg, -r->p);
   for (rid = 1; rid < solv->rpmrules_end ; rid++)
     {
       r = solv->rules + rid;
@@ -1838,6 +1846,8 @@ addchoicerules(Solver *solv)
                continue;
              if (!solv->allowvendorchange && s->vendor != s2->vendor && policy_illegal_vendorchange(solv, s, s2))
                continue;
+             if (MAPSET(&mneg, p2))
+               continue;
              queue_push(&qi, p2);
              queue_push(&q, p);
              continue;
@@ -1869,6 +1879,8 @@ addchoicerules(Solver *solv)
                    continue;
                  if (!solv->allowvendorchange && s->vendor != s2->vendor && policy_illegal_vendorchange(solv, s, s2))
                    continue;
+                 if (MAPSET(&mneg, p2))
+                   continue;
                  queue_push(&qi, p2);
                  queue_push(&q, p);
                  continue;
@@ -1927,6 +1939,7 @@ addchoicerules(Solver *solv)
   queue_free(&q);
   queue_free(&qi);
   map_free(&m);
+  map_free(&mneg);
   solv->choicerules_end = solv->nrules;
 }