From 39596301895c1a10035c309735795cf2c6cbd250 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Tue, 2 Sep 2008 09:04:37 +0000 Subject: [PATCH] enabled SAT distupgrade --- zypp/solver/detail/Resolver.cc | 97 +++++++++++++++++++---------------- zypp/solver/detail/ResolverUpgrade.cc | 10 +++- zypp/solver/detail/SATResolver.cc | 9 ++++ zypp/solver/detail/SATResolver.h | 10 +++- 4 files changed, 80 insertions(+), 46 deletions(-) diff --git a/zypp/solver/detail/Resolver.cc b/zypp/solver/detail/Resolver.cc index 88b6266..7591217 100644 --- a/zypp/solver/detail/Resolver.cc +++ b/zypp/solver/detail/Resolver.cc @@ -253,56 +253,65 @@ void Resolver::solverInit() { // Solving with the satsolver - static bool poolDumped = false; - MIL << "-------------- Calling SAT Solver -------------------" << endl; - if ( getenv("ZYPP_FULLLOG") ) { - Testcase testcase("/var/log/YaST2/autoTestcase"); - if (!poolDumped) { - testcase.createTestcase (*this, true, false); // dump pool - poolDumped = true; - } else { - testcase.createTestcase (*this, false, false); // write control file only - } + static bool poolDumped = false; + MIL << "-------------- Calling SAT Solver -------------------" << endl; + if ( getenv("ZYPP_FULLLOG") ) { + Testcase testcase("/var/log/YaST2/autoTestcase"); + if (!poolDumped) { + testcase.createTestcase (*this, true, false); // dump pool + poolDumped = true; + } else { + testcase.createTestcase (*this, false, false); // write control file only } + } - _satResolver->setFixsystem(false); - _satResolver->setIgnorealreadyrecommended(false); - _satResolver->setAllowdowngrade(false); - _satResolver->setAllowarchchange(false); - _satResolver->setAllowvendorchange(false); - _satResolver->setAllowuninstall(false); - _satResolver->setUpdatesystem(false); - _satResolver->setAllowvirtualconflicts(false); - _satResolver->setNoupdateprovide(true); - _satResolver->setDosplitprovides(false); + _satResolver->setFixsystem(false); + _satResolver->setIgnorealreadyrecommended(false); + _satResolver->setAllowdowngrade(false); + _satResolver->setAllowarchchange(false); + _satResolver->setAllowvendorchange(false); + _satResolver->setAllowuninstall(false); + _satResolver->setUpdatesystem(false); + _satResolver->setAllowvirtualconflicts(false); + _satResolver->setNoupdateprovide(false); + _satResolver->setDosplitprovides(false); - if (_upgradeMode) { - _satResolver->setAllowdowngrade(true); - _satResolver->setUpdatesystem(false); // not needed cause packages has already been evaluteted by distupgrade - _satResolver->setDosplitprovides(true); + if (_upgradeMode) { + _satResolver->setAllowdowngrade(true); + _satResolver->setUpdatesystem(false); // not needed cause packages has already been evaluteted by distupgrade + _satResolver->setDosplitprovides(true); + if ( !getenv("ZYPP_NO_SAT_UPDATE") ) { + MIL << "-------------- Calling SAT Solver in distupgrade mode -------------------" << endl; + // SAT solver will do the dist update + _satResolver->setAllowarchchange(true); + _satResolver->setAllowvendorchange(true); + _satResolver->setUpdatesystem(true); + _satResolver->setDistupgrade(true); + _satResolver->setDistupgrade_removeunsupported(false); } + } - if (_forceResolve) - _satResolver->setAllowuninstall(true); + if (_forceResolve) + _satResolver->setAllowuninstall(true); - if (_onlyRequires == indeterminate) - _satResolver->setOnlyRequires(ZConfig::instance().solver_onlyRequires()); - else if (_onlyRequires) - _satResolver->setOnlyRequires(true); - else - _satResolver->setOnlyRequires(false); - - if (_verifying) - _satResolver->setFixsystem(true); - - if (_ignorealreadyrecommended) - _satResolver->setIgnorealreadyrecommended(true); - - // Resetting additional solver information - _isInstalledBy.clear(); - _installs.clear(); - _satifiedByInstalled.clear(); - _installedSatisfied.clear(); + if (_onlyRequires == indeterminate) + _satResolver->setOnlyRequires(ZConfig::instance().solver_onlyRequires()); + else if (_onlyRequires) + _satResolver->setOnlyRequires(true); + else + _satResolver->setOnlyRequires(false); + + if (_verifying) + _satResolver->setFixsystem(true); + + if (_ignorealreadyrecommended) + _satResolver->setIgnorealreadyrecommended(true); + + // Resetting additional solver information + _isInstalledBy.clear(); + _installs.clear(); + _satifiedByInstalled.clear(); + _installedSatisfied.clear(); } bool diff --git a/zypp/solver/detail/ResolverUpgrade.cc b/zypp/solver/detail/ResolverUpgrade.cc index cb9ee32..319c922 100644 --- a/zypp/solver/detail/ResolverUpgrade.cc +++ b/zypp/solver/detail/ResolverUpgrade.cc @@ -253,6 +253,14 @@ Resolver::doUpgrade( UpgradeStatistics & opt_stats_r ) (UpgradeOptions&)opt_stats_r = opts; } + if ( !getenv("ZYPP_NO_SAT_UPDATE") ) { + // Setting Resolver to upgrade mode. SAT solver will do the update + _upgradeMode = true; + resolvePool(); + return true; + } + + /* Find upgrade candidates for each package. */ for ( ResPool::const_iterator it = _pool.begin(); it != _pool.end(); ++it ) { @@ -669,7 +677,7 @@ Resolver::doUpgrade( UpgradeStatistics & opt_stats_r ) // checking if there is another item with the same obsoletes. If there is one // it would be randomly which package will be taken for update. So it is - // safier not to update at all. + // more save not to update at all. bool found = false; for ( ResPool::const_iterator itOther = _pool.begin(); itOther != _pool.end() && !found; ++itOther ) { PoolItem itemOther = *itOther; diff --git a/zypp/solver/detail/SATResolver.cc b/zypp/solver/detail/SATResolver.cc index ba210bf..d8af232 100644 --- a/zypp/solver/detail/SATResolver.cc +++ b/zypp/solver/detail/SATResolver.cc @@ -120,6 +120,9 @@ SATResolver::dumpOn( std::ostream & os ) const os << " dosplitprovides = " << _solv->dosplitprovides << endl; os << " onlyRequires = " << _solv->dontinstallrecommended << endl; os << " ignorealreadyrecommended = " << _solv->ignorealreadyrecommended << endl; + os << " distupgrade = " << _distupgrade << endl; + os << " distupgrade_removeunsupported = " << _distupgrade_removeunsupported << endl; + } else { os << ""; } @@ -143,6 +146,8 @@ SATResolver::SATResolver (const ResPool & pool, Pool *SATPool) , _dosplitprovides(false) , _onlyRequires(ZConfig::instance().solver_onlyRequires()) , _ignorealreadyrecommended(false) + , _distupgrade(false) + , _distupgrade_removeunsupported(false) { } @@ -435,9 +440,13 @@ SATResolver::solving() _solv->allowdowngrade = _allowdowngrade; _solv->allowuninstall = _allowuninstall; _solv->allowarchchange = _allowarchchange; + _solv->allowvendorchange = _allowvendorchange; + _solv->allowvirtualconflicts = _allowvirtualconflicts; _solv->dosplitprovides = _dosplitprovides; _solv->noupdateprovide = _noupdateprovide; _solv->dontinstallrecommended = _onlyRequires; + _solv->distupgrade = _distupgrade; + _solv->distupgrade_removeunsupported = _distupgrade_removeunsupported; sat::Pool::instance().prepare(); diff --git a/zypp/solver/detail/SATResolver.h b/zypp/solver/detail/SATResolver.h index 57740e3..1662e81 100644 --- a/zypp/solver/detail/SATResolver.h +++ b/zypp/solver/detail/SATResolver.h @@ -80,12 +80,14 @@ class SATResolver : public base::ReferenceCounted, private base::NonCopyable { bool _allowarchchange; // allow to change architecture of installed solvables bool _allowvendorchange; // allow to change vendor of installed solvables bool _allowuninstall; // allow removal of installed solvables - bool _updatesystem; // distupgrade + bool _updatesystem; // update bool _allowvirtualconflicts; // false: conflicts on package name, true: conflicts on package provides bool _noupdateprovide; // true: update packages needs not to provide old package bool _dosplitprovides; // true: consider legacy split provides bool _onlyRequires; // true: consider required packages only bool _ignorealreadyrecommended; // true: ignore recommended packages that were already recommended by the installed packages + bool _distupgrade; + bool _distupgrade_removeunsupported; // ---------------------------------- methods std::string SATprobleminfoString (Id problem, std::string &detail, Id &ignoreId); @@ -155,6 +157,12 @@ class SATResolver : public base::ReferenceCounted, private base::NonCopyable { bool ignorealreadyrecommended () const {return _ignorealreadyrecommended;} void setIgnorealreadyrecommended ( const bool ignorealreadyrecommended) { _ignorealreadyrecommended = ignorealreadyrecommended;} + bool distupgrade () const {return _distupgrade;} + void setDistupgrade ( const bool distupgrade) { _distupgrade = distupgrade;} + + bool distupgrade_removeunsupported () const {return _distupgrade_removeunsupported;} + void setDistupgrade_removeunsupported ( const bool distupgrade_removeunsupported) { _distupgrade_removeunsupported = distupgrade_removeunsupported;} + bool allowdowngrade () const {return _allowdowngrade;} void setAllowdowngrade ( const bool allowdowngrade) { _allowdowngrade = allowdowngrade;} -- 2.7.4