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)
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::ostream & dumpOn(std::ostream &str, const Capability &obj)
std::list< ResolverProblem_Ptr > ResolverProblemList
std::unordered_set< Capability > CapabilitySet