summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2023-12-08 13:13:22 +0000
committerJulian Andres Klode <jak@debian.org>2023-12-08 13:13:22 +0000
commitcc54a179c42e07cf61debd6740cb47542caccae5 (patch)
tree06733b897ab78e26b51ca5b6b578685783f5736a /apt-pkg
parent0b1baa9da13128113da96d4bb47c567d7258fe05 (diff)
parent0abf584b283e3e0f040b9ec0e7153c6e52291b2a (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.cc20
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);