diff --git a/CHANGES/687.feature b/CHANGES/687.feature new file mode 100644 index 00000000..fdc75765 --- /dev/null +++ b/CHANGES/687.feature @@ -0,0 +1,7 @@ +Added the below filters to `pulp rpm content list`: +- --arch-contains +- --arch-startswith +- --name-contains +- --name-startswith +- --release-contains +- --release-startswith diff --git a/pulp-glue/pulp_glue/rpm/context.py b/pulp-glue/pulp_glue/rpm/context.py index ef615d15..73ff0319 100644 --- a/pulp-glue/pulp_glue/rpm/context.py +++ b/pulp-glue/pulp_glue/rpm/context.py @@ -125,6 +125,18 @@ def preprocess_entity(self, body: EntityDefinition, partial: bool = False) -> En self.pulp_ctx.needs_plugin(PluginRequirement("rpm", specifier=">=3.18.0")) else: PulpException(_("--relative-path must be provided")) + contains_startswith = [ + "name__contains", + "name__startswith", + "release__contains", + "release__startswith", + "arch__contains", + "arch__startswith", + ] + if any(k in body for k in contains_startswith): + self.pulp_ctx.needs_plugin( + PluginRequirement("rpm", specifier=">=3.20.0", feature=_("substring filters")) + ) return body diff --git a/pulpcore/cli/rpm/content.py b/pulpcore/cli/rpm/content.py index f656879c..4f38ebd8 100644 --- a/pulpcore/cli/rpm/content.py +++ b/pulpcore/cli/rpm/content.py @@ -3,7 +3,7 @@ from uuid import uuid4 import click -from pulp_glue.common.context import PulpContentContext, PulpEntityContext +from pulp_glue.common.context import PluginRequirement, PulpContentContext, PulpEntityContext from pulp_glue.common.i18n import get_translation from pulp_glue.core.context import PulpArtifactContext from pulp_glue.rpm.context import ( @@ -113,9 +113,25 @@ def content() -> None: pulp_option("--repository-version"), pulp_option("--arch", allowed_with_contexts=(PulpRpmPackageContext,)), pulp_option( - "--arch-in", "arch__in", multiple=True, allowed_with_contexts=(PulpRpmPackageContext,) + "--arch-contains", + "arch__contains", + allowed_with_contexts=(PulpRpmPackageContext,), + needs_plugins=[PluginRequirement("rpm", specifier=">=3.20.0")], + ), + pulp_option( + "--arch-in", + "arch__in", + multiple=True, + allowed_with_contexts=(PulpRpmPackageContext,), + needs_plugins=[PluginRequirement("rpm", specifier=">=3.20.0")], ), pulp_option("--arch-ne", "arch__ne", allowed_with_contexts=(PulpRpmPackageContext,)), + pulp_option( + "--arch-startswith", + "arch__startswith", + allowed_with_contexts=(PulpRpmPackageContext,), + needs_plugins=[PluginRequirement("rpm", specifier=">=3.20.0")], + ), pulp_option("--epoch", allowed_with_contexts=(PulpRpmPackageContext,)), pulp_option( "--epoch-in", "epoch__in", multiple=True, allowed_with_contexts=(PulpRpmPackageContext,) @@ -133,6 +149,12 @@ def content() -> None: allowed_with_contexts=(PulpRpmModulemdDefaultsContext,), ), pulp_option("--name", allowed_with_contexts=(PulpRpmPackageContext, PulpRpmModulemdContext)), + pulp_option( + "--name-contains", + "name__contains", + allowed_with_contexts=(PulpRpmPackageContext, PulpRpmModulemdContext), + needs_plugins=[PluginRequirement("rpm", specifier=">=3.20.0")], + ), pulp_option( "--name-in", "name__in", @@ -144,6 +166,12 @@ def content() -> None: "name__ne", allowed_with_contexts=(PulpRpmPackageContext, PulpRpmModulemdContext), ), + pulp_option( + "--name-startswith", + "name__startswith", + allowed_with_contexts=(PulpRpmPackageContext, PulpRpmModulemdContext), + needs_plugins=[PluginRequirement("rpm", specifier=">=3.20.0")], + ), pulp_option("--package-href", allowed_with_contexts=(PulpRpmPackageContext,)), pulp_option("--pkgId", allowed_with_contexts=(PulpRpmPackageContext,)), pulp_option( @@ -154,9 +182,24 @@ def content() -> None: ), pulp_option("--release", allowed_with_contexts=(PulpRpmPackageContext,)), pulp_option( - "--release-in", "release__in", multiple=True, allowed_with_contexts=(PulpRpmPackageContext,) + "--release-contains", + "release__contains", + allowed_with_contexts=(PulpRpmPackageContext,), + needs_plugins=[PluginRequirement("rpm", specifier=">=3.20.0")], + ), + pulp_option( + "--release-in", + "release__in", + multiple=True, + allowed_with_contexts=(PulpRpmPackageContext,), + needs_plugins=[PluginRequirement("rpm", specifier=">=3.20.0")], ), pulp_option("--release-ne", "release__ne", allowed_with_contexts=(PulpRpmPackageContext,)), + pulp_option( + "--release-startswith", + "release__startswith", + allowed_with_contexts=(PulpRpmPackageContext,), + ), pulp_option("--severity", allowed_with_contexts=(PulpRpmAdvisoryContext,)), pulp_option( "--severity-in", diff --git a/tests/scripts/pulp_rpm/test_content.sh b/tests/scripts/pulp_rpm/test_content.sh index e509602d..f0715629 100755 --- a/tests/scripts/pulp_rpm/test_content.sh +++ b/tests/scripts/pulp_rpm/test_content.sh @@ -140,6 +140,8 @@ do fi done +expect_succ pulp rpm content list --name-contains "${RPM_NAME}" +expect_succ pulp rpm content list --name-startswith "${RPM_NAME}" expect_succ pulp rpm content list --name-in "${RPM_NAME}" --name-in "${RPM2_NAME}" pulp rpm content list expect_succ test "$(echo "${OUTPUT}" | jq -r 'length')" -eq 2