_details = "";
}
+void ProblemSolutionCombi::addSingleAction( Capability capability, const TransactionKind action)
+{
+ addAction (new TransactionSolutionAction(capability, action));
+ actNumber++;
+}
+
void ProblemSolutionCombi::addSingleAction( PoolItem item, const TransactionKind action)
{
addAction (new TransactionSolutionAction(item, action));
**/
ProblemSolutionCombi( ResolverProblem_Ptr parent );
/**
- * Add a single action
+ * Add a single action of an item
*/
void addSingleAction( PoolItem item, const TransactionKind action);
/**
+ * Add a single action of an capability
+ */
+ void addSingleAction( Capability capability, const TransactionKind action);
+
+ /**
* returns the number of actions
*/
int actionCount() { return actNumber;}
break;
case SOLVER_INSTALL_SOLVABLE_PROVIDES:
{
- Id p, *pp;
- FOR_PROVIDES(p, pp, what);
- {
- PoolItem poolItem = _pool.find (sat::Solvable(p));
- if (poolItem.status().isToBeInstalled()
- || poolItem.status().staysUninstalled())
- problemSolution->addSingleAction (poolItem, KEEP);
- }
+ problemSolution->addSingleAction (Capability(what), REMOVE_REQUIRE);
string description = str::form (_("do not ask to install a solvable providing %s"), dep2str(pool, what));
MIL << description << endl;
problemSolution->addDescription (description);
break;
case SOLVER_ERASE_SOLVABLE_PROVIDES:
{
- Id p, *pp;
- FOR_PROVIDES(p, pp, what);
- {
- PoolItem poolItem = _pool.find (sat::Solvable(p));
- if (poolItem.status().isToBeUninstalled()
- || poolItem.status().staysInstalled())
- problemSolution->addSingleAction (poolItem, KEEP);
- }
+ problemSolution->addSingleAction (Capability(what), REMOVE_CONFLICT);
string description = str::form (_("do not ask to delete all solvables providing %s"), dep2str(pool, what));
MIL << description << endl;
problemSolution->addDescription (description);
{
os << "TransactionSolutionAction: ";
switch (_action) {
- case KEEP: os << "Keep"; break;
- case INSTALL: os << "Install"; break;
- case REMOVE: os << "Remove"; break;
- case UNLOCK: os << "Unlock"; break;
+ case KEEP: os << "Keep " << _item; break;
+ case INSTALL: os << "Install " << _item; break;
+ case REMOVE: os << "Remove " << _item; break;
+ case UNLOCK: os << "Unlock " << _item; break;
+ case REMOVE_REQUIRE: os << "Remove require " << _capability; break;
+ case REMOVE_CONFLICT: os << "Remove conflict " << _capability; break;
}
- os << " ";
- os << _item;
+
os << endl;
return os;
}
ret = _item.status().setLock (false, ResStatus::USER);
if (!ret) ERR << "Cannot unlock " << _item << endl;
break;
+ case REMOVE_REQUIRE:
+ resolver.removeExtraRequire (_capability);
+ break;
+ case REMOVE_CONFLICT:
+ resolver.removeExtraConflict (_capability);
+ break;
default:
ERR << "Wrong TransactionKind" << endl;
ret = false;
KEEP,
INSTALL,
REMOVE,
- UNLOCK
+ UNLOCK,
+ REMOVE_REQUIRE,
+ REMOVE_CONFLICT,
} TransactionKind;
: SolutionAction(),
_item( item ), _action( action ) {}
+ TransactionSolutionAction( Capability capability,
+ TransactionKind action )
+ : SolutionAction(),
+ _capability( capability ), _action( action ) {}
+
TransactionSolutionAction( TransactionKind action )
: SolutionAction(),
_item(), _action( action ) {}
protected:
PoolItem _item;
+ Capability _capability;
const TransactionKind _action;
};