X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/8561c2fedae26aecd8ba758a5e7ef686ba1243f3..607bab3fe856d228f22e1cd96dbb7204e2f3375d:/cmdline/apt-cache.cc diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index dd1488568..481833084 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -68,109 +69,6 @@ using namespace std; -// UnMet - Show unmet dependencies /*{{{*/ -// --------------------------------------------------------------------- -/* */ -static bool ShowUnMet(pkgCache::VerIterator const &V, bool const Important) -{ - bool Header = false; - for (pkgCache::DepIterator D = V.DependsList(); D.end() == false;) - { - // Collect or groups - pkgCache::DepIterator Start; - pkgCache::DepIterator End; - D.GlobOr(Start,End); - - // Important deps only - if (Important == true) - if (End->Type != pkgCache::Dep::PreDepends && - End->Type != pkgCache::Dep::Depends) - continue; - - // Skip conflicts and replaces - if (End.IsNegative() == true || End->Type == pkgCache::Dep::Replaces) - continue; - - // Verify the or group - bool OK = false; - pkgCache::DepIterator RealStart = Start; - do - { - // See if this dep is Ok - pkgCache::Version **VList = Start.AllTargets(); - if (*VList != 0) - { - OK = true; - delete [] VList; - break; - } - delete [] VList; - - if (Start == End) - break; - ++Start; - } - while (1); - - // The group is OK - if (OK == true) - continue; - - // Oops, it failed.. - if (Header == false) - ioprintf(cout,_("Package %s version %s has an unmet dep:\n"), - V.ParentPkg().FullName(true).c_str(),V.VerStr()); - Header = true; - - // Print out the dep type - cout << " " << End.DepType() << ": "; - - // Show the group - Start = RealStart; - do - { - cout << Start.TargetPkg().FullName(true); - if (Start.TargetVer() != 0) - cout << " (" << Start.CompType() << " " << Start.TargetVer() << - ")"; - if (Start == End) - break; - cout << " | "; - ++Start; - } - while (1); - - cout << endl; - } - return true; -} -static bool UnMet(CommandLine &CmdL) -{ - bool const Important = _config->FindB("APT::Cache::Important",false); - - pkgCacheFile CacheFile; - if (unlikely(CacheFile.GetPkgCache() == NULL)) - return false; - - if (CmdL.FileSize() <= 1) - { - for (pkgCache::PkgIterator P = CacheFile.GetPkgCache()->PkgBegin(); P.end() == false; ++P) - for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V) - if (ShowUnMet(V, Important) == false) - return false; - } - else - { - CacheSetHelperVirtuals helper(true, GlobalError::NOTICE); - APT::VersionList verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, - APT::CacheSetHelper::CANDIDATE, helper); - for (APT::VersionList::iterator V = verset.begin(); V != verset.end(); ++V) - if (ShowUnMet(V, Important) == false) - return false; - } - return true; -} - /*}}}*/ // DumpPackage - Show a dump of a package record /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -274,7 +172,8 @@ static void ShowHashTableStats(std::string Type, cout << "Total buckets in " << Type << ": " << NumBuckets << std::endl; cout << " Unused: " << UnusedBuckets << std::endl; cout << " Used: " << UsedBuckets << std::endl; - cout << " Average entries: " << Entries/(double)NumBuckets << std::endl; + cout << " Utilization: " << 100.0 * UsedBuckets/NumBuckets << "%" << std::endl; + cout << " Average entries: " << Entries/(double)UsedBuckets << std::endl; cout << " Longest: " << LongestBucket << std::endl; cout << " Shortest: " << ShortestBucket << std::endl; } @@ -1202,22 +1101,22 @@ static bool GenCaches(CommandLine &) return CacheFile.BuildCaches(&Progress, true); } /*}}}*/ -bool ShowHelp(CommandLine &) /*{{{*/ +static bool ShowHelp(CommandLine &) /*{{{*/ { std::cout << _("Usage: apt-cache [options] command\n" " apt-cache [options] show pkg1 [pkg2 ...]\n" "\n" "apt-cache queries and displays available information about installed\n" - "as well as installable packages. It works exclusively on the data\n" - "acquired via the 'update' command of e.g. apt-get to the local cache.\n" - "The displayed information can therefore be outdated if the last update\n" - "is too long ago, but in exchange apt-cache works independently of the\n" + "and installable packages. It works exclusively on the data acquired\n" + "into the local cache via the 'update' command of e.g. apt-get. The\n" + "displayed information may therefore be outdated if the last update was\n" + "too long ago, but in exchange apt-cache works independently of the\n" "availability of the configured sources (e.g. offline).\n"); return true; } /*}}}*/ -std::vector GetCommands() /*{{{*/ +static std::vector GetCommands() /*{{{*/ { return { {"gencaches",&GenCaches, nullptr}, @@ -1247,7 +1146,7 @@ int main(int argc,const char *argv[]) /*{{{*/ // Parse the command line and initialize the package library CommandLine CmdL; - auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CACHE, &_config, &_system, argc, argv); + auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CACHE, &_config, &_system, argc, argv, &ShowHelp, &GetCommands); InitOutput();