]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
solver_samerule -> solver_rulecmp
authorMichael Schroeder <mls@suse.de>
Tue, 20 Nov 2012 14:40:56 +0000 (15:40 +0100)
committerMichael Schroeder <mls@suse.de>
Tue, 20 Nov 2012 14:40:56 +0000 (15:40 +0100)
src/libsolv.ver
src/rules.c
src/rules.h
src/solver.c
src/transaction.c

index 626277788c401bc4b849eb3aa9b779354406bf1b..4296b1a15430015cf19edf49e709bdca9cd2955a 100644 (file)
@@ -342,7 +342,7 @@ SOLV_1.0 {
                solver_ruleclass;
                solver_ruleinfo;
                solver_ruleliterals;
-               solver_samerule;
+               solver_rulecmp;
                solver_select2str;
                solver_set_flag;
                solver_solution_count;
index 88ab0a19ba915752bd5f9eeb82e0edc135646cda..537d3207ef1b268051f13287492a300b38b34d41 100644 (file)
@@ -122,7 +122,7 @@ unifyrules_sortcmp(const void *ap, const void *bp, void *dp)
 }
 
 int
-solver_samerule(Solver *solv, Rule *r1, Rule *r2)
+solver_rulecmp(Solver *solv, Rule *r1, Rule *r2)
 {
   return unifyrules_sortcmp(r1, r2, solv->pool);
 }
index ea56aa7523de3c22450f5ce7308ab52e0cc91067..d42b22b48ef88fb22651020d2e57cbd265456c09 100644 (file)
@@ -97,7 +97,7 @@ solver_enablerule(struct _Solver *solv, Rule *r)
 
 extern Rule *solver_addrule(struct _Solver *solv, Id p, Id d);
 extern void solver_unifyrules(struct _Solver *solv);
-extern int solver_samerule(struct _Solver *solv, Rule *r1, Rule *r2);
+extern int solver_rulecmp(struct _Solver *solv, Rule *r1, Rule *r2);
 
 /* rpm rules */
 extern void solver_addrpmrulesforsolvable(struct _Solver *solv, Solvable *s, Map *m);
index 98804427b230eb2bb1b48107df389e7ddc4285ee..a1dec9203b180ff9240d69e340d9aeabd576bbb5 100644 (file)
@@ -3000,7 +3000,7 @@ solver_solve(Solver *solv, Queue *job)
              assert(solv->dupmap_all && !sr->p);
              continue;
            }
-         if (!solver_samerule(solv, r, sr))
+         if (!solver_rulecmp(solv, r, sr))
            memset(sr, 0, sizeof(*sr));         /* delete unneeded feature rule */
          else
            solver_disablerule(solv, sr);       /* disable feature rule */
index 816e1254bec1bb35260fba6825bded238324144c..31c463713e2d8967f757bdb60cf137c24ea1bed8 100644 (file)
@@ -575,8 +575,7 @@ create_transaction_info(Transaction *trans, Queue *decisionq)
            continue;
          if (pool->obsoleteusescolors && !pool_colormatch(pool, s, s2))
            continue;
-         queue_push(ti, p);
-         queue_push(ti, p2);
+         queue_push2(ti, p, p2);
        }
       if (s->obsoletes && !noobs)
        {
@@ -592,24 +591,27 @@ create_transaction_info(Transaction *trans, Queue *decisionq)
                    continue;
                  if (pool->obsoleteusescolors && !pool_colormatch(pool, s, s2))
                    continue;
-                 queue_push(ti, p);
-                 queue_push(ti, p2);
+                 queue_push2(ti, p, p2);
                }
            }
        }
     }
-  solv_sort(ti->elements, ti->count / 2, 2 * sizeof(Id), obsq_sortcmp, pool);
-  /* now unify */
-  for (i = j = 0; i < ti->count; i += 2)
+  if (ti->count > 2)
     {
-      if (j && ti->elements[i] == ti->elements[j - 2] && ti->elements[i + 1] == ti->elements[j - 1])
-       continue;
-      ti->elements[j++] = ti->elements[i];
-      ti->elements[j++] = ti->elements[i + 1];
+      /* sort and unify */
+      solv_sort(ti->elements, ti->count / 2, 2 * sizeof(Id), obsq_sortcmp, pool);
+      for (i = j = 2; i < ti->count; i += 2)
+       {
+         if (ti->elements[i] == ti->elements[j - 2] && ti->elements[i + 1] == ti->elements[j - 1])
+           continue;
+         ti->elements[j++] = ti->elements[i];
+         ti->elements[j++] = ti->elements[i + 1];
+       }
+      queue_truncate(ti, j);
     }
-  ti->count = j;
 
   /* create transaction_installed helper */
+  /*   entry > 0: exactly one obsoleter, entry < 0: multiple obsoleters, -entry is "best" */
   trans->transaction_installed = solv_calloc(installed->end - installed->start, sizeof(Id));
   for (i = 0; i < ti->count; i += 2)
     {
@@ -618,7 +620,7 @@ create_transaction_info(Transaction *trans, Queue *decisionq)
        trans->transaction_installed[j] = ti->elements[i];
       else
        {
-         /* more than one package obsoletes us. compare */
+         /* more than one package obsoletes us. compare to find "best" */
          Id q[4];
          if (trans->transaction_installed[j] > 0)
            trans->transaction_installed[j] = -trans->transaction_installed[j];