- disable update rule in noobsoletes case if installed package is to be kept, fixes...
authorMichael Schroeder <mls@suse.de>
Fri, 18 Dec 2009 17:08:49 +0000 (18:08 +0100)
committerMichael Schroeder <mls@suse.de>
Fri, 18 Dec 2009 17:08:49 +0000 (18:08 +0100)
src/rules.c
src/solverdebug.c

index 4629c06..897ed19 100644 (file)
@@ -928,11 +928,6 @@ solver_addupdaterule(Solver *solv, Solvable *s, int allow_all)
            }
          qs.elements[j++] = qs.elements[i];
        }
-      if (j == 0 && p == -SYSTEMSOLVABLE && solv->distupgrade)
-       {
-         queue_push(&solv->orphaned, s - pool->solvables);     /* treat as orphaned */
-         j = qs.count;
-       }
       if (j < qs.count)
        {
          if (d && solv->updatesystem && solv->installed && s->repo == solv->installed)
@@ -941,6 +936,11 @@ solver_addupdaterule(Solver *solv, Solvable *s, int allow_all)
                solv->multiversionupdaters = sat_calloc(solv->installed->end - solv->installed->start, sizeof(Id));
              solv->multiversionupdaters[s - pool->solvables - solv->installed->start] = d;
            }
+         if (j == 0 && p == -SYSTEMSOLVABLE && solv->distupgrade)
+           {
+             queue_push(&solv->orphaned, s - pool->solvables); /* treat as orphaned */
+             j = qs.count;
+           }
          qs.count = j;
        }
     }
@@ -1358,7 +1358,16 @@ jobtodisablelist(Solver *solv, Id how, Id what, Queue *q)
       if (!installed)
        return;
       if (solv->noobsoletes.size && MAPTST(&solv->noobsoletes, what))
-       return;
+       {
+         /* XXX: remove if we always do distupgrade with DUP rules */
+         if (solv->distupgrade && s->repo == installed)
+           {
+             queue_push(q, DISABLE_UPDATE);
+             queue_push(q, what);
+             return;
+           }
+         return;
+       }
       if (s->repo == installed)
        {
          queue_push(q, DISABLE_UPDATE);
index 1f1f9c6..c3dfd9b 100644 (file)
@@ -355,6 +355,8 @@ solver_printdecisions(Solver *solv)
         {
        case SOLVER_TRANSACTION_INSTALL:
        case SOLVER_TRANSACTION_ERASE:
+       case SOLVER_TRANSACTION_MULTIINSTALL:
+       case SOLVER_TRANSACTION_MULTIREINSTALL:
          POOL_DEBUG(SAT_DEBUG_RESULT, "\n");
          break;
        case SOLVER_TRANSACTION_REINSTALL: