From: Chen Qi Date: Fri, 12 Sep 2025 03:33:23 +0000 (-0700) Subject: package_manager/rpm: give out useful reason about unmatched packages X-Git-Tag: uninative-5.0~250 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00f871cd07d7f44788124510a75b7160fdc60bb5;p=thirdparty%2Fopenembedded%2Fopenembedded-core.git package_manager/rpm: give out useful reason about unmatched packages Unmatched package error is a common error at rootfs. We want to give out more useful information to user. Before this change, if some user specifiy IMAGE_INSTALL += "catch2", the error message will be like: No match for argument: catch2 Error: Unable to find a match: catch2 With this patch, the error message will be like: No match for argument: catch2 Error: Unable to find a match: catch2 catch2 is a recipe. Its generated packages are: ['catch2-src', 'catch2-dbg', 'catch2-staticdev', 'catch2-dev', 'catch2-doc'] Either specify a generated package or set ALLOW_EMPTY:${PN} = "1" in catch2 recipe Signed-off-by: Chen Qi Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- diff --git a/meta/lib/oe/package_manager/rpm/__init__.py b/meta/lib/oe/package_manager/rpm/__init__.py index 323ec5008fb..20e6cb8744c 100644 --- a/meta/lib/oe/package_manager/rpm/__init__.py +++ b/meta/lib/oe/package_manager/rpm/__init__.py @@ -330,8 +330,15 @@ class RpmPM(PackageManager): return output except subprocess.CalledProcessError as e: if print_output: + e_output = e.output.decode("utf-8") + extra_info = "" + if "install" in dnf_args: + if "Error: Unable to find a match:" in e_output: + no_match_pkgs = re.search(r'Error: Unable to find a match: ([a-z0-9+\-\._\s]+)', e_output).group(1).split() + for pkg in no_match_pkgs: + extra_info += self.get_missing_pkg_reason(pkg) (bb.note, bb.fatal)[fatal]("Could not invoke dnf. Command " - "'%s' returned %d:\n%s" % (' '.join(cmd), e.returncode, e.output.decode("utf-8"))) + "'%s' returned %d:\n%s%s" % (' '.join(cmd), e.returncode, e_output, extra_info)) else: (bb.note, bb.fatal)[fatal]("Could not invoke dnf. Command " "'%s' returned %d:" % (' '.join(cmd), e.returncode))