Minor cleanups, fix for checksum lowercase bug
[ntk/apt.git] / apt-pkg / pkgcachegen.cc
index 4787789..0a645ca 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: pkgcachegen.cc,v 1.40 1999/07/15 03:15:48 jgg Exp $
+// $Id: pkgcachegen.cc,v 1.41 1999/07/26 17:46:07 jgg Exp $
 /* ######################################################################
    
    Package Cache Generator - Generator for the cache structure.
 // ---------------------------------------------------------------------
 /* We set the diry flag and make sure that is written to the disk */
 pkgCacheGenerator::pkgCacheGenerator(DynamicMMap &Map,OpProgress &Prog) :
-                    Map(Map), Cache(Map), Progress(Prog)
+                    Map(Map), Cache(Map), Progress(&Prog)
 {
+   CurrentFile = 0;
+   
    if (_error->PendingError() == true)
       return;
    
@@ -68,7 +70,8 @@ pkgCacheGenerator::~pkgCacheGenerator()
 // ---------------------------------------------------------------------
 /* This provides the generation of the entries in the cache. Each loop
    goes through a single package record from the underlying parse engine. */
-bool pkgCacheGenerator::MergeList(ListParser &List)
+bool pkgCacheGenerator::MergeList(ListParser &List,
+                                 pkgCache::VerIterator *OutVer)
 {
    List.Owner = this;
 
@@ -84,8 +87,8 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
       if (NewPackage(Pkg,PackageName) == false)
         return _error->Error("Error occured while processing %s (NewPackage)",PackageName.c_str());
       Counter++;
-      if (Counter % 100 == 0)
-        Progress.Progress(List.Offset());
+      if (Counter % 100 == 0 && Progress != 0)
+        Progress->Progress(List.Offset());
 
       /* Get a pointer to the version structure. We know the list is sorted
          so we use that fact in the search. Insertion of new versions is
@@ -120,6 +123,13 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
         if (NewFileVer(Ver,List) == false)
            return _error->Error("Error occured while processing %s (NewFileVer1)",PackageName.c_str());
         
+        // Read only a single record and return
+        if (OutVer != 0)
+        {
+           *OutVer = Ver;
+           return true;
+        }
+        
         continue;
       }      
 
@@ -147,6 +157,13 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
       
       if (NewFileVer(Ver,List) == false)
         return _error->Error("Error occured while processing %s (NewVersion2)",PackageName.c_str());
+
+      // Read only a single record and return
+      if (OutVer != 0)
+      {
+        *OutVer = Ver;
+        return true;
+      }      
    }
 
    return true;
@@ -188,6 +205,9 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,string Name)
 bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver,
                                   ListParser &List)
 {
+   if (CurrentFile == 0)
+      return true;
+   
    // Get a structure
    unsigned long VerFile = Map.Allocate(sizeof(pkgCache::VerFile));
    if (VerFile == 0)
@@ -366,7 +386,8 @@ bool pkgCacheGenerator::SelectFile(string File,unsigned long Flags)
    if (CurrentFile->FileName == 0)
       return false;
    
-   Progress.SubProgress(Buf.st_size);
+   if (Progress != 0)
+      Progress->SubProgress(Buf.st_size);
    return true;
 }
                                                                        /*}}}*/
@@ -572,10 +593,10 @@ bool pkgPkgCacheCheck(string CacheFile)
    return true;
 }
                                                                        /*}}}*/
-// AddSourcesSize - Add the size of the status files                   /*{{{*/
+// AddStatusSize - Add the size of the status files                    /*{{{*/
 // ---------------------------------------------------------------------
 /* This adds the size of all the status files to the size counter */
-static bool pkgAddSourcesSize(unsigned long &TotalSize)
+bool pkgAddStatusSize(unsigned long &TotalSize)
 {
    // Grab the file names
    string xstatus = _config->FindFile("Dir::State::xstatus");
@@ -598,8 +619,8 @@ static bool pkgAddSourcesSize(unsigned long &TotalSize)
 // MergeStatus - Add the status files to the cache                     /*{{{*/
 // ---------------------------------------------------------------------
 /* This adds the status files to the map */
-static bool pkgMergeStatus(OpProgress &Progress,pkgCacheGenerator &Gen,
-                          unsigned long &CurrentSize,unsigned long TotalSize)
+bool pkgMergeStatus(OpProgress &Progress,pkgCacheGenerator &Gen,
+                   unsigned long &CurrentSize,unsigned long TotalSize)
 {
    // Grab the file names   
    string Status[3];
@@ -653,7 +674,7 @@ bool pkgGenerateSrcCache(pkgSourceList &List,OpProgress &Progress,
       TotalSize += Buf.st_size;
    }
    
-   if (pkgAddSourcesSize(TotalSize) == false)
+   if (pkgAddStatusSize(TotalSize) == false)
       return false;
    
    // Generate the pkg source cache
@@ -759,7 +780,7 @@ bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress)
    
    // Compute the progress
    unsigned long TotalSize = 0;
-   if (pkgAddSourcesSize(TotalSize) == false)
+   if (pkgAddStatusSize(TotalSize) == false)
       return false;
 
    unsigned long CurrentSize = 0;
@@ -873,7 +894,7 @@ MMap *pkgMakeStatusCacheMem(pkgSourceList &List,OpProgress &Progress)
    
    // Compute the progress
    unsigned long TotalSize = 0;
-   if (pkgAddSourcesSize(TotalSize) == false)
+   if (pkgAddStatusSize(TotalSize) == false)
    {
       delete Map;
       return 0;