]> git.saurik.com Git - apt.git/blobdiff - cmdline/apt-cache.cc
parse arch-qualified Provides correctly
[apt.git] / cmdline / apt-cache.cc
index 0f4f7e1ce1e9ef30a9ce9bd716e9c46bd5263988..a5024c5812924738ddd0ab598854cccd41c9264c 100644 (file)
@@ -116,7 +116,7 @@ static bool ShowUnMet(pkgCache::VerIterator const &V, bool const Important)
                  continue;
 
            // Skip conflicts and replaces
                  continue;
 
            // Skip conflicts and replaces
-           if (End.IsNegative() == true)
+           if (End.IsNegative() == true || End->Type == pkgCache::Dep::Replaces)
               continue;
 
            // Verify the or group
               continue;
 
            // Verify the or group
@@ -133,7 +133,7 @@ static bool ShowUnMet(pkgCache::VerIterator const &V, bool const Important)
                  break;
               }
               delete [] VList;
                  break;
               }
               delete [] VList;
-              
+
               if (Start == End)
                  break;
               ++Start;
               if (Start == End)
                  break;
               ++Start;
@@ -267,11 +267,14 @@ static bool DumpPackage(CommandLine &CmdL)
 // ShowHashTableStats - Show stats about a hashtable                   /*{{{*/
 // ---------------------------------------------------------------------
 /* */
 // ShowHashTableStats - Show stats about a hashtable                   /*{{{*/
 // ---------------------------------------------------------------------
 /* */
+static map_pointer_t PackageNext(pkgCache::Package const * const P) { return P->NextPackage; }
+static map_pointer_t GroupNext(pkgCache::Group const * const G) { return G->Next; }
 template<class T>
 static void ShowHashTableStats(std::string Type,
                                T *StartP,
                                map_pointer_t *Hashtable,
 template<class T>
 static void ShowHashTableStats(std::string Type,
                                T *StartP,
                                map_pointer_t *Hashtable,
-                               unsigned long Size)
+                               unsigned long Size,
+                              map_pointer_t(*Next)(T const * const))
 {
    // hashtable stats for the HashTable
    unsigned long NumBuckets = Size;
 {
    // hashtable stats for the HashTable
    unsigned long NumBuckets = Size;
@@ -290,7 +293,7 @@ static void ShowHashTableStats(std::string Type,
       }
       ++UsedBuckets;
       unsigned long ThisBucketSize = 0;
       }
       ++UsedBuckets;
       unsigned long ThisBucketSize = 0;
-      for (; P != StartP; P = StartP + P->Next)
+      for (; P != StartP; P = StartP + Next(P))
          ++ThisBucketSize;
       Entries += ThisBucketSize;
       LongestBucket = std::max(ThisBucketSize, LongestBucket);
          ++ThisBucketSize;
       Entries += ThisBucketSize;
       LongestBucket = std::max(ThisBucketSize, LongestBucket);
@@ -389,8 +392,10 @@ static bool Stats(CommandLine &)
            stritems.insert(V->VerStr);
         if (V->Section != 0)
            stritems.insert(V->Section);
            stritems.insert(V->VerStr);
         if (V->Section != 0)
            stritems.insert(V->Section);
+#if APT_PKG_ABI >= 413
         stritems.insert(V->SourcePkgName);
         stritems.insert(V->SourceVerStr);
         stritems.insert(V->SourcePkgName);
         stritems.insert(V->SourceVerStr);
+#endif
         for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; ++D)
         {
            if (D->Version != 0)
         for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; ++D)
         {
            if (D->Version != 0)
@@ -445,13 +450,13 @@ static bool Stats(CommandLine &)
       APT_CACHESIZE(VerFileCount, VerFileSz) +
       APT_CACHESIZE(DescFileCount, DescFileSz) +
       APT_CACHESIZE(ProvidesCount, ProvidesSz) +
       APT_CACHESIZE(VerFileCount, VerFileSz) +
       APT_CACHESIZE(DescFileCount, DescFileSz) +
       APT_CACHESIZE(ProvidesCount, ProvidesSz) +
-      (2 * Cache->Head().HashTableSize * sizeof(map_id_t));
+      (2 * Cache->Head().GetHashTableSize() * sizeof(map_id_t));
    cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
 #undef APT_CACHESIZE
 
    // hashtable stats
    cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
 #undef APT_CACHESIZE
 
    // hashtable stats
-   ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->Head().PkgHashTable(), Cache->Head().HashTableSize);
-   ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->Head().GrpHashTable(), Cache->Head().HashTableSize);
+   ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->Head().PkgHashTableP(), Cache->Head().GetHashTableSize(), PackageNext);
+   ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->Head().GrpHashTableP(), Cache->Head().GetHashTableSize(), GroupNext);
 
    return true;
 }
 
    return true;
 }
@@ -1891,26 +1896,10 @@ int main(int argc,const char *argv[])                                   /*{{{*/
    textdomain(PACKAGE);
 
    // Parse the command line and initialize the package library
    textdomain(PACKAGE);
 
    // Parse the command line and initialize the package library
-   CommandLine CmdL(Args.data(),_config);
-   if (pkgInitConfig(*_config) == false ||
-       CmdL.Parse(argc,argv) == false ||
-       pkgInitSystem(*_config,_system) == false)
-   {
-      _error->DumpErrors();
-      return 100;
-   }
+   CommandLine CmdL;
+   ParseCommandLine(CmdL, Cmds, Args.data(), &_config, &_system, argc, argv, ShowHelp);
 
 
-   // See if the help should be shown
-   if (_config->FindB("help") == true ||
-       CmdL.FileSize() == 0)
-   {
-      ShowHelp(CmdL);
-      return 0;
-   }
-   
-   // Deal with stdout not being a tty
-   if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
-      _config->Set("quiet","1");
+   InitOutput();
 
    if (_config->Exists("APT::Cache::Generate") == true)
       _config->Set("pkgCacheFile::Generate", _config->FindB("APT::Cache::Generate", true));
 
    if (_config->Exists("APT::Cache::Generate") == true)
       _config->Set("pkgCacheFile::Generate", _config->FindB("APT::Cache::Generate", true));