Imported Upstream version 15.0.0
[platform/upstream/libzypp.git] / zypp / solver / detail / Resolver.h
index 8f65722..10f140a 100644 (file)
 /////////////////////////////////////////////////////////////////////////
 namespace zypp
 { ///////////////////////////////////////////////////////////////////////
+
+  namespace sat
+  {
+    class Transaction;
+  }
+
   ///////////////////////////////////////////////////////////////////////
   namespace solver
   { /////////////////////////////////////////////////////////////////////
@@ -85,7 +91,13 @@ namespace zypp
 ///////////////////////////////////////////////////////////////////
 //
 //     CLASS NAME : Resolver
-
+/** A mid layer class we should remove
+ * \todo Merge this and class SATResolver. Logic and date are horribly
+ * distributed between this and SATResolver. Either SATResolver becomes
+ * a pure wrapper adapting the libsolv C interface to fit our needs, and
+ * all the solver logic and problem handling goes here; or completely merge
+ * both classes.
+ */
 class Resolver : public base::ReferenceCounted, private base::NonCopyable {
 
   private:
@@ -113,6 +125,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
                                   // packages, hardware packages (modalias)
     bool _allowVendorChange;   // whether the solver should allow or disallow vendor changes.
     bool _solveSrcPackages;    // whether to generate solver jobs for selected source packges.
+    bool _cleandepsOnRemove;   // whether removing a package should also remove no longer needed requirements
 
     bool _ignoreAlreadyRecommended;   //ignore recommended packages that have already been recommended by the installed packages
     //@}
@@ -154,7 +167,8 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     ResPool pool() const;
     void setPool( const ResPool & pool ) { _pool = pool; }
 
-    void addUpgradeRepo( Repository repo_r )           { if ( repo_r ) _upgradeRepos.insert( repo_r ); }
+    void addUpgradeRepo( Repository repo_r )           { if ( repo_r && ! repo_r.isSystemRepo() ) _upgradeRepos.insert( repo_r ); }
+    bool upgradingRepo( Repository repo_r ) const      { return( _upgradeRepos.find( repo_r ) != _upgradeRepos.end() ); }
     void removeUpgradeRepo( Repository repo_r )                { _upgradeRepos.erase( repo_r ); }
     void removeUpgradeRepos()                          { _upgradeRepos.clear(); }
     const std::set<Repository> & upgradeRepos() const  { return _upgradeRepos; }
@@ -167,8 +181,8 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     void removeQueueItem( SolverQueueItem_Ptr item );
     void addQueueItem( SolverQueueItem_Ptr item );
 
-    CapabilitySet extraRequires()      { return _extra_requires; }
-    CapabilitySet extraConflicts()     { return _extra_conflicts; }
+    CapabilitySet extraRequires() const                { return _extra_requires; }
+    CapabilitySet extraConflicts() const       { return _extra_conflicts; }
 
     void addWeak( const PoolItem & item );
 
@@ -192,6 +206,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     void setForceResolve( TriBool state_r )    { _forceResolve = indeterminate(state_r) ? false : bool(state_r); }
 
     bool isUpgradeMode() const                         { return _upgradeMode; }// Resolver has been called with doUpgrade
+    void setUpgradeMode( bool yesno_r )                { _upgradeMode = yesno_r; }
 
     bool isUpdateMode() const                  { return _updateMode; } // Resolver has been called with doUpdate
 
@@ -203,11 +218,17 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
 
     bool solveSrcPackages() const              { return _solveSrcPackages; }
     void setSolveSrcPackages( TriBool state_r )        { _solveSrcPackages = indeterminate(state_r) ? false : bool(state_r); }
+
+    bool cleandepsOnRemove() const             { return _cleandepsOnRemove; }
+    void setCleandepsOnRemove( TriBool state_r );
     //@}
 
     ResolverProblemList problems() const;
     void applySolutions( const ProblemSolutionList & solutions );
 
+    // Return the Transaction computed by the last solver run.
+    sat::Transaction getTransaction();
+
     // reset all SOLVER transaction in pool
     void undo();