diff options
-rw-r--r-- | apt-pkg/cacheiterators.h | 5 | ||||
-rw-r--r-- | apt-pkg/pkgcache.cc | 19 | ||||
-rw-r--r-- | debian/changelog | 4 |
3 files changed, 27 insertions, 1 deletions
diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index ee852f594..e5b23a818 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -104,6 +104,11 @@ class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> { inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;}; inline PkgIterator PackageList() const; PkgIterator FindPkg(string Arch = "any"); + /** \brief find the package with the "best" architecture + + The best architecture is either the "native" or the first + in the list of Architectures which is not an end-Pointer */ + PkgIterator FindPreferredPkg(); PkgIterator NextPkg(PkgIterator const &Pkg); // Constructors diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index a59a06d65..adaae9c89 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -343,6 +343,25 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) { return PkgIterator(*Owner, 0); } /*}}}*/ +// GrpIterator::FindPreferredPkg - Locate the "best" package /*{{{*/ +// --------------------------------------------------------------------- +/* Returns an End-Pointer on error, pointer to the package otherwise */ +pkgCache::PkgIterator pkgCache::GrpIterator::FindPreferredPkg() { + pkgCache::PkgIterator Pkg = FindPkg("native"); + if (Pkg.end() == false) + return Pkg; + + std::vector<std::string> const archs = APT::Configuration::getArchitectures(); + for (std::vector<std::string>::const_iterator a = archs.begin(); + a != archs.end(); ++a) { + Pkg = FindPkg(*a); + if (Pkg.end() == false) + return Pkg; + } + + return PkgIterator(*Owner, 0); +} + /*}}}*/ // GrpIterator::NextPkg - Locate the next package in the group /*{{{*/ // --------------------------------------------------------------------- /* Returns an End-Pointer on error, pointer to the package otherwise. diff --git a/debian/changelog b/debian/changelog index 6341484f2..920003484 100644 --- a/debian/changelog +++ b/debian/changelog @@ -28,8 +28,10 @@ apt (0.7.26~exp6) UNRELEASED; urgency=low - move cmdline parsing from apt-cache to new FromCommandLine method * apt-pkg/contrib/cmdline.cc: - fix segfault in SaveInConfig caused by writing over char[] sizes + * apt-pkg/pkgcache.cc: + - get the best matching arch package from a group with FindPreferredPkg - -- David Kalnischkies <kalnischkies@gmail.com> Mon, 31 May 2010 17:21:00 +0200 + -- David Kalnischkies <kalnischkies@gmail.com> Mon, 31 May 2010 19:59:04 +0200 apt (0.7.26~exp5) experimental; urgency=low |