collector->problems.insert (make_pair( item, info));
} else {
collector->additionalInfo.insert (make_pair( item, info));
+
+ if (info->type()==RESOLVER_INFO_TYPE_NEEDED_BY) { // logging reverse needed by
+ ResolverInfoNeededBy_constPtr needed_by = dynamic_pointer_cast<const ResolverInfoNeededBy>(info);
+ PoolItemList itemList = needed_by->items();
+ for (PoolItemList::const_iterator iter = itemList.begin();
+ iter != itemList.end(); ++iter)
+ {
+ collector->additionalInfo.insert (make_pair( *iter, info));
+ }
+ }
}
// Collicting items which are providing requirements but they
break;
case RESOLVER_INFO_TYPE_NO_PROVIDER: { // There are no installable providers of c [for p]
ResolverInfoMisc_constPtr misc_info = dynamic_pointer_cast<const ResolverInfoMisc>(info);
- // TranslatorExplanation %s = name of package, patch, selection ...
- what = str::form (_("%s cannot be installed due to missing dependencies"), whoShort.c_str());
+ if (item.status().isInstalled()) {
+ // TranslatorExplanation %s = name of package, patch, selection ...
+ what = str::form (_("%s has missing dependencies"), whoShort.c_str());
+ } else {
+ // TranslatorExplanation %s = name of package, patch, selection ...
+ what = str::form (_("%s cannot be installed due to missing dependencies"), whoShort.c_str());
+ }
details = misc_info->message() + "\n";
details += logAdditionalInfo(collector.additionalInfo, item);
ResolverProblem_Ptr problem = new ResolverProblem (what, details);
details += more_details;
}
ResolverProblem_Ptr problem = new ResolverProblem (what, details);
+ // ignore requirement
+ problem->addSolution (new ProblemSolutionIgnoreRequires (problem, PoolItem_Ref(), misc_info->capability()));
problems.push_back (problem);
problem_created = true;
}
bool
InjectSolutionAction::execute(Resolver & resolver) const
{
- Dependencies dependencies = _item.resolvable()->deps();
- CapSet depList = dependencies[Dep::CONFLICTS];
+ Dependencies dependencies;
+ CapSet depList;
+ if (_item != PoolItem_Ref()) {
+ dependencies = _item.resolvable()->deps();
+ depList = dependencies[Dep::CONFLICTS];
+ }
switch (_kind) {
case CONFLICTS:
// removing conflict in both resolvables
break;
case REQUIRES:
// removing the requires dependency from the item
- resolver.addIgnoreRequires (_item, _capability);
+ if (_item == PoolItem_Ref()) {
+ // this was a requirement via Resolver::addExtraCapability
+ // so we have to delete it.
+ resolver.removeExtraCapability (_capability);
+ } else {
+ resolver.addIgnoreRequires (_item, _capability);
+ }
break;
case ARCHITECTURE:
// This item is for ALL architectures available