X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/ecc138f858fab61e0b888d3d13854d1422c3432b..b6a0018e1c4bb22132e0316a81b7a455c6333cf1:/cmdline/apt-cache.cc diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index e61914298..050508663 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -310,10 +310,15 @@ static void ShowHashTableStats(std::string Type, // Stats - Dump some nice statistics /*{{{*/ // --------------------------------------------------------------------- /* */ -static bool Stats(CommandLine &) +static bool Stats(CommandLine &CmdL) { pkgCacheFile CacheFile; pkgCache *Cache = CacheFile.GetPkgCache(); + + if (CmdL.FileSize() > 1) { + _error->Error(_("apt-cache stats does not take any arguments")); + return false; + } if (unlikely(Cache == NULL)) return false; @@ -749,9 +754,9 @@ static bool ShowDepends(CommandLine &CmdL, bool const RevDepends) } // Display all solutions - SPtrArray List = D.AllTargets(); - pkgPrioSortList(*Cache,List); - for (pkgCache::Version **I = List; *I != 0; I++) + std::unique_ptr List(D.AllTargets()); + pkgPrioSortList(*Cache,List.get()); + for (pkgCache::Version **I = List.get(); *I != 0; I++) { pkgCache::VerIterator V(*Cache,*I); if (V != Cache->VerP + V.ParentPkg()->VersionList || @@ -1327,6 +1332,7 @@ static bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V) struct ExDescFile { pkgCache::DescFile *Df; + pkgCache::VerIterator V; map_id_t ID; }; @@ -1412,6 +1418,7 @@ static bool Search(CommandLine &CmdL) if (D.end() == true) continue; DFList[G->ID].Df = D.FileList(); + DFList[G->ID].V = V; DFList[G->ID].ID = G->ID; } @@ -1431,11 +1438,12 @@ static bool Search(CommandLine &CmdL) if (D.end() == true) continue; DFList[id].Df = D.FileList(); + DFList[id].V = V; DFList[id].ID = id; size_t const PrvPatternOffset = id * NumPatterns; for (unsigned I = 0; I < NumPatterns; ++I) - PatternMatch[PrvPatternOffset + I] = PatternMatch[PatternOffset + I]; + PatternMatch[PrvPatternOffset + I] |= PatternMatch[PatternOffset + I]; } } @@ -1472,13 +1480,7 @@ static bool Search(CommandLine &CmdL) if (matchedAll == true) { if (ShowFull == true) - { - const char *Start; - const char *End; - P.GetRec(Start,End); - fwrite(Start,End-Start,1,stdout); - putc('\n',stdout); - } + DisplayRecord(CacheFile, J->V); else printf("%s - %s\n",P.Name().c_str(),P.ShortDesc().c_str()); } @@ -1605,6 +1607,10 @@ static bool ShowSrcPackage(CommandLine &CmdL) pkgSrcRecords::Parser *Parse; unsigned found_this = 0; while ((Parse = SrcRecs.Find(*I,false)) != 0) { + // SrcRecs.Find() will find both binary and source names + if (_config->FindB("APT::Cache::Only-Source", false) == true) + if (Parse->Package() != *I) + continue; cout << Parse->AsStr() << endl;; found++; found_this++; @@ -1667,19 +1673,33 @@ static bool Policy(CommandLine &CmdL) pkgCache::PkgIterator I = Cache->PkgBegin(); for (;I.end() != true; ++I) { - if (Plcy->GetPriority(I) == 0) + // Old code for debugging + if (_config->FindI("APT::Policy", 1) < 1) { + if (Plcy->GetPriority(I) == 0) + continue; + + // Print the package name and the version we are forcing to + cout << " " << I.FullName(true) << " -> "; + + pkgCache::VerIterator V = Plcy->GetMatch(I); + if (V.end() == true) + cout << _("(not found)") << endl; + else + cout << V.VerStr() << endl; + continue; + } + // New code + for (pkgCache::VerIterator V = I.VersionList(); !V.end(); V++) { + auto Prio = Plcy->GetPriority(V, false); + if (Prio == 0) + continue; - // Print the package name and the version we are forcing to - cout << " " << I.FullName(true) << " -> "; - - pkgCache::VerIterator V = Plcy->GetMatch(I); - if (V.end() == true) - cout << _("(not found)") << endl; - else - cout << V.VerStr() << endl; - } - + cout << " "; + // Print the package name and the version we are forcing to + ioprintf(cout, _("%s -> %s with priority %d\n"), I.FullName(true).c_str(), V.VerStr(), Prio); + } + } return true; } @@ -1715,7 +1735,7 @@ static bool Policy(CommandLine &CmdL) cout << V.VerStr() << endl; // Pinned version - if (Plcy->GetPriority(Pkg) != 0) + if (_config->FindI("APT::Policy", 1) < 1 && Plcy->GetPriority(Pkg) != 0) { cout << _(" Package pin: "); V = Plcy->GetMatch(Pkg); @@ -1733,7 +1753,10 @@ static bool Policy(CommandLine &CmdL) cout << " *** " << V.VerStr(); else cout << " " << V.VerStr(); - cout << " " << Plcy->GetPriority(V) << endl; + if (_config->FindI("APT::Policy", 1) < 1) + cout << " " << Plcy->GetPriority(Pkg) << endl; + else + cout << " " << Plcy->GetPriority(V) << endl; for (pkgCache::VerFileIterator VF = V.FileList(); VF.end() == false; ++VF) { // Locate the associated index files so we can derive a description