From c7003341b112394256aac6f083e7461d8ded2996 Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Mon, 30 May 2022 22:33:21 +0200 Subject: [PATCH] [MENFORCER-389] Allow filtering of parent in requireReleaseDeps --- .../plugins/enforcer/RequireReleaseDeps.java | 17 ++++++--- .../enforcer/TestRequireReleaseDeps.java | 36 +++++++++++++++---- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java index 783ea703..783b9b39 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java @@ -19,8 +19,10 @@ * under the License. */ +import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import org.apache.maven.artifact.Artifact; @@ -43,8 +45,6 @@ public class RequireReleaseDeps /** * Allows this rule to execute only when this project is a release. * - * @parameter - * * @see {@link #setOnlyWhenRelease(boolean)} * @see {@link #isOnlyWhenRelease()} @@ -54,8 +54,6 @@ public class RequireReleaseDeps /** * Allows this rule to fail when the parent is defined as a snapshot. * - * @parameter - * * @see {@link #setFailWhenParentIsSnapshot(boolean)} * @see {@link #isFailWhenParentIsSnapshot()} */ @@ -98,6 +96,7 @@ public void execute( EnforcerRuleHelper helper ) { callSuper = true; } + if ( callSuper ) { super.execute( helper ); @@ -107,7 +106,17 @@ public void execute( EnforcerRuleHelper helper ) { project = getProject( helper ); } + Artifact parentArtifact = project.getParentArtifact(); + + if ( parentArtifact != null ) + { + Set artifacts = filterArtifacts( Collections.singleton( parentArtifact ) ); + parentArtifact = Optional.ofNullable( artifacts ) + .flatMap( s -> s.stream().findFirst() ) + .orElse( null ); + } + if ( parentArtifact != null && parentArtifact.isSnapshot() ) { throw new EnforcerRuleException( "Parent Cannot be a snapshot: " + parentArtifact.getId() ); diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java index 5582d122..89a2fa63 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java @@ -19,6 +19,7 @@ * under the License. */ +import java.io.IOException; import java.util.Collections; import java.util.Set; @@ -30,12 +31,14 @@ import org.apache.maven.project.ProjectBuildingRequest; import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + /** - * The Class TestNoSnapshots. + * The Class TestRequireReleaseDeps. * * @author Brian Fox */ -public class TestRequireReleaseDeps +class TestRequireReleaseDeps { /** @@ -44,7 +47,7 @@ public class TestRequireReleaseDeps * @throws Exception if any occurs */ @Test - public void testRule() + void testRule() throws Exception { ArtifactStubFactory factory = new ArtifactStubFactory(); @@ -90,7 +93,7 @@ public void testRule() } @Test - public void testWildcardIgnore() + void testWildcardIgnore() throws Exception { RequireReleaseDeps rule = newRequireReleaseDeps(); @@ -112,12 +115,33 @@ public void testWildcardIgnore() * Test id. */ @Test - public void testId() + void testId() { RequireReleaseDeps rule = newRequireReleaseDeps(); - rule.getCacheId(); + assertThat( rule.getCacheId() ).isEqualTo( "0" ); } + @Test + void parentShouldBeExcluded() throws IOException + { + + ArtifactStubFactory factory = new ArtifactStubFactory(); + MockProject project = new MockProject(); + project.setArtifact( factory.getSnapshotArtifact() ); + + MavenProject parent = new MockProject(); + parent.setArtifact( factory.getSnapshotArtifact() ); + project.setParent( parent ); + + EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project ); + + RequireReleaseDeps rule = newRequireReleaseDeps(); + rule.setExcludes( Collections.singletonList( parent.getArtifact().getGroupId() + ":*" ) ); + + EnforcerRuleUtilsHelper.execute( rule, helper, false ); + } + + private RequireReleaseDeps newRequireReleaseDeps() { return new RequireReleaseDeps()