// -*- 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;
// ---------------------------------------------------------------------
/* 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;
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
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;
}
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;
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)
if (CurrentFile->FileName == 0)
return false;
- Progress.SubProgress(Buf.st_size);
+ if (Progress != 0)
+ Progress->SubProgress(Buf.st_size);
return true;
}
/*}}}*/
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");
// 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];
TotalSize += Buf.st_size;
}
- if (pkgAddSourcesSize(TotalSize) == false)
+ if (pkgAddStatusSize(TotalSize) == false)
return false;
// Generate the pkg source cache
// Compute the progress
unsigned long TotalSize = 0;
- if (pkgAddSourcesSize(TotalSize) == false)
+ if (pkgAddStatusSize(TotalSize) == false)
return false;
unsigned long CurrentSize = 0;
// Compute the progress
unsigned long TotalSize = 0;
- if (pkgAddSourcesSize(TotalSize) == false)
+ if (pkgAddStatusSize(TotalSize) == false)
{
delete Map;
return 0;