From 29efe3f8be40de5570404e504af88cc246afe7f9 Mon Sep 17 00:00:00 2001 From: Tom Fay Date: Mon, 17 Feb 2025 21:48:35 +0000 Subject: [PATCH] filter packages by arch during resolution --- CHANGELOG.md | 2 +- src/lockfile/resolve.py | 4 +++- tests/fixtures/basearch/rpmoci.toml | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b8dabe4..e74c8ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### Added ### Fixed - A more thorough fix for repositories that have packages for multiple architectures in the same repository. - - The archictecture of a package is now stored in the lockfile. + - Packages are filtered by base architecture, and the architecture of a package is now stored in the lockfile - This change is backwards compatible - older versions of rpmoci will ignore this field and may select the wrong package on download. ## 0.4.1 - 2024-11-21 diff --git a/src/lockfile/resolve.py b/src/lockfile/resolve.py index fd3bbd9..2b6b2c4 100644 --- a/src/lockfile/resolve.py +++ b/src/lockfile/resolve.py @@ -76,7 +76,9 @@ def get_packages(base, pkg_spec): subj = dnf.subject.Subject(pkg_spec) query = subj.get_best_query(base.sack) query = query.available() - query = query.filterm(latest_per_arch_by_priority=True) + query = query.filterm( + latest_per_arch_by_priority=True, arch=[base.conf.basearch, "noarch"] + ) pkgs = query.run() if not pkgs: diff --git a/tests/fixtures/basearch/rpmoci.toml b/tests/fixtures/basearch/rpmoci.toml index 094da32..d9d4978 100644 --- a/tests/fixtures/basearch/rpmoci.toml +++ b/tests/fixtures/basearch/rpmoci.toml @@ -1,5 +1,7 @@ [contents] -packages = ["basesystem"] +packages = [ + "libgcc", # has i686 and x86_64 variants + "basesystem"] # is noarch [[contents.repositories]] url = "https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/baseos/os"