diff options
author | David Kalnischkies <kalnischkies@gmail.com> | 2010-07-25 08:24:03 +0200 |
---|---|---|
committer | David Kalnischkies <kalnischkies@gmail.com> | 2010-07-25 08:24:03 +0200 |
commit | 3db58cf41785f1e0b7046bbe7f3ef5e545c9a658 (patch) | |
tree | 376c6857d0a1c94dbe143d1fe64d634b6b41c8d3 | |
parent | 8fde723961709118837153cdf94f150c680e10e9 (diff) |
* apt-pkg/pkgcache.cc:
- prefer non-virtual packages in FindPreferredPkg
-rw-r--r-- | apt-pkg/cacheiterators.h | 7 | ||||
-rw-r--r-- | apt-pkg/pkgcache.cc | 8 | ||||
-rw-r--r-- | debian/changelog | 4 |
3 files changed, 13 insertions, 6 deletions
diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 1dcc34532..0be9368bd 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -115,8 +115,11 @@ class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> { /** \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() const; + in the list of Architectures which is not an end-Pointer + + \param PreferNonVirtual tries to respond with a non-virtual package + and only if this fails returns the best virtual package */ + PkgIterator FindPreferredPkg(bool const &PreferNonVirtual = true) const; PkgIterator NextPkg(PkgIterator const &Pkg) const; // Constructors diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 8af8ef7de..9e1f8b633 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -349,19 +349,21 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const { // GrpIterator::FindPreferredPkg - Locate the "best" package /*{{{*/ // --------------------------------------------------------------------- /* Returns an End-Pointer on error, pointer to the package otherwise */ -pkgCache::PkgIterator pkgCache::GrpIterator::FindPreferredPkg() const { +pkgCache::PkgIterator pkgCache::GrpIterator::FindPreferredPkg(bool const &PreferNonVirtual) const { pkgCache::PkgIterator Pkg = FindPkg("native"); - if (Pkg.end() == false) + if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0)) 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) + if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0)) return Pkg; } + if (PreferNonVirtual == true) + return FindPreferredPkg(false); return PkgIterator(*Owner, 0); } /*}}}*/ diff --git a/debian/changelog b/debian/changelog index 04829715c..aff194e1c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,8 +7,10 @@ apt (0.7.26~exp11) experimental; urgency=low - be able to omit dependency types in (r)depends (Closes: #319006) * apt-pkg/cacheset.cc: - move them back to the library as they look stable now + * apt-pkg/pkgcache.cc: + - prefer non-virtual packages in FindPreferredPkg - -- David Kalnischkies <kalnischkies@gmail.com> Sat, 17 Jul 2010 19:56:47 +0200 + -- David Kalnischkies <kalnischkies@gmail.com> Sun, 25 Jul 2010 08:20:41 +0200 apt (0.7.26~exp10) experimental; urgency=low |