CacheSetHelperVirtuals helper(true, GlobalError::NOTICE);
APT::CacheSetHelper::VerSelector const select = _config->FindB("APT::Cache::AllVersions", true) ?
APT::CacheSetHelper::ALL : APT::CacheSetHelper::CANDIDATE;
+ if (select == APT::CacheSetHelper::CANDIDATE && CacheFile.GetDepCache() == nullptr)
+ return false;
APT::VersionList const verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, select, helper);
int const ShowVersion = _config->FindI("APT::Cache::Show::Version", 1);
for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver)
return true;
}
/*}}}*/
+static std::string Sha1FromString(std::string const &input) /*{{{*/
+{
+ // XXX: move to hashes.h: HashString::FromString() ?
+ SHA1Summation sha1;
+ sha1.Add(input.c_str(), input.length());
+ return sha1.Result().Value();
+}
+ /*}}}*/
bool ShowSrcPackage(CommandLine &CmdL) /*{{{*/
{
pkgCacheFile CacheFile;
return false;
bool found = false;
+ // avoid showing identical records
+ std::set<std::string> seen;
for (const char **I = CmdL.FileList + 1; *I != 0; I++)
{
SrcRecs.Restart();
if (_config->FindB("APT::Cache::Only-Source", false) == true)
if (Parse->Package() != *I)
continue;
- std::cout << Parse->AsStr() << std::endl;;
- found = true;
- found_this = true;
+ std::string sha1str = Sha1FromString(Parse->AsStr());
+ if (std::find(seen.begin(), seen.end(), sha1str) == seen.end())
+ {
+ std::cout << Parse->AsStr() << std::endl;;
+ found = true;
+ found_this = true;
+ seen.insert(sha1str);
+ }
}
if (found_this == false) {
_error->Warning(_("Unable to locate package %s"),*I);
bool Policy(CommandLine &CmdL)
{
pkgCacheFile CacheFile;
- pkgCache *Cache = CacheFile.GetPkgCache();
- pkgPolicy *Plcy = CacheFile.GetPolicy();
- pkgSourceList *SrcList = CacheFile.GetSourceList();
- if (unlikely(Cache == NULL || Plcy == NULL || SrcList == NULL))
+ pkgSourceList const * const SrcList = CacheFile.GetSourceList();
+ if (unlikely(SrcList == nullptr))
+ return false;
+ pkgCache * const Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == nullptr))
+ return false;
+ pkgPolicy * const Plcy = CacheFile.GetPolicy();
+ if (unlikely(Plcy == nullptr))
return false;
-
- bool OldPolicy = _config->FindI("APT::Policy", 1) < 1;
// Print out all of the package files
if (CmdL.FileList[1] == 0)
pkgCache::PkgIterator I = Cache->PkgBegin();
for (;I.end() != true; ++I)
{
- // Old code for debugging
- if (OldPolicy)
- {
- if (Plcy->GetPriority(I) == 0)
- continue;
-
- // Print the package name and the version we are forcing to
- std::cout << " " << I.FullName(true) << " -> ";
-
- pkgCache::VerIterator V = Plcy->GetMatch(I);
- if (V.end() == true)
- std::cout << _("(not found)") << std::endl;
- else
- std::cout << V.VerStr() << std::endl;
-
- continue;
- }
- // New code
for (pkgCache::VerIterator V = I.VersionList(); !V.end(); ++V) {
auto Prio = Plcy->GetPriority(V, false);
if (Prio == 0)
else
std::cout << V.VerStr() << std::endl;
- // Pinned version
- if (OldPolicy && Plcy->GetPriority(Pkg) != 0)
- {
- std::cout << _(" Package pin: ");
- V = Plcy->GetMatch(Pkg);
- if (V.end() == true)
- std::cout << _("(not found)") << std::endl;
- else
- std::cout << V.VerStr() << std::endl;
- }
-
// Show the priority tables
std::cout << _(" Version table:") << std::endl;
for (V = Pkg.VersionList(); V.end() == false; ++V)
std::cout << " *** " << V.VerStr();
else
std::cout << " " << V.VerStr();
- if (_config->FindI("APT::Policy", 1) < 1)
- std::cout << " " << Plcy->GetPriority(Pkg) << std::endl;
- else
- std::cout << " " << Plcy->GetPriority(V) << std::endl;
+
+ std::cout << " " << Plcy->GetPriority(V) << std::endl;
for (pkgCache::VerFileIterator VF = V.FileList(); VF.end() == false; ++VF)
{
// Locate the associated index files so we can derive a description