From 2e5f4e45f593535e2c88181ff7a9e2d32a5e60f9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 4 Jun 2010 14:43:03 +0200 Subject: * apt-pkg/cachefile.{cc,h}: - split Open() into submethods to be able to build only parts - make the OpProgress optional in the Cache buildprocess --- apt-pkg/cachefile.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'apt-pkg/cachefile.h') diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h index 3b057951c..b75a7dbe4 100644 --- a/apt-pkg/cachefile.h +++ b/apt-pkg/cachefile.h @@ -30,11 +30,10 @@ class pkgCacheFile MMap *Map; pkgCache *Cache; pkgDepCache *DCache; - + pkgPolicy *Policy; + public: - pkgPolicy *Policy; - // We look pretty much exactly like a pointer to a dep cache inline operator pkgCache &() {return *Cache;}; inline operator pkgCache *() {return Cache;}; @@ -45,12 +44,16 @@ class pkgCacheFile inline pkgDepCache::StateCache &operator [](pkgCache::PkgIterator const &I) {return (*DCache)[I];}; inline unsigned char &operator [](pkgCache::DepIterator const &I) {return (*DCache)[I];}; - bool BuildCaches(OpProgress &Progress,bool WithLock = true); - bool Open(OpProgress &Progress,bool WithLock = true); + bool BuildCaches(OpProgress *Progress = NULL,bool WithLock = true); + __deprecated bool BuildCaches(OpProgress &Progress,bool const &WithLock = true) { return BuildCaches(&Progress, WithLock); }; + bool BuildPolicy(OpProgress *Progress = NULL); + bool BuildDepCache(OpProgress *Progress = NULL); + bool Open(OpProgress *Progress = NULL, bool WithLock = true); + __deprecated bool Open(OpProgress &Progress,bool const &WithLock = true) { return Open(&Progress, WithLock); }; void Close(); pkgCacheFile(); - ~pkgCacheFile(); + virtual ~pkgCacheFile(); }; #endif -- cgit v1.2.3-70-g09d2 From 3f8621c5effb167a51944b86334867e2fe8fedb3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 4 Jun 2010 22:58:57 +0200 Subject: store also the SourceList we use internally for export --- apt-pkg/cachefile.cc | 58 +++++++++++++++++++++++++++++++++++++++++----------- apt-pkg/cachefile.h | 15 +++++++++++++- debian/changelog | 1 + 3 files changed, 61 insertions(+), 13 deletions(-) (limited to 'apt-pkg/cachefile.h') diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc index b0f8bc424..01598386c 100644 --- a/apt-pkg/cachefile.cc +++ b/apt-pkg/cachefile.cc @@ -27,7 +27,8 @@ // CacheFile::CacheFile - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ -pkgCacheFile::pkgCacheFile() : Map(0), Cache(0), DCache(0), Policy(0) +pkgCacheFile::pkgCacheFile() : Map(NULL), Cache(NULL), DCache(NULL), + Policy(NULL), SrcList(NULL) { } /*}}}*/ @@ -38,16 +39,30 @@ pkgCacheFile::~pkgCacheFile() { delete DCache; delete Policy; + delete SrcList; delete Cache; delete Map; _system->UnLock(true); -} +} /*}}}*/ // CacheFile::BuildCaches - Open and build the cache files /*{{{*/ // --------------------------------------------------------------------- /* */ bool pkgCacheFile::BuildCaches(OpProgress *Progress, bool WithLock) { + if (Cache != NULL) + return true; + + if (_config->FindB("pkgCacheFile::Generate", true) == false) + { + Map = new MMap(*new FileFd(_config->FindFile("Dir::Cache::pkgcache"), + FileFd::ReadOnly),MMap::Public|MMap::ReadOnly); + Cache = new pkgCache(Map); + if (_error->PendingError() == true) + return false; + return true; + } + const bool ErrorWasEmpty = _error->empty(); if (WithLock == true) if (_system->Lock() == false) @@ -58,14 +73,11 @@ bool pkgCacheFile::BuildCaches(OpProgress *Progress, bool WithLock) if (_error->PendingError() == true) return false; - - // Read the source list - pkgSourceList List; - if (List.ReadMainList() == false) - return _error->Error(_("The list of sources could not be read.")); + + BuildSourceList(Progress); // Read the caches - bool Res = pkgCacheGenerator::MakeStatusCache(List,Progress,&Map,!WithLock); + bool Res = pkgCacheGenerator::MakeStatusCache(*SrcList,Progress,&Map,!WithLock); if (Progress != NULL) Progress->Done(); if (Res == false) @@ -81,11 +93,28 @@ bool pkgCacheFile::BuildCaches(OpProgress *Progress, bool WithLock) return true; } /*}}}*/ +// CacheFile::BuildSourceList - Open and build all relevant sources.list/*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool pkgCacheFile::BuildSourceList(OpProgress *Progress) +{ + if (SrcList != NULL) + return true; + + SrcList = new pkgSourceList(); + if (SrcList->ReadMainList() == false) + return _error->Error(_("The list of sources could not be read.")); + return true; +} + /*}}}*/ // CacheFile::BuildPolicy - Open and build all relevant preferences /*{{{*/ // --------------------------------------------------------------------- /* */ bool pkgCacheFile::BuildPolicy(OpProgress *Progress) { + if (Policy != NULL) + return true; + Policy = new pkgPolicy(Cache); if (_error->PendingError() == true) return false; @@ -101,6 +130,9 @@ bool pkgCacheFile::BuildPolicy(OpProgress *Progress) /* */ bool pkgCacheFile::BuildDepCache(OpProgress *Progress) { + if (DCache != NULL) + return true; + DCache = new pkgDepCache(Cache,Policy); if (_error->PendingError() == true) return false; @@ -139,12 +171,14 @@ void pkgCacheFile::Close() delete DCache; delete Policy; delete Cache; + delete SrcList; delete Map; _system->UnLock(true); - Map = 0; - DCache = 0; - Policy = 0; - Cache = 0; + Map = NULL; + DCache = NULL; + Policy = NULL; + Cache = NULL; + SrcList = NULL; } /*}}}*/ diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h index b75a7dbe4..1647aff8e 100644 --- a/apt-pkg/cachefile.h +++ b/apt-pkg/cachefile.h @@ -23,6 +23,7 @@ #include class pkgPolicy; +class pkgSourceList; class pkgCacheFile { protected: @@ -31,6 +32,7 @@ class pkgCacheFile pkgCache *Cache; pkgDepCache *DCache; pkgPolicy *Policy; + pkgSourceList *SrcList; public: @@ -39,6 +41,10 @@ class pkgCacheFile inline operator pkgCache *() {return Cache;}; inline operator pkgDepCache &() {return *DCache;}; inline operator pkgDepCache *() {return DCache;}; + inline operator pkgPolicy &() {return *Policy;}; + inline operator pkgPolicy *() {return Policy;}; + inline operator pkgSourceList &() {return *SrcList;}; + inline operator pkgSourceList *() {return SrcList;}; inline pkgDepCache *operator ->() {return DCache;}; inline pkgDepCache &operator *() {return *DCache;}; inline pkgDepCache::StateCache &operator [](pkgCache::PkgIterator const &I) {return (*DCache)[I];}; @@ -46,12 +52,19 @@ class pkgCacheFile bool BuildCaches(OpProgress *Progress = NULL,bool WithLock = true); __deprecated bool BuildCaches(OpProgress &Progress,bool const &WithLock = true) { return BuildCaches(&Progress, WithLock); }; + bool BuildSourceList(OpProgress *Progress = NULL); bool BuildPolicy(OpProgress *Progress = NULL); bool BuildDepCache(OpProgress *Progress = NULL); bool Open(OpProgress *Progress = NULL, bool WithLock = true); + inline bool ReadOnlyOpen(OpProgress *Progress = NULL) { return Open(Progress, false); }; __deprecated bool Open(OpProgress &Progress,bool const &WithLock = true) { return Open(&Progress, WithLock); }; void Close(); - + + inline pkgCache* GetPkgCache() { BuildCaches(NULL, false); return Cache; }; + inline pkgDepCache* GetDepCache() { BuildDepCache(); return DCache; }; + inline pkgPolicy* GetPolicy() { BuildPolicy(); return Policy; }; + inline pkgSourceList* GetSourceList() { BuildSourceList(); return SrcList; }; + pkgCacheFile(); virtual ~pkgCacheFile(); }; diff --git a/debian/changelog b/debian/changelog index 097916d1e..9001e91a7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -35,6 +35,7 @@ apt (0.7.26~exp6) UNRELEASED; urgency=low * apt-pkg/cachefile.{cc,h}: - split Open() into submethods to be able to build only parts - make the OpProgress optional in the Cache buildprocess + - store also the SourceList we use internally for export -- David Kalnischkies Mon, 31 May 2010 22:36:35 +0200 -- cgit v1.2.3-70-g09d2 From a8ef7efd6df81d4fb9e52419695f10df9fe76cda Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 10 Jun 2010 13:09:23 +0200 Subject: * apt-pkg/cacheset.cc: - get the candidate either from an already built depcache or use the policy which is a bit faster than depcache generation --- apt-pkg/cachefile.h | 8 ++++++-- apt-pkg/cacheset.cc | 11 ++++++++--- debian/changelog | 8 ++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) (limited to 'apt-pkg/cachefile.h') diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h index 1647aff8e..c68f06ed8 100644 --- a/apt-pkg/cachefile.h +++ b/apt-pkg/cachefile.h @@ -20,10 +20,9 @@ #include #include +#include #include -class pkgPolicy; -class pkgSourceList; class pkgCacheFile { protected: @@ -65,6 +64,11 @@ class pkgCacheFile inline pkgPolicy* GetPolicy() { BuildPolicy(); return Policy; }; inline pkgSourceList* GetSourceList() { BuildSourceList(); return SrcList; }; + inline bool IsPkgCacheBuilt() const { return (Cache != NULL); }; + inline bool IsDepCacheBuilt() const { return (DCache != NULL); }; + inline bool IsPolicyBuilt() const { return (Policy != NULL); }; + inline bool IsSrcListBuilt() const { return (SrcList != NULL); }; + pkgCacheFile(); virtual ~pkgCacheFile(); }; diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc index 43ade4b4e..e91b56997 100644 --- a/apt-pkg/cacheset.cc +++ b/apt-pkg/cacheset.cc @@ -261,9 +261,14 @@ bool VersionSet::AddSelectedVersion(pkgCacheFile &Cache, VersionSet &verset, // getCandidateVer - Returns the candidate version of the given package /*{{{*/ pkgCache::VerIterator VersionSet::getCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg, bool const &AllowError) { - if (unlikely(Cache.BuildDepCache() == false)) - return pkgCache::VerIterator(*Cache); - pkgCache::VerIterator Cand = Cache[Pkg].CandidateVerIter(Cache); + pkgCache::VerIterator Cand; + if (Cache.IsDepCacheBuilt() == true) + Cand = Cache[Pkg].CandidateVerIter(Cache); + else { + if (unlikely(Cache.BuildPolicy() == false)) + return pkgCache::VerIterator(*Cache); + Cand = Cache.GetPolicy()->GetCandidateVer(Pkg); + } if (AllowError == false && Cand.end() == true) _error->Error(_("Can't select candidate version from package %s as it has no candidate"), Pkg.FullName(true).c_str()); return Cand; diff --git a/debian/changelog b/debian/changelog index f9638b78f..8470a0d85 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +apt (0.7.26~exp7) UNRELEASED; urgency=low + + * apt-pkg/cacheset.cc: + - get the candidate either from an already built depcache + or use the policy which is a bit faster than depcache generation + + -- David Kalnischkies Thu, 10 Jun 2010 13:04:47 +0200 + apt (0.7.26~exp6) UNRELEASED; urgency=low [ Michael Vogt ] -- cgit v1.2.3-70-g09d2 From 6b2f7a60c3d7d22d1d6b0e300ef526d48ff20048 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 10 Jun 2010 16:15:57 +0200 Subject: * apt-pkg/cachefile.h: - make pkgPolicy public again, libapt-pkg-perl (and probably others) get unhappy without that --- apt-pkg/cachefile.h | 2 +- debian/changelog | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'apt-pkg/cachefile.h') diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h index 1647aff8e..63bc3de47 100644 --- a/apt-pkg/cachefile.h +++ b/apt-pkg/cachefile.h @@ -31,10 +31,10 @@ class pkgCacheFile MMap *Map; pkgCache *Cache; pkgDepCache *DCache; - pkgPolicy *Policy; pkgSourceList *SrcList; public: + pkgPolicy *Policy; // We look pretty much exactly like a pointer to a dep cache inline operator pkgCache &() {return *Cache;}; diff --git a/debian/changelog b/debian/changelog index 6b40ae94d..d29705d24 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +apt (0.7.26~exp7) experimental; urgency=low + + * apt-pkg/cachefile.h: + - make pkgPolicy public again, libapt-pkg-perl (and probably + others) get unhappy without that + + -- Michael Vogt Thu, 10 Jun 2010 15:33:24 +0200 + apt (0.7.26~exp6) experimental; urgency=low [ Michael Vogt ] -- cgit v1.2.3-70-g09d2