enabled SAT distupgrade
authorStefan Schubert <schubi@suse.de>
Tue, 2 Sep 2008 09:04:37 +0000 (09:04 +0000)
committerStefan Schubert <schubi@suse.de>
Tue, 2 Sep 2008 09:04:37 +0000 (09:04 +0000)
zypp/solver/detail/Resolver.cc
zypp/solver/detail/ResolverUpgrade.cc
zypp/solver/detail/SATResolver.cc
zypp/solver/detail/SATResolver.h

index 88b6266..7591217 100644 (file)
@@ -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
index cb9ee32..319c922 100644 (file)
@@ -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;
index ba210bf..d8af232 100644 (file)
@@ -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 << "<NULL>";
     }
@@ -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();
 
index 57740e3..1662e81 100644 (file)
@@ -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;}