22#ifndef ZYPP_SOLVER_DETAIL_SAT_RESOLVER_H
23#define ZYPP_SOLVER_DETAIL_SAT_RESOLVER_H
24#ifndef ZYPP_USE_RESOLVER_INTERNALS
25#error Do not directly include this file!
29#include <solv/solver.h>
65class SATResolver :
public base::ReferenceCounted,
private base::NonCopyable,
private sat::detail::PoolMember
70 sat::detail::CPool *_satPool;
71 sat::detail::CSolver *_satSolver;
72 sat::detail::CQueue _jobQueue;
75 PoolItemList _problem_items;
78 PoolItemList _items_to_install;
79 PoolItemList _items_to_remove;
80 PoolItemList _items_to_lock;
81 PoolItemList _items_to_keep;
84 PoolItemList _result_items_to_install;
85 PoolItemList _result_items_to_remove;
91 bool _allowdowngrade:1;
92 bool _allownamechange:1;
93 bool _allowarchchange:1;
94 bool _allowvendorchange:1;
95 bool _allowuninstall:1;
97 bool _noupdateprovide:1;
98 bool _dosplitprovides:1;
100 bool _ignorealreadyrecommended:1;
102 bool _removeOrphaned:1;
103 bool _removeUnneeded:1;
104 bool _dup_allowdowngrade:1;
105 bool _dup_allownamechange:1;
106 bool _dup_allowarchchange:1;
107 bool _dup_allowvendorchange:1;
108 bool _solveSrcPackages:1;
109 bool _cleandepsOnRemove:1;
115 std::string SATprobleminfoString (Id problem, std::string &detail, Id &ignoreId);
116 std::string SATproblemRuleInfoString (Id rule, std::string &detail, Id &ignoreId);
117 std::vector<std::string> SATgetCompleteProblemInfoStrings ( Id problem );
118 void resetItemTransaction (PoolItem item);
121 void solverInit(
const PoolItemList & weakItems);
122 void solverInitSetLocks();
123 void solverInitSetSystemRequirements();
124 void solverInitSetModeJobsAndFlags();
126 void solverAddJobsFromPool();
127 void solverAddJobsFromExtraQueues(
const CapabilitySet & requires_caps,
const CapabilitySet & conflict_caps );
130 bool solving(
const CapabilitySet & requires_caps =
CapabilitySet(),
141 sat::Solvable mapSolvable (
const Id &
id);
142 PoolItem mapItem (
const PoolItem &item);
146 SATResolver (ResPool pool, sat::detail::CPool *satPool);
147 virtual ~SATResolver();
151 virtual std::ostream &
dumpOn( std::ostream & str )
const;
152 friend std::ostream&
operator<<(std::ostream& str,
const SATResolver & obj)
153 {
return obj.dumpOn (str); }
155 ResPool pool (
void)
const;
156 void setPool (
const ResPool & pool) { _pool = pool; }
159 bool resolvePool(
const CapabilitySet & requires_caps,
160 const CapabilitySet & conflict_caps,
161 const PoolItemList & weakItems,
162 const std::set<Repository> & upgradeRepos
165 bool resolveQueue(
const SolverQueueItemList &requestQueue,
166 const PoolItemList & weakItems
172 void applySolutions (
const ProblemSolutionList &solutions);
174 bool fixsystem ()
const {
return _fixsystem;}
175 void setFixsystem (
const bool fixsystem) { _fixsystem = fixsystem;}
177 bool ignorealreadyrecommended ()
const {
return _ignorealreadyrecommended;}
178 void setIgnorealreadyrecommended (
const bool ignorealreadyrecommended) { _ignorealreadyrecommended = ignorealreadyrecommended;}
180 bool distupgrade ()
const {
return _distupgrade;}
181 void setDistupgrade (
const bool distupgrade) { _distupgrade = distupgrade;}
183 bool removeOrphaned ()
const {
return _removeOrphaned;}
184 void setRemoveOrphaned (
const bool removeOrphaned) { _removeOrphaned = removeOrphaned;}
186 bool allowdowngrade ()
const {
return _allowdowngrade;}
187 void setAllowdowngrade (
const bool allowdowngrade) { _allowdowngrade = allowdowngrade;}
189 bool allowarchchange ()
const {
return _allowarchchange;}
190 void setAllowarchchange (
const bool allowarchchange) { _allowarchchange = allowarchchange;}
192 bool allowvendorchange ()
const {
return _allowvendorchange;}
193 void setAllowvendorchange (
const bool allowvendorchange) { _allowvendorchange = allowvendorchange;}
195 bool allowuninstall ()
const {
return _allowuninstall;}
196 void setAllowuninstall (
const bool allowuninstall) { _allowuninstall = allowuninstall;}
198 bool updatesystem ()
const {
return _updatesystem;}
199 void setUpdatesystem (
const bool updatesystem) { _updatesystem = updatesystem;}
201 bool noupdateprovide ()
const {
return _noupdateprovide;}
202 void setNoupdateprovide (
const bool noupdateprovide) { _noupdateprovide = noupdateprovide;}
204 bool dosplitprovides ()
const {
return _dosplitprovides;}
205 void setDosplitprovides (
const bool dosplitprovides) { _dosplitprovides = dosplitprovides;}
208 void setOnlyRequires (
const bool onlyRequires) { _onlyRequires =
onlyRequires;}
210 bool solveSrcPackages()
const {
return _solveSrcPackages; }
211 void setSolveSrcPackages(
bool state_r ) { _solveSrcPackages = state_r; }
213 bool cleandepsOnRemove()
const {
return _cleandepsOnRemove; }
214 void setCleandepsOnRemove(
bool state_r ) { _cleandepsOnRemove = state_r; }
216 PoolItemList problematicUpdateItems(
void )
const {
return _problem_items; }
217 PoolItemList problematicUpdateItems() {
return _problem_items; }
219 PoolItemList resultItemsToInstall () {
return _result_items_to_install; }
220 PoolItemList resultItemsToRemove () {
return _result_items_to_remove; }
222 sat::StringQueue autoInstalled()
const;
223 sat::StringQueue userInstalled()
const;
227 sat::detail::CSolver * get()
const {
return _satSolver; }
std::ostream & operator<<(std::ostream &str, const zypp::sat::detail::CDataiterator *obj)
relates: zypp::sat::LookupAttr::iterator Stream output of the underlying iterator for debug.
Common types used in the Resolver public API and need to be passed down to the details tree.
Libsolv transaction wrapper.
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
Easy-to use interface to the ZYPP dependency resolver.
ResolverFocus
The resolver's general attitude.
std::list< ResolverProblem_Ptr > ResolverProblemList
std::unordered_set< Capability > CapabilitySet
std::ostream & dumpOn(std::ostream &str, const Capability &obj)
relates: Capability Detailed stream output