|
@@ -14,74 +14,77 @@
|
|
|
|
|
|
|
|
#include <apti18n.h>
|
|
#include <apti18n.h>
|
|
|
|
|
|
|
|
-bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
|
|
|
|
|
- LocalitySortedVersionSet &output_set,
|
|
|
|
|
- OpProgress &progress)
|
|
|
|
|
|
|
+bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
|
|
|
|
|
+ APT::VersionContainerInterface * const vci,
|
|
|
|
|
+ OpProgress * const progress)
|
|
|
{
|
|
{
|
|
|
Matcher null_matcher = Matcher();
|
|
Matcher null_matcher = Matcher();
|
|
|
- return GetLocalitySortedVersionSet(CacheFile, output_set,
|
|
|
|
|
|
|
+ return GetLocalitySortedVersionSet(CacheFile, vci,
|
|
|
null_matcher, progress);
|
|
null_matcher, progress);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
|
|
|
|
|
- LocalitySortedVersionSet &output_set,
|
|
|
|
|
|
|
+bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
|
|
|
|
|
+ APT::VersionContainerInterface * const vci,
|
|
|
Matcher &matcher,
|
|
Matcher &matcher,
|
|
|
- OpProgress &progress)
|
|
|
|
|
|
|
+ OpProgress * const progress)
|
|
|
{
|
|
{
|
|
|
pkgCache *Cache = CacheFile.GetPkgCache();
|
|
pkgCache *Cache = CacheFile.GetPkgCache();
|
|
|
pkgDepCache *DepCache = CacheFile.GetDepCache();
|
|
pkgDepCache *DepCache = CacheFile.GetDepCache();
|
|
|
|
|
+ APT::CacheSetHelper helper(false);
|
|
|
|
|
|
|
|
int Done=0;
|
|
int Done=0;
|
|
|
- progress.SubProgress(Cache->Head().PackageCount, _("Sorting"));
|
|
|
|
|
|
|
+ if (progress != NULL)
|
|
|
|
|
+ progress->SubProgress(Cache->Head().PackageCount, _("Sorting"));
|
|
|
|
|
+
|
|
|
|
|
+ bool const insertCurrentVer = _config->FindB("APT::Cmd::Installed", false);
|
|
|
|
|
+ bool const insertUpgradable = _config->FindB("APT::Cmd::Upgradable", false);
|
|
|
|
|
+ bool const insertManualInstalled = _config->FindB("APT::Cmd::Manual-Installed", false);
|
|
|
|
|
+
|
|
|
for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
|
|
for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
|
|
|
{
|
|
{
|
|
|
- if (Done%500 == 0)
|
|
|
|
|
- progress.Progress(Done);
|
|
|
|
|
- Done++;
|
|
|
|
|
|
|
+ if (progress != NULL)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (Done % 500 == 0)
|
|
|
|
|
+ progress->Progress(Done);
|
|
|
|
|
+ ++Done;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // exclude virtual pkgs
|
|
|
|
|
+ if (P->VersionList == 0)
|
|
|
|
|
+ continue;
|
|
|
|
|
|
|
|
if ((matcher)(P) == false)
|
|
if ((matcher)(P) == false)
|
|
|
- continue;
|
|
|
|
|
|
|
+ continue;
|
|
|
|
|
|
|
|
- // exclude virtual pkgs
|
|
|
|
|
- if (P.VersionList() == 0)
|
|
|
|
|
- continue;
|
|
|
|
|
pkgDepCache::StateCache &state = (*DepCache)[P];
|
|
pkgDepCache::StateCache &state = (*DepCache)[P];
|
|
|
- if (_config->FindB("APT::Cmd::Installed") == true)
|
|
|
|
|
|
|
+ if (insertCurrentVer == true)
|
|
|
{
|
|
{
|
|
|
- if (P.CurrentVer() != NULL)
|
|
|
|
|
- {
|
|
|
|
|
- output_set.insert(P.CurrentVer());
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (P->CurrentVer != 0)
|
|
|
|
|
+ vci->FromPackage(vci, CacheFile, P, APT::VersionContainerInterface::INSTALLED, helper);
|
|
|
}
|
|
}
|
|
|
- else if (_config->FindB("APT::Cmd::Upgradable") == true)
|
|
|
|
|
|
|
+ else if (insertUpgradable == true)
|
|
|
{
|
|
{
|
|
|
- if(P.CurrentVer() && state.Upgradable())
|
|
|
|
|
- {
|
|
|
|
|
- pkgPolicy *policy = CacheFile.GetPolicy();
|
|
|
|
|
- output_set.insert(policy->GetCandidateVer(P));
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if(P.CurrentVer() && state.Upgradable())
|
|
|
|
|
+ vci->FromPackage(vci, CacheFile, P, APT::VersionContainerInterface::CANDIDATE, helper);
|
|
|
}
|
|
}
|
|
|
- else if (_config->FindB("APT::Cmd::Manual-Installed") == true)
|
|
|
|
|
|
|
+ else if (insertManualInstalled == true)
|
|
|
{
|
|
{
|
|
|
- if (P.CurrentVer() &&
|
|
|
|
|
- ((*DepCache)[P].Flags & pkgCache::Flag::Auto) == false)
|
|
|
|
|
- {
|
|
|
|
|
- pkgPolicy *policy = CacheFile.GetPolicy();
|
|
|
|
|
- output_set.insert(policy->GetCandidateVer(P));
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (P.CurrentVer() &&
|
|
|
|
|
+ ((*DepCache)[P].Flags & pkgCache::Flag::Auto) == false)
|
|
|
|
|
+ vci->FromPackage(vci, CacheFile, P, APT::VersionContainerInterface::CANDIDATE, helper);
|
|
|
}
|
|
}
|
|
|
- else
|
|
|
|
|
|
|
+ else
|
|
|
{
|
|
{
|
|
|
- pkgPolicy *policy = CacheFile.GetPolicy();
|
|
|
|
|
- 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());
|
|
|
|
|
|
|
+ if (vci->FromPackage(vci, CacheFile, P, APT::VersionContainerInterface::CANDIDATE, helper) == false)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 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)
|
|
|
|
|
+ vci->insert(P.VersionList());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- progress.Done();
|
|
|
|
|
|
|
+ if (progress != NULL)
|
|
|
|
|
+ progress->Done();
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|