X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/f49d103adc47c5c34f4ca852605ee55710e486b9..cfefaf6c4a27bbd5bfdad67e482f4b01506f5bd5:/apt-private/private-cacheset.cc diff --git a/apt-private/private-cacheset.cc b/apt-private/private-cacheset.cc index 6fb224010..e37e7b227 100644 --- a/apt-private/private-cacheset.cc +++ b/apt-private/private-cacheset.cc @@ -1,9 +1,18 @@ +#include + #include #include #include -#include +#include +#include +#include +#include + +#include + +#include -#include "private-cacheset.h" +#include bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile, LocalitySortedVersionSet &output_set, @@ -52,10 +61,25 @@ bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile, output_set.insert(policy->GetCandidateVer(P)); } } + else if (_config->FindB("APT::Cmd::Manual-Installed") == true) + { + if (P.CurrentVer() && + ((*DepCache)[P].Flags & pkgCache::Flag::Auto) == false) + { + pkgPolicy *policy = CacheFile.GetPolicy(); + output_set.insert(policy->GetCandidateVer(P)); + } + } else { pkgPolicy *policy = CacheFile.GetPolicy(); - output_set.insert(policy->GetCandidateVer(P)); + if (policy->GetCandidateVer(P).IsGood()) + output_set.insert(policy->GetCandidateVer(P)); + else + // no candidate, this may happen for packages in + // dpkg "deinstall ok config-file" state - we pick the first ver + // (which should be the only one) + output_set.insert(P.VersionList()); } } progress.Done();