bool
-SATResolver::resolvePool()
+SATResolver::resolvePool(const CapSet & requires_caps,
+ const CapSet & conflict_caps)
{
SATCollectTransact info (*this);
MIL << "SATResolver::resolvePool()" << endl;
queue_push( &(jobQueue), SOLVER_ERASE_SOLVABLE_NAME );
queue_push( &(jobQueue), s->name);
}
+
+ for (CapSet::const_iterator iter = requires_caps.begin(); iter != requires_caps.end(); iter++) {
+ queue_push( &(jobQueue), SOLVER_INSTALL_SOLVABLE_PROVIDES );
+ queue_push( &(jobQueue), str2id( _SATPool, (iter->asString()).c_str(), 1 ) );
+ MIL << "Requires " << iter->asString() << endl;
+ }
+
+ for (CapSet::const_iterator iter = conflict_caps.begin(); iter != conflict_caps.end(); iter++) {
+ queue_push( &(jobQueue), SOLVER_ERASE_SOLVABLE_PROVIDES);
+ queue_push( &(jobQueue), str2id( _SATPool, (iter->asString()).c_str(), 1 ));
+ MIL << "Conflicts " << iter->asString() << endl;
+ }
+
solv = solver_create( _SATPool, sat::Pool::instance().systemRepo().get() );
sat::Pool::instance().setDirty();
sat::Pool::instance().prepare();
#include "zypp/ProblemTypes.h"
#include "zypp/ResolverProblem.h"
#include "zypp/ProblemSolution.h"
+#include "zypp/CapSet.h"
extern "C" {
#include "satsolver/solver.h"
#include "satsolver/pool.h"
ResPool pool (void) const;
void setPool (const ResPool & pool) { _pool = pool; }
- bool resolvePool();
+ bool resolvePool(const CapSet & requires_caps,
+ const CapSet & conflict_caps);
ResolverProblemList problems ();
void applySolutions (const ProblemSolutionList &solutions);
}
MIL << "------SAT-Pool end------" << endl;
#endif
- return _satResolver->resolvePool();
+ return _satResolver->resolvePool (_extra_caps, _extra_conflicts);
}
ResolverContext_Ptr saveContext = _best_context;