diff options
| author | Julian Andres Klode <jak@debian.org> | 2023-12-08 13:13:22 +0000 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2023-12-08 13:13:22 +0000 |
| commit | cc54a179c42e07cf61debd6740cb47542caccae5 (patch) | |
| tree | 06733b897ab78e26b51ca5b6b578685783f5736a /apt-pkg | |
| parent | 0b1baa9da13128113da96d4bb47c567d7258fe05 (diff) | |
| parent | 0abf584b283e3e0f040b9ec0e7153c6e52291b2a (diff) | |
Merge branch 'fix/unknownarchconflicts' into 'main'
Have Grp.FindPreferredPkg return very foreign pkgs as last resort
See merge request apt-team/apt!310
Diffstat (limited to 'apt-pkg')
| -rw-r--r-- | apt-pkg/pkgcache.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 0d18c6cf8..76336b9b3 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -393,11 +393,17 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPreferredPkg(bool const &Prefer pkgCache::PkgIterator Pkg = FindPkg(StringView("native", 6)); 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); + // native and foreign + for (auto const &a : APT::Configuration::getArchitectures()) + { + Pkg = FindPkg(a); + if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0)) + return Pkg; + } + // very foreign/barbarian + for (auto const &a : _config->FindVector("APT::BarbarianArchitectures")) + { + Pkg = FindPkg(a); if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0)) return Pkg; } @@ -405,6 +411,10 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPreferredPkg(bool const &Prefer Pkg = FindPkg(StringView("none", 4)); if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0)) return Pkg; + // the "rest" we somehow know about (+ those we tried already again as skipping is hard) + for (Pkg = PackageList(); not Pkg.end(); Pkg = NextPkg(Pkg)) + if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0)) + return Pkg; if (PreferNonVirtual == true) return FindPreferredPkg(false); |
