/////////////////////////////////////////////////////////////////////////
namespace zypp
{ ///////////////////////////////////////////////////////////////////////
+
+ namespace sat
+ {
+ class Transaction;
+ }
+
///////////////////////////////////////////////////////////////////////
namespace solver
{ /////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//
// 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:
// 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
//@}
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; }
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 );
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
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();