Cache[I].CandidateVerIter(Cache).Downloadable() == true)
Cache.MarkInstall(I, true, 0, false);
else
- Cache.MarkDelete(I);
+ Cache.MarkDelete(I, false, 0, false);
}
break;
// This means removal failed
case pkgCache::State::HalfInstalled:
- Cache.MarkDelete(I);
+ Cache.MarkDelete(I, false, 0, false);
break;
default:
unsigned long Size = Cache.Head().PackageCount;
memset(Scores,0,sizeof(*Scores)*Size);
- // Important Required Standard Optional Extra
+ // Maps to pkgCache::State::VerPriority
+ // which is "Important Required Standard Optional Extra"
+ // (yes, that is confusing, the order of pkgCache::State::VerPriority
+ // needs to be adjusted but that requires a ABI break)
int PrioMap[] = {
0,
- _config->FindI("pkgProblemResolver::Scores::Important",3),
- _config->FindI("pkgProblemResolver::Scores::Required",2),
+ _config->FindI("pkgProblemResolver::Scores::Important",2),
+ _config->FindI("pkgProblemResolver::Scores::Required",3),
_config->FindI("pkgProblemResolver::Scores::Standard",1),
_config->FindI("pkgProblemResolver::Scores::Optional",-1),
_config->FindI("pkgProblemResolver::Scores::Extra",-2)
if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
clog << "Settings used to calculate pkgProblemResolver::Scores::" << endl
- << " Important => " << PrioMap[1] << endl
- << " Required => " << PrioMap[2] << endl
- << " Standard => " << PrioMap[3] << endl
- << " Optional => " << PrioMap[4] << endl
- << " Extra => " << PrioMap[5] << endl
+ << " Required => " << PrioMap[pkgCache::State::Required] << endl
+ << " Important => " << PrioMap[pkgCache::State::Important] << endl
+ << " Standard => " << PrioMap[pkgCache::State::Standard] << endl
+ << " Optional => " << PrioMap[pkgCache::State::Optional] << endl
+ << " Extra => " << PrioMap[pkgCache::State::Extra] << endl
<< " Essentials => " << PrioEssentials << endl
<< " InstalledAndNotObsolete => " << PrioInstalledAndNotObsolete << endl
<< " Depends => " << PrioDepends << endl
if (WasKept == true)
Cache.MarkKeep(Pkg, false, false);
else
- Cache.MarkDelete(Pkg);
+ Cache.MarkDelete(Pkg, false, 0, false);
return false;
}
OldBreaks < Cache.BrokenCount())
{
if (OldVer == 0)
- Cache.MarkDelete(I);
+ Cache.MarkDelete(I, false, 0, false);
else
Cache.MarkKeep(I, false, false);
}
{
if (Debug == true)
clog << " Or group remove for " << I.FullName(false) << endl;
- Cache.MarkDelete(I);
+ Cache.MarkDelete(I, false, 0, false);
Change = true;
}
}
{
if (Debug == true)
clog << " Removing " << I.FullName(false) << " rather than change " << Start.TargetPkg().FullName(false) << endl;
- Cache.MarkDelete(I);
+ Cache.MarkDelete(I, false, 0, false);
if (Counter > 1 && Scores[Pkg->ID] > Scores[I->ID])
Scores[I->ID] = Scores[Pkg->ID];
}
if (Debug == true)
clog << " Removing " << I.FullName(false) << " because I can't find " << Start.TargetPkg().FullName(false) << endl;
if (InOr == false)
- Cache.MarkDelete(I);
+ Cache.MarkDelete(I, false, 0, false);
}
Change = true;
{
if (Debug == true)
clog << " Fixing " << I.FullName(false) << " via remove of " << J->Pkg.FullName(false) << endl;
- Cache.MarkDelete(J->Pkg);
+ Cache.MarkDelete(J->Pkg, false, 0, false);
}
}
else
continue;
// Restart again.
- if (K == LastStop)
- return _error->Error("Internal Error, pkgProblemResolver::ResolveByKeep is looping on package %s.",I.FullName(false).c_str());
+ if (K == LastStop) {
+ // I is an iterator based off our temporary package list,
+ // so copy the name we need before deleting the temporary list
+ std::string const LoopingPackage = I.FullName(false);
+ delete[] PList;
+ return _error->Error("Internal Error, pkgProblemResolver::ResolveByKeep is looping on package %s.", LoopingPackage.c_str());
+ }
LastStop = K;
K = PList - 1;
- }
+ }
+ delete[] PList;
return true;
}
/*}}}*/