X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/cdf13dc287dcd4603152339364d894601e4a6c05..af7a92c35accda98b667ff41f62ea500fca95a7c:/apt-pkg/algorithms.cc diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 961f5c2fa..0fbce3c2a 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -374,6 +374,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++) @@ -1062,6 +1069,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) else if (TryFixByInstall == true && Start.TargetPkg()->CurrentVer == 0 && Cache[Start.TargetPkg()].Delete() == false && + (Flags[Start.TargetPkg()->ID] & ToRemove) != ToRemove && Cache.GetCandidateVer(Start.TargetPkg()).end() == false) { /* Before removing or keeping the package with the broken dependency