summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2010-11-29 21:43:07 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2010-11-29 21:43:07 +0100
commitc427b1e218e61bd1aacbddf9013e58b8aa445a7c (patch)
tree968669a06e487a9146038f1a975011edc2729acb /apt-pkg
parent0957a13baf7c6d9a4093bfd6c7316fa018cb717b (diff)
* apt-pkg/algorithms.cc:
- mark all installed packages first without auto installation in a dist-upgrade to prefer upgrading packages instead of installing new packages in versioned or-groups (Closes: #605394)
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/algorithms.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index 9abb7a947..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++)