]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/algorithms.cc
update size of dynamic MMap as we write in from the outside
[apt.git] / apt-pkg / algorithms.cc
index 9abb7a947f91c757cf5adc120d6ae792be351f70..0d26f8f66f4ed0834ce01e46fbb442e17f8cf09a 100644 (file)
@@ -162,7 +162,28 @@ bool pkgSimulate::Configure(PkgIterator iPkg)
       }
    }
 
-//   Sim.MarkInstall(Pkg,false);
+   if (Sim[Pkg].InstBroken() == true)
+   {
+      /* We don't call Configure for Pseudo packages and if the 'all' is already installed
+         the simulation will think the pseudo package is not installed, so if something is
+         broken we walk over the dependencies and search for not installed pseudo packages */
+      for (pkgCache::DepIterator D = Sim[Pkg].InstVerIter(Sim).DependsList(); D.end() == false; D++)
+      {
+        if (Sim.IsImportantDep(D) == false || 
+            (Sim[D] & pkgDepCache::DepInstall) != 0)
+           continue;
+        pkgCache::PkgIterator T = D.TargetPkg();
+        if (T.end() == true || T->CurrentVer != 0 || Flags[T->ID] != 0)
+           continue;
+        pkgCache::PkgIterator A = T.Group().FindPkg("all");
+        if (A.end() == true || A->VersionList == 0 || A->CurrentVer == 0 ||
+            Cache.VS().CheckDep(A.CurVersion(), pkgCache::Dep::Equals, T.CandVersion()) == false)
+           continue;
+        Sim.MarkInstall(T, false);
+        Flags[T->ID] = 2;
+      }
+   }
+
    if (Sim[Pkg].InstBroken() == true)
    {
       cout << "Conf " << Pkg.FullName(false) << " broken" << endl;
@@ -374,6 +395,13 @@ bool pkgDistUpgrade(pkgDepCache &Cache)
 {
    pkgDepCache::ActionGroup group(Cache);
 
+   /* Upgrade all installed packages first without autoinst to help the resolver
+      in versioned or-groups to upgrade the old solver instead of installing
+      a new one (if the old solver is not the first one [anymore]) */
+   for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+      if (I->CurrentVer != 0)
+        Cache.MarkInstall(I, false, 0, false);
+
    /* Auto upgrade all installed packages, this provides the basis 
       for the installation */
    for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)