From d62c1a7041aa14fd89f8d322cd98256608d6118e Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Thu, 6 Sep 2007 16:19:52 +0000 Subject: [PATCH] if there is a candidate which is already selected for installation --> take thatone #308082 --- zypp/solver/detail/ResolverUpgrade.cc | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/zypp/solver/detail/ResolverUpgrade.cc b/zypp/solver/detail/ResolverUpgrade.cc index b0716b3..068299b 100644 --- a/zypp/solver/detail/ResolverUpgrade.cc +++ b/zypp/solver/detail/ResolverUpgrade.cc @@ -226,13 +226,27 @@ struct FindProviders FindMap::iterator it = providers.find( provider->name() ); if (it != providers.end()) { // provider with same name found - int cmp = it->second->arch().compare( provider->arch() ); - if (cmp < 0) { // new provider has better arch - it->second = provider; - } - else if (cmp == 0) { // new provider has equal arch - if (it->second->edition().compare( provider->edition() ) < 0) { - it->second = provider; // new provider has better edition + if (provider.status().isToBeInstalled() + || it->second.status().isToBeInstalled()) { + + if (provider.status().isToBeInstalled() + && it->second.status().isToBeInstalled()) { + ERR << "only one should be set for installation: " << it->second << "; " << provider << endl; + } else { + if (provider.status().isToBeInstalled()) { + it->second = provider; // take thatone which is already set for installation + } + } + } else { + // not the same --> find better provider + int cmp = it->second->arch().compare( provider->arch() ); + if (cmp < 0) { // new provider has better arch + it->second = provider; + } + else if (cmp == 0) { // new provider has equal arch + if (it->second->edition().compare( provider->edition() ) < 0) { + it->second = provider; // new provider has better edition + } } } } -- 2.7.4