diff options
Diffstat (limited to 'apt-pkg/pkgcachegen.cc')
-rw-r--r-- | apt-pkg/pkgcachegen.cc | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index 478778946..0a645ca7e 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -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. @@ -33,8 +33,10 @@ // --------------------------------------------------------------------- /* 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; |