]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/algorithms.cc
use just one line for the debug output (thanks to donkult for the review)
[apt.git] / apt-pkg / algorithms.cc
index 75e914f7dda6e41a7a53478b7aa126089aedd1d8..c2c38e7287efca121603a7d70e04ae617bd3af2f 100644 (file)
@@ -550,7 +550,10 @@ void pkgProblemResolver::MakeScores()
    unsigned long Size = Cache.Head().PackageCount;
    memset(Scores,0,sizeof(*Scores)*Size);
 
-   // Important Required Standard Optional Extra
+   // Maps to pkgCache::State::VerPriority
+   //   which is "Important Required Standard Optional Extra"
+   // (yes, that is confusing, the order of pkgCache::State::VerPriority
+   //  needs to be adjusted but that requires a ABI break)
    int PrioMap[] = {
       0,
       _config->FindI("pkgProblemResolver::Scores::Important",2),
@@ -645,7 +648,10 @@ void pkgProblemResolver::MakeScores()
              D->Type != pkgCache::Dep::Recommends))
            continue;    
         
-        Scores[I->ID] += abs(OldScores[D.ParentPkg()->ID]);
+        // Do not propagate negative scores otherwise
+        // an extra (-2) package might score better than an optional (-1)
+        if (OldScores[D.ParentPkg()->ID] > 0)
+            Scores[I->ID] += OldScores[D.ParentPkg()->ID];
       }      
    }
 
@@ -839,8 +845,9 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
    }
    while (Again == true);
 
-   if (Debug == true)
-      clog << "Starting" << endl;
+   if (Debug == true) {
+      clog << "Starting, broken count: " << Cache.BrokenCount() << endl;
+   }
    
    MakeScores();
 
@@ -868,8 +875,9 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
          }
    }
 
-   if (Debug == true)
-      clog << "Starting 2" << endl;
+   if (Debug == true) {
+      clog << "Starting 2, broken count: " << Cache.BrokenCount() << endl;
+   }
 
    /* Now consider all broken packages. For each broken package we either
       remove the package or fix it's problem. We do this once, it should