]> git.saurik.com Git - apt.git/blobdiff - cmdline/apt-cache.cc
* merged with apt--mvo
[apt.git] / cmdline / apt-cache.cc
index 9293a9858c75f377baf3cd5201561736a84745b5..aea9ebeba178f18946f656a0f2166610be076664 100644 (file)
@@ -71,12 +71,6 @@ void LocalitySort(pkgCache::VerFile **begin,
 {   
    qsort(begin,Count,Size,LocalityCompare);
 }
-
-void LocalitySort(pkgCache::DescFile **begin,
-                 unsigned long Count,size_t Size)
-{   
-   qsort(begin,Count,Size,LocalityCompare);
-}
                                                                        /*}}}*/
 // UnMet - Show unmet dependencies                                     /*{{{*/
 // ---------------------------------------------------------------------
@@ -188,14 +182,7 @@ bool DumpPackage(CommandLine &CmdL)
       {
         cout << Cur.VerStr();
         for (pkgCache::VerFileIterator Vf = Cur.FileList(); Vf.end() == false; Vf++)
-           cout << " (" << Vf.File().FileName() << ")";
-        cout << endl;
-        for (pkgCache::DescIterator D = Cur.DescriptionList(); D.end() == false; D++)
-        {
-           cout << " Description Language: " << D.LanguageCode() << endl
-                << "                 File: " << D.FileList().File().FileName() << endl
-                << "                  MD5: " << D.md5() << endl;
-        }
+           cout << "(" << Vf.File().FileName() << ")";
         cout << endl;
       }
       
@@ -290,15 +277,11 @@ bool Stats(CommandLine &Cmd)
    
    cout << _("Total distinct versions: ") << Cache.Head().VersionCount << " (" <<
       SizeToStr(Cache.Head().VersionCount*Cache.Head().VersionSz) << ')' << endl;
-   cout << _("Total Distinct Descriptions: ") << Cache.Head().DescriptionCount << " (" <<
-      SizeToStr(Cache.Head().DescriptionCount*Cache.Head().DescriptionSz) << ')' << endl;
    cout << _("Total dependencies: ") << Cache.Head().DependsCount << " (" << 
       SizeToStr(Cache.Head().DependsCount*Cache.Head().DependencySz) << ')' << endl;
    
    cout << _("Total ver/file relations: ") << Cache.Head().VerFileCount << " (" <<
       SizeToStr(Cache.Head().VerFileCount*Cache.Head().VerFileSz) << ')' << endl;
-   cout << _("Total Desc/File relations: ") << Cache.Head().DescFileCount << " (" <<
-      SizeToStr(Cache.Head().DescFileCount*Cache.Head().DescFileSz) << ')' << endl;
    cout << _("Total Provides mappings: ") << Cache.Head().ProvidesCount << " (" <<
       SizeToStr(Cache.Head().ProvidesCount*Cache.Head().ProvidesSz) << ')' << endl;
    
@@ -361,12 +344,6 @@ bool Dump(CommandLine &Cmd)
         for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; D++)
            cout << "  Depends: " << D.TargetPkg().Name() << ' ' << 
                             DeNull(D.TargetVer()) << endl;
-        for (pkgCache::DescIterator D = V.DescriptionList(); D.end() == false; D++)
-        {
-           cout << " Description Language: " << D.LanguageCode() << endl
-                << "                 File: " << D.FileList().File().FileName() << endl
-                << "                  MD5: " << D.md5() << endl;
-        } 
       }      
    }
 
@@ -1215,49 +1192,28 @@ bool DisplayRecord(pkgCache::VerIterator V)
    if (_error->PendingError() == true)
       return false;
    
-   // Read the record
+   // Read the record and then write it out again.
    unsigned char *Buffer = new unsigned char[GCache->HeaderP->MaxVerFileSize+1];
    Buffer[V.FileList()->Size] = '\n';
    if (PkgF.Seek(V.FileList()->Offset) == false ||
-       PkgF.Read(Buffer,V.FileList()->Size) == false)
+       PkgF.Read(Buffer,V.FileList()->Size) == false ||
+       fwrite(Buffer,1,V.FileList()->Size+1,stdout) < (size_t)(V.FileList()->Size+1))
    {
       delete [] Buffer;
       return false;
    }
-
-   // Strip the Description
-   unsigned char *DescP = (unsigned char*)strstr((char*)Buffer, "Description:");
-   *DescP='\0';
-   if (write(STDOUT_FILENO,Buffer, strlen((char*)Buffer)+1) != strlen((char *)Buffer)+1)
-   {
-      delete [] Buffer;
-      return false;
-   }
-
+   
    delete [] Buffer;
 
-   // Show the right description
-   pkgRecords Recs(*GCache);
-   pkgCache::DescIterator DescDefault = V.DescriptionList();
-   pkgCache::DescIterator Desc = DescDefault;
-   for (; Desc.end() == false; Desc++)
-      if (pkgIndexFile::LanguageCode() == Desc.LanguageCode())
-        break;
-   if (Desc.end() == true) Desc = DescDefault;
-
-   pkgRecords::Parser &P = Recs.Lookup(Desc.FileList());
-   cout << "Description" << ( (strcmp(Desc.LanguageCode(),"") != 0) ? "-" : "" ) << Desc.LanguageCode() << ": " << P.LongDesc() << endl;
-
-
    return true;
 }
                                                                        /*}}}*/
 // Search - Perform a search                                           /*{{{*/
 // ---------------------------------------------------------------------
 /* This searches the package names and pacakge descriptions for a pattern */
-struct ExDescFile
+struct ExVerFile
 {
-   pkgCache::DescFile *Df;
+   pkgCache::VerFile *Vf;
    bool NameMatch;
 };
 
@@ -1297,35 +1253,35 @@ bool Search(CommandLine &CmdL)
       return false;
    }
    
-   ExDescFile *DFList = new ExDescFile[Cache.HeaderP->PackageCount+1];
-   memset(DFList,0,sizeof(*DFList)*Cache.HeaderP->PackageCount+1);
+   ExVerFile *VFList = new ExVerFile[Cache.HeaderP->PackageCount+1];
+   memset(VFList,0,sizeof(*VFList)*Cache.HeaderP->PackageCount+1);
 
    // Map versions that we want to write out onto the VerList array.
    for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++)
    {
-      DFList[P->ID].NameMatch = NumPatterns != 0;
+      VFList[P->ID].NameMatch = NumPatterns != 0;
       for (unsigned I = 0; I != NumPatterns; I++)
       {
         if (regexec(&Patterns[I],P.Name(),0,0,0) == 0)
-           DFList[P->ID].NameMatch &= true;
+           VFList[P->ID].NameMatch &= true;
         else
-           DFList[P->ID].NameMatch = false;
+           VFList[P->ID].NameMatch = false;
       }
         
       // Doing names only, drop any that dont match..
-      if (NamesOnly == true && DFList[P->ID].NameMatch == false)
+      if (NamesOnly == true && VFList[P->ID].NameMatch == false)
         continue;
         
       // Find the proper version to use. 
       pkgCache::VerIterator V = Plcy.GetCandidateVer(P);
       if (V.end() == false)
-        DFList[P->ID].Df = V.DescriptionList().FileList();
+        VFList[P->ID].Vf = V.FileList();
    }
       
    // Include all the packages that provide matching names too
    for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++)
    {
-      if (DFList[P->ID].NameMatch == false)
+      if (VFList[P->ID].NameMatch == false)
         continue;
 
       for (pkgCache::PrvIterator Prv = P.ProvidesList() ; Prv.end() == false; Prv++)
@@ -1333,18 +1289,18 @@ bool Search(CommandLine &CmdL)
         pkgCache::VerIterator V = Plcy.GetCandidateVer(Prv.OwnerPkg());
         if (V.end() == false)
         {
-           DFList[Prv.OwnerPkg()->ID].Df = V.DescriptionList().FileList();
-           DFList[Prv.OwnerPkg()->ID].NameMatch = true;
+           VFList[Prv.OwnerPkg()->ID].Vf = V.FileList();
+           VFList[Prv.OwnerPkg()->ID].NameMatch = true;
         }
       }
    }
-   
-   LocalitySort(&DFList->Df,Cache.HeaderP->PackageCount,sizeof(*DFList));
+
+   LocalitySort(&VFList->Vf,Cache.HeaderP->PackageCount,sizeof(*VFList));
 
    // Iterate over all the version records and check them
-   for (ExDescFile *J = DFList; J->Df != 0; J++)
+   for (ExVerFile *J = VFList; J->Vf != 0; J++)
    {
-      pkgRecords::Parser &P = Recs.Lookup(pkgCache::DescFileIterator(Cache,J->Df));
+      pkgRecords::Parser &P = Recs.Lookup(pkgCache::VerFileIterator(Cache,J->Vf));
 
       bool Match = true;
       if (J->NameMatch == false)
@@ -1375,7 +1331,7 @@ bool Search(CommandLine &CmdL)
       }
    }
    
-   delete [] DFList;
+   delete [] VFList;
    for (unsigned I = 0; I != NumPatterns; I++)
       regfree(&Patterns[I]);
    if (ferror(stdout))
@@ -1618,10 +1574,11 @@ bool Madison(CommandLine &CmdL)
 
    pkgCache &Cache = *GCache;
 
-   // Create the text record parsers
+   // Create the src text record parsers and ignore errors about missing
+   // deb-src lines that are generated from pkgSrcRecords::pkgSrcRecords
    pkgSrcRecords SrcRecs(*SrcList);
    if (_error->PendingError() == true)
-      return false;
+      _error->Discard();
 
    for (const char **I = CmdL.FileList + 1; *I != 0; I++)
    {