]> git.saurik.com Git - apt.git/blobdiff - cmdline/apt-cache.cc
convert EDSP to be based on FileFd instead of FILE*
[apt.git] / cmdline / apt-cache.cc
index b70e1db38fe6efe233b53584ef9c92a3b7ed5c03..4818330848e72af9f1d87320d7d7edb409187881 100644 (file)
@@ -46,6 +46,7 @@
 #include <apt-private/private-depends.h>
 #include <apt-private/private-show.h>
 #include <apt-private/private-search.h>
+#include <apt-private/private-unmet.h>
 #include <apt-private/private-main.h>
 
 #include <regex.h>
 
 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,7 +1101,7 @@ static bool GenCaches(CommandLine &)
    return CacheFile.BuildCaches(&Progress, true);
 }
                                                                        /*}}}*/
-bool ShowHelp(CommandLine &)                                           /*{{{*/
+static bool ShowHelp(CommandLine &)                                    /*{{{*/
 {
    std::cout <<
     _("Usage: apt-cache [options] command\n"
@@ -1217,7 +1116,7 @@ bool ShowHelp(CommandLine &)                                              /*{{{*/
    return true;
 }
                                                                        /*}}}*/
-std::vector<aptDispatchWithHelp> GetCommands()                         /*{{{*/
+static std::vector<aptDispatchWithHelp> 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();