libzypp  14.48.5
Resolver.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* Resolver.cc
3  *
4  * Copyright (C) 2000-2002 Ximian, Inc.
5  * Copyright (C) 2005 SUSE Linux Products GmbH
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License,
9  * version 2, as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19  * 02111-1307, USA.
20  */
21 #include <boost/static_assert.hpp>
22 
27 
28 #include "zypp/Capabilities.h"
29 #include "zypp/ZConfig.h"
30 #include "zypp/base/Logger.h"
31 #include "zypp/base/String.h"
32 #include "zypp/base/Gettext.h"
33 #include "zypp/base/Algorithm.h"
34 #include "zypp/ResPool.h"
35 #include "zypp/ResFilters.h"
36 #include "zypp/sat/Pool.h"
37 #include "zypp/sat/Solvable.h"
38 #include "zypp/sat/Transaction.h"
39 #include "zypp/ResolverProblem.h"
40 
41 #define MAXSOLVERRUNS 5
42 
44 namespace zypp
45 {
46  namespace solver
48  {
49  namespace detail
51  {
52 
53 using namespace std;
54 
55 IMPL_PTR_TYPE(Resolver);
56 
57 
58 //---------------------------------------------------------------------------
59 
60 
61 std::ostream & Resolver::dumpOn( std::ostream & os ) const
62 {
63  os << "<resolver>" << endl;
64  #define OUTS(t) os << " " << #t << ":\t" << t << endl;
65  OUTS( _forceResolve );
66  OUTS( _upgradeMode );
67  OUTS( _updateMode );
68  OUTS( _verifying );
69  OUTS( _onlyRequires );
70  OUTS( _allowVendorChange );
71  OUTS( _solveSrcPackages );
72  OUTS( _cleandepsOnRemove );
73  OUTS( _ignoreAlreadyRecommended );
74  #undef OUT
75  return os << "<resolver/>";
76 }
77 
78 
79 //---------------------------------------------------------------------------
80 
82  : _pool(pool)
83  , _satResolver(NULL)
84  , _poolchanged(_pool.serial() )
85  , _forceResolve (false)
86  , _upgradeMode (false)
87  , _updateMode (false)
88  , _verifying (false)
89  , _onlyRequires ( ZConfig::instance().solver_onlyRequires() )
90  , _allowVendorChange ( ZConfig::instance().solver_allowVendorChange() )
91  , _solveSrcPackages ( false )
92  , _cleandepsOnRemove ( ZConfig::instance().solver_cleandepsOnRemove() )
93  , _ignoreAlreadyRecommended ( true )
94 
95 {
96  sat::Pool satPool( sat::Pool::instance() );
97  _satResolver = new SATResolver(_pool, satPool.get());
98 }
99 
100 
102 {
103  delete _satResolver;
104 }
105 
106 //---------------------------------------------------------------------------
107 // forward flags too SATResolver
108 #define ZOLV_FLAG_TRIBOOL( ZSETTER, ZGETTER, ZVARNAME, ZVARDEFAULT ) \
109  void Resolver::ZSETTER( TriBool state_r ) \
110  { _satResolver->ZVARNAME = indeterminate(state_r) ? ZVARDEFAULT : bool(state_r); } \
111  bool Resolver::ZGETTER() const \
112  { return _satResolver->ZVARNAME; } \
113 
114 ZOLV_FLAG_TRIBOOL( dupSetAllowDowngrade, dupAllowDowngrade, _dup_allowdowngrade, true )
115 ZOLV_FLAG_TRIBOOL( dupSetAllowNameChange, dupAllowNameChange, _dup_allownamechange, true )
116 ZOLV_FLAG_TRIBOOL( dupSetAllowArchChange, dupAllowArchChange, _dup_allowarchchange, true )
117 ZOLV_FLAG_TRIBOOL( dupSetAllowVendorChange, dupAllowVendorChange, _dup_allowvendorchange, true )
118 
119 #undef ZOLV_FLAG_TRIBOOL
120 //---------------------------------------------------------------------------
121 
123 {
124  _allowVendorChange = indeterminate(state_r) ? ZConfig::instance().solver_allowVendorChange() : bool(state_r);
125 }
126 
128 {
129  _onlyRequires = indeterminate(state_r) ? ZConfig::instance().solver_onlyRequires() : bool(state_r);
130 }
131 
133 {
134  _cleandepsOnRemove = indeterminate(state_r) ? ZConfig::instance().solver_cleandepsOnRemove() : bool(state_r);
135 }
136 
137 //---------------------------------------------------------------------------
138 
140 { return _pool; }
141 
142 void Resolver::reset( bool keepExtras )
143 {
144  _verifying = false;
145 
146  if (!keepExtras) {
147  _extra_requires.clear();
148  _extra_conflicts.clear();
149  }
150 
151  _isInstalledBy.clear();
152  _installs.clear();
153  _satifiedByInstalled.clear();
154  _installedSatisfied.clear();
155 }
156 
158 {
159  // Setting Resolver to upgrade mode. SAT solver will do the update
160  _upgradeMode = true;
161  return resolvePool();
162 }
163 
165 {
166  _updateMode = true;
167  return _satResolver->doUpdate();
168 }
169 
172 
173 void Resolver::addExtraRequire( const Capability & capability )
174 { _extra_requires.insert (capability); }
175 
176 void Resolver::removeExtraRequire( const Capability & capability )
177 { _extra_requires.erase (capability); }
178 
179 void Resolver::addExtraConflict( const Capability & capability )
180 { _extra_conflicts.insert (capability); }
181 
182 void Resolver::removeExtraConflict( const Capability & capability )
183 { _extra_conflicts.erase (capability); }
184 
185 void Resolver::removeQueueItem( SolverQueueItem_Ptr item )
186 {
187  bool found = false;
188  for (SolverQueueItemList::const_iterator iter = _added_queue_items.begin();
189  iter != _added_queue_items.end(); iter++) {
190  if (*iter == item) {
191  _added_queue_items.remove(*iter);
192  found = true;
193  break;
194  }
195  }
196  if (!found) {
197  _removed_queue_items.push_back (item);
198  _removed_queue_items.unique ();
199  }
200 }
201 
202 void Resolver::addQueueItem( SolverQueueItem_Ptr item )
203 {
204  bool found = false;
205  for (SolverQueueItemList::const_iterator iter = _removed_queue_items.begin();
206  iter != _removed_queue_items.end(); iter++) {
207  if (*iter == item) {
208  _removed_queue_items.remove(*iter);
209  found = true;
210  break;
211  }
212  }
213  if (!found) {
214  _added_queue_items.push_back (item);
215  _added_queue_items.unique ();
216  }
217 }
218 
219 void Resolver::addWeak( const PoolItem & item )
220 { _addWeak.push_back( item ); }
221 
222 //---------------------------------------------------------------------------
223 
225 {
228  :resStatus(status)
229  { }
230 
231  bool operator()( PoolItem item ) // only transacts() items go here
232  {
233  item.status().resetTransact( resStatus );// clear any solver/establish transactions
234  return true;
235  }
236 };
237 
238 
240 {
243  :resStatus(status)
244  { }
245 
246  bool operator()( PoolItem item ) // only transacts() items go here
247  {
248  item.status().setTransact( true, resStatus );
249  return true;
250  }
251 };
252 
253 
255 {
257 
258  _DEBUG ("Resolver::verifySystem() ");
259 
260  _verifying = true;
261 
263  resfilter::ByTransact( ), // Resetting all transcations
264  functor::functorRef<bool,PoolItem>(resetting) );
265 
266  return resolvePool();
267 }
268 
269 
270 //----------------------------------------------------------------------------
271 // undo
273 {
275  MIL << "*** undo ***" << endl;
277  resfilter::ByTransact( ), // collect transacts from Pool to resolver queue
278  functor::functorRef<bool,PoolItem>(info) );
279  // Regard dependencies of the item weak onl
280  _addWeak.clear();
281 
282  // Additional QueueItems which has to be regarded by the solver
283  _removed_queue_items.clear();
284  _added_queue_items.clear();
285 
286  return;
287 }
288 
290 {
291  // Solving with libsolv
292  static bool poolDumped = false;
293  MIL << "-------------- Calling SAT Solver -------------------" << endl;
294  if ( getenv("ZYPP_FULLLOG") ) {
295  Testcase testcase("/var/log/YaST2/autoTestcase");
296  if (!poolDumped) {
297  testcase.createTestcase (*this, true, false); // dump pool
298  poolDumped = true;
299  } else {
300  testcase.createTestcase (*this, false, false); // write control file only
301  }
302  }
303 
311  _satResolver->setUpdatesystem (false);
316 
318  if (_upgradeMode) {
319  // may overwrite some settings
321  }
322 
323  // Resetting additional solver information
324  _isInstalledBy.clear();
325  _installs.clear();
326  _satifiedByInstalled.clear();
327  _installedSatisfied.clear();
328 }
329 
331 {
332  solverInit();
334 }
335 
337 {
338  solverInit();
339 
340  // add/remove additional SolverQueueItems
341  for (SolverQueueItemList::const_iterator iter = _removed_queue_items.begin();
342  iter != _removed_queue_items.end(); iter++) {
343  for (SolverQueueItemList::const_iterator iterQueue = queue.begin(); iterQueue != queue.end(); iterQueue++) {
344  if ( (*iterQueue)->cmp(*iter) == 0) {
345  MIL << "remove from queue" << *iter;
346  queue.remove(*iterQueue);
347  break;
348  }
349  }
350  }
351 
352  for (SolverQueueItemList::const_iterator iter = _added_queue_items.begin();
353  iter != _added_queue_items.end(); iter++) {
354  bool found = false;
355  for (SolverQueueItemList::const_iterator iterQueue = queue.begin(); iterQueue != queue.end(); iterQueue++) {
356  if ( (*iterQueue)->cmp(*iter) == 0) {
357  found = true;
358  break;
359  }
360  }
361  if (!found) {
362  MIL << "add to queue" << *iter;
363  queue.push_back(*iter);
364  }
365  }
366 
367  // The application has to take care to write these solutions back to e.g. selectables in order
368  // give the user a chance for changing these decisions again.
369  _removed_queue_items.clear();
370  _added_queue_items.clear();
371 
372  return _satResolver->resolveQueue(queue, _addWeak);
373 }
374 
376 {
377  // FIXME: That's an ugly way of pushing autoInstalled into the transaction.
380  return ret;
381 }
382 
383 
384 //----------------------------------------------------------------------------
385 // Getting more information about the solve results
386 
388 {
389  MIL << "Resolver::problems()" << endl;
390  return _satResolver->problems();
391 }
392 
394 {
395  for_( iter, solutions.begin(), solutions.end() )
396  {
397  ProblemSolution_Ptr solution = *iter;
398  if ( !solution->apply( *this ) )
399  break;
400  }
401 }
402 
404 {
405  if ( _satResolver
406  && _isInstalledBy.empty()
407  && _installs.empty()) {
408 
409  // generating new
410  PoolItemList itemsToInstall = _satResolver->resultItemsToInstall();
411 
412  for (PoolItemList::const_iterator instIter = itemsToInstall.begin();
413  instIter != itemsToInstall.end(); instIter++) {
414  // Requires
415  for (Capabilities::const_iterator capIt = (*instIter)->dep (Dep::REQUIRES).begin(); capIt != (*instIter)->dep (Dep::REQUIRES).end(); ++capIt)
416  {
417  sat::WhatProvides possibleProviders(*capIt);
418  for_( iter, possibleProviders.begin(), possibleProviders.end() ) {
419  PoolItem provider = ResPool::instance().find( *iter );
420 
421  // searching if this provider will already be installed
422  bool found = false;
423  bool alreadySetForInstallation = false;
424  ItemCapKindMap::const_iterator pos = _isInstalledBy.find(provider);
425  while (pos != _isInstalledBy.end()
426  && pos->first == provider
427  && !found) {
428  alreadySetForInstallation = true;
429  ItemCapKind capKind = pos->second;
430  if (capKind.item == *instIter) found = true;
431  pos++;
432  }
433 
434  if (!found
435  && provider.status().isToBeInstalled()) {
436  if (provider.status().isBySolver()) {
437  ItemCapKind capKindisInstalledBy( *instIter, *capIt, Dep::REQUIRES, !alreadySetForInstallation );
438  _isInstalledBy.insert (make_pair( provider, capKindisInstalledBy));
439  } else {
440  // no initial installation cause it has been set be e.g. user
441  ItemCapKind capKindisInstalledBy( *instIter, *capIt, Dep::REQUIRES, false );
442  _isInstalledBy.insert (make_pair( provider, capKindisInstalledBy));
443  }
444  ItemCapKind capKindisInstalledBy( provider, *capIt, Dep::REQUIRES, !alreadySetForInstallation );
445  _installs.insert (make_pair( *instIter, capKindisInstalledBy));
446  }
447 
448  if (provider.status().staysInstalled()) { // Is already satisfied by an item which is installed
449  ItemCapKind capKindisInstalledBy( provider, *capIt, Dep::REQUIRES, false );
450  _satifiedByInstalled.insert (make_pair( *instIter, capKindisInstalledBy));
451 
452  ItemCapKind installedSatisfied( *instIter, *capIt, Dep::REQUIRES, false );
453  _installedSatisfied.insert (make_pair( provider, installedSatisfied));
454  }
455  }
456  }
457 
458  if (!(_satResolver->onlyRequires())) {
459  //Recommends
460  for (Capabilities::const_iterator capIt = (*instIter)->dep (Dep::RECOMMENDS).begin(); capIt != (*instIter)->dep (Dep::RECOMMENDS).end(); ++capIt)
461  {
462  sat::WhatProvides possibleProviders(*capIt);
463  for_( iter, possibleProviders.begin(), possibleProviders.end() ) {
464  PoolItem provider = ResPool::instance().find( *iter );
465 
466  // searching if this provider will already be installed
467  bool found = false;
468  bool alreadySetForInstallation = false;
469  ItemCapKindMap::const_iterator pos = _isInstalledBy.find(provider);
470  while (pos != _isInstalledBy.end()
471  && pos->first == provider
472  && !found) {
473  alreadySetForInstallation = true;
474  ItemCapKind capKind = pos->second;
475  if (capKind.item == *instIter) found = true;
476  pos++;
477  }
478 
479  if (!found
480  && provider.status().isToBeInstalled()) {
481  if (provider.status().isBySolver()) {
482  ItemCapKind capKindisInstalledBy( *instIter, *capIt, Dep::RECOMMENDS, !alreadySetForInstallation );
483  _isInstalledBy.insert (make_pair( provider, capKindisInstalledBy));
484  } else {
485  // no initial installation cause it has been set be e.g. user
486  ItemCapKind capKindisInstalledBy( *instIter, *capIt, Dep::RECOMMENDS, false );
487  _isInstalledBy.insert (make_pair( provider, capKindisInstalledBy));
488  }
489  ItemCapKind capKindisInstalledBy( provider, *capIt, Dep::RECOMMENDS, !alreadySetForInstallation );
490  _installs.insert (make_pair( *instIter, capKindisInstalledBy));
491  }
492 
493  if (provider.status().staysInstalled()) { // Is already satisfied by an item which is installed
494  ItemCapKind capKindisInstalledBy( provider, *capIt, Dep::RECOMMENDS, false );
495  _satifiedByInstalled.insert (make_pair( *instIter, capKindisInstalledBy));
496 
497  ItemCapKind installedSatisfied( *instIter, *capIt, Dep::RECOMMENDS, false );
498  _installedSatisfied.insert (make_pair( provider, installedSatisfied));
499  }
500  }
501  }
502 
503  //Supplements
504  for (Capabilities::const_iterator capIt = (*instIter)->dep (Dep::SUPPLEMENTS).begin(); capIt != (*instIter)->dep (Dep::SUPPLEMENTS).end(); ++capIt)
505  {
506  sat::WhatProvides possibleProviders(*capIt);
507  for_( iter, possibleProviders.begin(), possibleProviders.end() ) {
508  PoolItem provider = ResPool::instance().find( *iter );
509  // searching if this item will already be installed
510  bool found = false;
511  bool alreadySetForInstallation = false;
512  ItemCapKindMap::const_iterator pos = _isInstalledBy.find(*instIter);
513  while (pos != _isInstalledBy.end()
514  && pos->first == *instIter
515  && !found) {
516  alreadySetForInstallation = true;
517  ItemCapKind capKind = pos->second;
518  if (capKind.item == provider) found = true;
519  pos++;
520  }
521 
522  if (!found
523  && instIter->status().isToBeInstalled()) {
524  if (instIter->status().isBySolver()) {
525  ItemCapKind capKindisInstalledBy( provider, *capIt, Dep::SUPPLEMENTS, !alreadySetForInstallation );
526  _isInstalledBy.insert (make_pair( *instIter, capKindisInstalledBy));
527  } else {
528  // no initial installation cause it has been set be e.g. user
529  ItemCapKind capKindisInstalledBy( provider, *capIt, Dep::SUPPLEMENTS, false );
530  _isInstalledBy.insert (make_pair( *instIter, capKindisInstalledBy));
531  }
532  ItemCapKind capKindisInstalledBy( *instIter, *capIt, Dep::SUPPLEMENTS, !alreadySetForInstallation );
533  _installs.insert (make_pair( provider, capKindisInstalledBy));
534  }
535 
536  if (instIter->status().staysInstalled()) { // Is already satisfied by an item which is installed
537  ItemCapKind capKindisInstalledBy( *instIter, *capIt, Dep::SUPPLEMENTS, !alreadySetForInstallation );
538  _satifiedByInstalled.insert (make_pair( provider, capKindisInstalledBy));
539 
540  ItemCapKind installedSatisfied( provider, *capIt, Dep::SUPPLEMENTS, false );
541  _installedSatisfied.insert (make_pair( *instIter, installedSatisfied));
542  }
543  }
544  }
545  }
546  }
547  }
548 }
549 
550 
552 {
553  ItemCapKindList ret;
555 
556  for (ItemCapKindMap::const_iterator iter = _isInstalledBy.find(item); iter != _isInstalledBy.end();) {
557  ItemCapKind info = iter->second;
558  PoolItem iterItem = iter->first;
559  if (iterItem == item) {
560  ret.push_back(info);
561  iter++;
562  } else {
563  // exit
564  iter = _isInstalledBy.end();
565  }
566  }
567  return ret;
568 }
569 
571 {
572  ItemCapKindList ret;
574 
575  for (ItemCapKindMap::const_iterator iter = _installs.find(item); iter != _installs.end();) {
576  ItemCapKind info = iter->second;
577  PoolItem iterItem = iter->first;
578  if (iterItem == item) {
579  ret.push_back(info);
580  iter++;
581  } else {
582  // exit
583  iter = _installs.end();
584  }
585  }
586  return ret;
587 }
588 
590 {
591  ItemCapKindList ret;
593 
594  for (ItemCapKindMap::const_iterator iter = _satifiedByInstalled.find(item); iter != _satifiedByInstalled.end();) {
595  ItemCapKind info = iter->second;
596  PoolItem iterItem = iter->first;
597  if (iterItem == item) {
598  ret.push_back(info);
599  iter++;
600  } else {
601  // exit
602  iter = _satifiedByInstalled.end();
603  }
604  }
605  return ret;
606 }
607 
609 {
610  ItemCapKindList ret;
612 
613  for (ItemCapKindMap::const_iterator iter = _installedSatisfied.find(item); iter != _installedSatisfied.end();) {
614  ItemCapKind info = iter->second;
615  PoolItem iterItem = iter->first;
616  if (iterItem == item) {
617  ret.push_back(info);
618  iter++;
619  } else {
620  // exit
621  iter = _installedSatisfied.end();
622  }
623  }
624  return ret;
625 }
626 
627 
629  };// namespace detail
632  };// namespace solver
635 };// namespace zypp
637 
StringQueue autoInstalled() const
Return the ident strings of all packages that would be auto-installed after the transaction is run...
Definition: Transaction.cc:357
void removeExtraConflict(const Capability &capability)
Definition: Resolver.cc:182
ItemCapKindMap _isInstalledBy
Definition: Resolver.h:139
Interface to gettext.
std::list< ProblemSolution_Ptr > ProblemSolutionList
Definition: ProblemTypes.h:42
#define MIL
Definition: Logger.h:47
void setSolveSrcPackages(bool state_r)
Definition: SATResolver.h:213
bool operator()(PoolItem item)
Definition: Resolver.cc:246
const_iterator begin() const
Definition: ResPool.h:85
void setCleandepsOnRemove(bool state_r)
Definition: SATResolver.h:216
Container of Solvable providing a Capability (read only).
Definition: WhatProvides.h:87
static const Dep RECOMMENDS
Definition: Dep.h:47
static const Dep SUPPLEMENTS
Definition: Dep.h:50
void addExtraRequire(const Capability &capability)
Definition: Resolver.cc:173
ItemCapKindList isInstalledBy(const PoolItem &item)
Definition: Resolver.cc:551
bool ignoreAlreadyRecommended() const
Definition: Resolver.h:199
void removeQueueItem(SolverQueueItem_Ptr item)
Definition: Resolver.cc:185
void addQueueItem(SolverQueueItem_Ptr item)
Definition: Resolver.cc:202
ResolverProblemList problems() const
Definition: Resolver.cc:387
static ZConfig & instance()
Singleton ctor.
Definition: ZConfig.cc:674
PoolItemList problematicUpdateItems(void) const
Definition: SATResolver.h:218
#define OUTS(t)
bool resolveQueue(SolverQueueItemList &queue)
Definition: Resolver.cc:336
void setAllowarchchange(const bool allowarchchange)
Definition: SATResolver.h:192
bool solveSrcPackages() const
Definition: Resolver.h:219
void addExtraConflict(const Capability &capability)
Definition: Resolver.cc:179
void setAllowVendorChange(TriBool state_r)
Definition: Resolver.cc:122
UndoTransact(const ResStatus::TransactByValue &status)
Definition: Resolver.cc:227
CapabilitySet _extra_conflicts
Definition: Resolver.h:109
int invokeOnEach(_Iterator begin_r, _Iterator end_r, _Filter filter_r, _Function fnc_r)
Iterate through [begin_r,end_r) and invoke fnc_r on each item that passes filter_r.
Definition: Algorithm.h:30
detail::CPool * get() const
Expert backdoor.
Definition: Pool.cc:36
std::list< PoolItem > PoolItemList
Definition: Types.h:51
Libsolv transaction wrapper.
Definition: Transaction.h:51
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:27
bool resetTransact(TransactByValue causer_r)
Not the same as setTransact( false ).
Definition: ResStatus.h:473
bool solver_cleandepsOnRemove() const
Whether removing a package should also remove no longer needed requirements.
Definition: ZConfig.cc:908
Generating a testcase of the current pool and solver state.
Definition: Testcase.h:35
const_iterator end() const
Definition: ResPool.h:88
std::list< SolverQueueItem_Ptr > SolverQueueItemList
void reset(bool keepExtras=false)
Definition: Resolver.cc:142
void setUpdatesystem(const bool updatesystem)
Definition: SATResolver.h:201
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
Definition: String.h:29
void setOnlyRequires(const bool onlyRequires)
Definition: SATResolver.h:210
std::list< ResolverProblem_Ptr > ResolverProblemList
Definition: ProblemTypes.h:46
static Pool instance()
Singleton ctor.
Definition: Pool.h:52
solver::detail::SolverQueueItemList _removed_queue_items
Definition: Resolver.h:135
const_iterator begin() const
Iterator pointing to the first Solvable.
void setAllowdowngrade(const bool allowdowngrade)
Definition: SATResolver.h:189
void setCleandepsOnRemove(TriBool state_r)
Definition: Resolver.cc:132
const_iterator end() const
Iterator pointing behind the last Solvable.
Definition: WhatProvides.h:226
solver::detail::SolverQueueItemList _added_queue_items
Definition: Resolver.h:136
sat::Transaction getTransaction()
Definition: Resolver.cc:375
ResStatus::TransactByValue resStatus
Definition: Resolver.cc:226
void setNoupdateprovide(const bool noupdateprovide)
Definition: SATResolver.h:204
std::unary_function< PoolItem, bool > PoolItemFilterFunctor
Definition: ResFilters.h:284
void addWeak(const PoolItem &item)
Definition: Resolver.cc:219
Interim helper class to collect global options and settings.
Definition: ZConfig.h:59
void removeExtraRequire(const Capability &capability)
Definition: Resolver.cc:176
void setAllowvendorchange(const bool allowvendorchange)
Definition: SATResolver.h:195
void setDistupgrade_removeunsupported(const bool distupgrade_removeunsupported)
Definition: SATResolver.h:186
virtual std::ostream & dumpOn(std::ostream &str) const
Overload to realize std::ostream & operator<<.
Definition: Resolver.cc:61
static const Dep REQUIRES
Definition: Dep.h:44
void setIgnorealreadyrecommended(const bool ignorealreadyrecommended)
Definition: SATResolver.h:180
ResStatus & status() const
Returns the current status.
Definition: PoolItem.cc:246
void setOnlyRequires(TriBool state_r)
Definition: Resolver.cc:127
bool allowVendorChange() const
Definition: Resolver.h:216
bool cleandepsOnRemove() const
Definition: Resolver.h:222
void applySolutions(const ProblemSolutionList &solutions)
Definition: Resolver.cc:393
bool operator()(PoolItem item)
Definition: Resolver.cc:231
Select PoolItem by transact.
Definition: ResFilters.h:306
void setDosplitprovides(const bool dosplitprovides)
Definition: SATResolver.h:207
bool setTransact(bool toTansact_r, TransactByValue causer_r)
Toggle between TRANSACT and KEEP_STATE.
Definition: ResStatus.h:421
bool isVerifyingMode() const
Definition: Resolver.h:213
ItemCapKindMap _satifiedByInstalled
Definition: Resolver.h:141
bool solver_allowVendorChange() const
Whether vendor check is by default enabled.
Definition: ZConfig.cc:905
bool solver_onlyRequires() const
Solver regards required packages,patterns,...
Definition: ZConfig.cc:902
#define ZOLV_FLAG_TRIBOOL(ZSETTER, ZGETTER, ZVARNAME, ZVARDEFAULT)
Definition: Resolver.cc:108
bool resolveQueue(const SolverQueueItemList &requestQueue, const PoolItemList &weakItems)
Definition: SATResolver.cc:829
Global ResObject pool.
Definition: ResPool.h:48
sat::StringQueue autoInstalled() const
static constexpr LoadFromPoolType loadFromPool
Definition: Transaction.h:82
std::list< ItemCapKind > ItemCapKindList
Definition: Resolver.h:88
CapabilitySet _extra_requires
Definition: Resolver.h:108
ResStatus::TransactByValue resStatus
Definition: Resolver.cc:241
ItemCapKindList installs(const PoolItem &item)
Definition: Resolver.cc:570
bool createTestcase(Resolver &resolver, bool dumpPool=true, bool runSolver=true)
Definition: Testcase.cc:464
bool isToBeInstalled() const
Definition: ResStatus.h:241
ItemCapKindMap _installedSatisfied
Definition: Resolver.h:142
A sat capability.
Definition: Capability.h:59
Capabilities iterator.
Definition: Capabilities.h:91
void setDistupgrade(const bool distupgrade)
Definition: SATResolver.h:183
bool resolvePool(const CapabilitySet &requires_caps, const CapabilitySet &conflict_caps, const PoolItemList &weakItems, const std::set< Repository > &upgradeRepos)
Definition: SATResolver.cc:763
IMPL_PTR_TYPE(ProblemSolutionCombi)
#define _DEBUG(x)
Definition: Types.h:37
Global sat-pool.
Definition: Pool.h:43
std::set< Repository > _upgradeRepos
Definition: Resolver.h:110
DoTransact(const ResStatus::TransactByValue &status)
Definition: Resolver.cc:242
Reference to a PoolItem connecting ResObject and ResStatus.
Definition: PoolItem.h:50
PoolItemList problematicUpdateItems() const
Definition: Resolver.cc:170
ItemCapKindList satifiedByInstalled(const PoolItem &item)
Definition: Resolver.cc:589
PoolItem find(const sat::Solvable &slv_r) const
Return the corresponding PoolItem.
Definition: ResPool.cc:70
ItemCapKindList installedSatisfied(const PoolItem &item)
Definition: Resolver.cc:608
bool isBySolver() const
Definition: ResStatus.h:278
void setAllowuninstall(const bool allowuninstall)
Definition: SATResolver.h:198
ResolverProblemList problems()
Resolver(const ResPool &pool)
Definition: Resolver.cc:81
bool staysInstalled() const
Definition: ResStatus.h:236
static ResPool instance()
Singleton ctor.
Definition: ResPool.cc:33
void setFixsystem(const bool fixsystem)
Definition: SATResolver.h:177