From d57784ccb38886c5f5487ce941f1f41fa3b807b7 Mon Sep 17 00:00:00 2001
From: Andrzej Jarmoniuk
Date: Tue, 25 Oct 2022 08:01:02 +0200
Subject: [PATCH] Resolves #793: Added includeParent to DisplayPropertyUpdates
and PropertyUpdatesReport
---
.../invoker.properties | 1 -
.../pom.xml | 88 -----------------
.../verify.groovy | 6 --
.../versions/CompareDependenciesMojo.java | 3 +-
.../versions/DisplayPropertyUpdatesMojo.java | 10 +-
.../versions/PropertyUpdatesReportMojo.java | 10 +-
.../mojo/versions/ResolveRangesMojo.java | 3 +-
.../mojo/versions/SetPropertyMojo.java | 2 +-
.../mojo/versions/UpdatePropertiesMojo.java | 1 +
.../mojo/versions/UpdatePropertyMojo.java | 2 +-
.../versions/api/DefaultVersionsHelper.java | 6 +-
.../codehaus/mojo/versions/api/PomHelper.java | 13 ++-
.../mojo/versions/api/VersionsHelper.java | 3 +-
.../DisplayPropertyUpdatesMojoTest.java | 22 +++++
.../PropertyUpdatesReportMojoTest.java | 98 +++++++++++++++++++
.../api/DefaultVersionsHelperTest.java | 3 +-
16 files changed, 163 insertions(+), 108 deletions(-)
delete mode 100644 src/it/it-property-updates-report-issue-684-001/invoker.properties
delete mode 100644 src/it/it-property-updates-report-issue-684-001/pom.xml
delete mode 100644 src/it/it-property-updates-report-issue-684-001/verify.groovy
create mode 100644 src/test/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojoTest.java
diff --git a/src/it/it-property-updates-report-issue-684-001/invoker.properties b/src/it/it-property-updates-report-issue-684-001/invoker.properties
deleted file mode 100644
index 526cf26e97..0000000000
--- a/src/it/it-property-updates-report-issue-684-001/invoker.properties
+++ /dev/null
@@ -1 +0,0 @@
-invoker.goals = ${project.groupId}:${project.artifactId}:${project.version}:plugin-updates-report
diff --git a/src/it/it-property-updates-report-issue-684-001/pom.xml b/src/it/it-property-updates-report-issue-684-001/pom.xml
deleted file mode 100644
index a60084db74..0000000000
--- a/src/it/it-property-updates-report-issue-684-001/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-
- 4.0.0
- localhost
- it-dependency-updates-report-001
- 1.0
- pom
- plugin-updates-report
- http://localhost/
-
-
-
-
-
- @project.groupId@
- @project.artifactId@
- @project.version@
-
-
-
-
- 3.1
-
-
-
-
-
-
- localhost
- dummy-maven-plugin
- 1.0
-
-
- localhost
- dummy-api
- 1.1
-
-
-
-
- maven-clean-plugin
- 2.2
-
-
- maven-deploy-plugin
- 2.3
-
-
- maven-install-plugin
- 2.2
-
-
- maven-site-plugin
- @sitePluginVersion@
-
-
- maven-project-info-reports-plugin
- 2.1
-
-
-
-
-
-
-
-
- maven-project-info-reports-plugin
- 2.1
-
-
-
-
-
- @project.groupId@
- @project.artifactId@
- @project.version@
-
-
-
- plugin-updates-report
-
-
-
-
-
-
-
-
diff --git a/src/it/it-property-updates-report-issue-684-001/verify.groovy b/src/it/it-property-updates-report-issue-684-001/verify.groovy
deleted file mode 100644
index 1d0370e86f..0000000000
--- a/src/it/it-property-updates-report-issue-684-001/verify.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-output = new File( basedir, 'target/site/plugin-updates-report.html' ).text
- .replaceAll( '<[^>]+>', ' ' )
- .replaceAll( '&[^;]+;', ' ' )
- .replaceAll( '\\s+', ' ' )
-assert ! ( output =~ /\blocalhost dummy-maven-plugin 1.0 3.1\b/ )
-assert output =~ /\blocalhost dummy-maven-plugin 1.0 3.0\b/
diff --git a/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java b/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java
index 1c015fd82c..1f2210ac78 100644
--- a/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java
+++ b/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java
@@ -206,7 +206,8 @@ protected void update( ModifiedPomXMLEventReader pom )
if ( updatePropertyVersions )
{
Map versionProperties =
- this.getHelper().getVersionPropertiesMap( getProject(), null, null, null, true );
+ this.getHelper().getVersionPropertiesMap( getProject(), null, null, null,
+ true, true );
List diff = updatePropertyVersions( pom, versionProperties, remoteDepsMap );
propertyDiffs.addAll( diff );
}
diff --git a/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java b/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java
index 2120aac1cb..d1b8fe724a 100644
--- a/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java
+++ b/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java
@@ -128,6 +128,14 @@ public class DisplayPropertyUpdatesMojo
@Parameter( property = "allowIncrementalUpdates", defaultValue = "true" )
private boolean allowIncrementalUpdates;
+ /**
+ * Whether to include property updates from parent.
+ *
+ * @since 2.14.0
+ */
+ @Parameter( property = "includeParent", defaultValue = "true" )
+ protected boolean includeParent = true;
+
// -------------------------- STATIC METHODS --------------------------
// -------------------------- OTHER METHODS --------------------------
@@ -151,7 +159,7 @@ public void execute()
Map propertyVersions =
this.getHelper().getVersionPropertiesMap( getProject(), properties, includeProperties, excludeProperties,
- autoLinkItems );
+ includeParent, autoLinkItems );
for ( Map.Entry entry : propertyVersions.entrySet() )
{
Property property = entry.getKey();
diff --git a/src/main/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojo.java b/src/main/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojo.java
index 3299d0e0ed..94b1bc86ee 100644
--- a/src/main/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojo.java
+++ b/src/main/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojo.java
@@ -84,6 +84,14 @@ public class PropertyUpdatesReportMojo extends AbstractVersionsReportWhether to include property updates from parent.
+ *
+ * @since 2.14.0
+ */
+ @Parameter( property = "includeParent", defaultValue = "true" )
+ private boolean includeParent = true;
+
@Inject
protected PropertyUpdatesReportMojo( I18N i18n, RepositorySystem repositorySystem,
ArtifactResolver artifactResolver,
@@ -121,7 +129,7 @@ protected void doGenerateReport( Locale locale, Sink sink )
try
{
updateSet.putAll( getHelper().getVersionPropertiesMap( getProject(), properties, includeProperties,
- excludeProperties, autoLinkItems ) );
+ excludeProperties, includeParent, autoLinkItems ) );
}
catch ( MojoExecutionException e )
{
diff --git a/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java b/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java
index db997e1b09..4210d84086 100644
--- a/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java
+++ b/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java
@@ -304,7 +304,8 @@ private void resolvePropertyRanges( ModifiedPomXMLEventReader pom )
{
Map propertyVersions =
- this.getHelper().getVersionPropertiesMap( getProject(), null, includeProperties, excludeProperties, true );
+ this.getHelper().getVersionPropertiesMap( getProject(), null, includeProperties, excludeProperties,
+ true, true );
for ( Map.Entry entry : propertyVersions.entrySet() )
{
Property property = entry.getKey();
diff --git a/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java b/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java
index 6ab5915347..6682dac9e0 100644
--- a/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java
+++ b/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java
@@ -155,7 +155,7 @@ private void update( ModifiedPomXMLEventReader pom, Property[] propertiesConfig,
{
Map propertyVersions =
this.getHelper().getVersionPropertiesMap( getProject(), propertiesConfig, properties, "",
- autoLinkItems );
+ true, autoLinkItems );
for ( Map.Entry entry : propertyVersions.entrySet() )
{
Property currentProperty = entry.getKey();
diff --git a/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java b/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java
index 9e20ce0766..c93e8ea952 100644
--- a/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java
+++ b/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java
@@ -160,6 +160,7 @@ protected void update( ModifiedPomXMLEventReader pom )
properties,
includeProperties,
excludeProperties,
+ true,
autoLinkItems );
for ( Map.Entry entry : propertyVersions.entrySet() )
{
diff --git a/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java b/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java
index 4e8cecc7e4..524821467b 100644
--- a/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java
+++ b/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java
@@ -159,7 +159,7 @@ protected void update( ModifiedPomXMLEventReader pom )
propertyConfig.setVersion( newVersion );
Map propertyVersions =
this.getHelper().getVersionPropertiesMap( getProject(), new Property[] {propertyConfig}, property, "",
- autoLinkItems );
+ true, autoLinkItems );
for ( Map.Entry entry : propertyVersions.entrySet() )
{
Property property = entry.getKey();
diff --git a/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java b/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java
index ed959429d8..2189c2b677 100644
--- a/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java
+++ b/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java
@@ -785,7 +785,9 @@ public ExpressionEvaluator getExpressionEvaluator( MavenProject project )
@Override
public Map getVersionPropertiesMap( MavenProject project,
Property[] propertyDefinitions,
- String includeProperties, String excludeProperties,
+ String includeProperties,
+ String excludeProperties,
+ boolean includeParent,
boolean autoLinkItems )
throws MojoExecutionException
{
@@ -803,7 +805,7 @@ public Map getVersionPropertiesMap( MavenProject pro
final PropertyVersionsBuilder[] propertyVersionsBuilders;
try
{
- propertyVersionsBuilders = PomHelper.getPropertyVersionsBuilders( this, project );
+ propertyVersionsBuilders = PomHelper.getPropertyVersionsBuilders( this, project, includeParent );
}
catch ( ExpressionEvaluationException | IOException e )
{
diff --git a/src/main/java/org/codehaus/mojo/versions/api/PomHelper.java b/src/main/java/org/codehaus/mojo/versions/api/PomHelper.java
index 40bb3cac08..557f0eac0c 100644
--- a/src/main/java/org/codehaus/mojo/versions/api/PomHelper.java
+++ b/src/main/java/org/codehaus/mojo/versions/api/PomHelper.java
@@ -72,6 +72,7 @@
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import static java.util.Collections.singletonMap;
import static java.util.stream.IntStream.range;
/**
@@ -1018,16 +1019,20 @@ private static Map getRawModelWithParents( MavenProject pro
*
* @param helper Our versions helper.
* @param project The project to examine.
+ * @param includeParent whether parent POMs should be included
* @return An array of properties that are associated within the project.
* @throws ExpressionEvaluationException if an expression cannot be evaluated.
* @throws IOException if the project's pom file cannot be parsed.
* @since 1.0-alpha-3
*/
- public static PropertyVersionsBuilder[] getPropertyVersionsBuilders( VersionsHelper helper, MavenProject project )
+ public static PropertyVersionsBuilder[] getPropertyVersionsBuilders( VersionsHelper helper, MavenProject project,
+ boolean includeParent )
throws ExpressionEvaluationException, IOException
{
ExpressionEvaluator expressionEvaluator = helper.getExpressionEvaluator( project );
- Map reactorModels = getRawModelWithParents( project );
+ Map reactorModels = includeParent
+ ? getRawModelWithParents( project )
+ : singletonMap( project, getRawModel( project ) );
Map propertiesMap = new TreeMap<>();
@@ -1081,7 +1086,9 @@ public static PropertyVersionsBuilder[] getPropertyVersionsBuilders( VersionsHel
reactorModels.values().forEach( model -> addProperties( helper, propertiesMap, null, model.getProperties() ) );
- for ( MavenProject currentPrj = project; currentPrj != null; currentPrj = currentPrj.getParent() )
+ for ( MavenProject currentPrj = project; currentPrj != null; currentPrj = includeParent
+ ? currentPrj.getParent()
+ : null )
{
Model model = reactorModels.get( currentPrj );
diff --git a/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java b/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java
index 3d57779676..f612c88ac9 100644
--- a/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java
+++ b/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java
@@ -225,6 +225,7 @@ PluginUpdatesDetails lookupPluginUpdates( Plugin plugin, boolean allowSnapshots
* @param propertyDefinitions Any extra hints about properties.
* @param includeProperties A comma separated list of properties to include.
* @param excludeProperties A comma separated list of properties to exclude.
+ * @param includeParent whether to include parent POMs
* @param autoLinkItems whether to automatically infer associations
* @return a map of {@link org.codehaus.mojo.versions.api.PropertyVersions} values keyed by
* {@link org.codehaus.mojo.versions.Property} instances.
@@ -232,7 +233,7 @@ PluginUpdatesDetails lookupPluginUpdates( Plugin plugin, boolean allowSnapshots
*/
Map getVersionPropertiesMap( MavenProject project, Property[] propertyDefinitions,
String includeProperties, String excludeProperties,
- boolean autoLinkItems )
+ boolean includeParent, boolean autoLinkItems )
throws MojoExecutionException;
/**
diff --git a/src/test/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojoTest.java b/src/test/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojoTest.java
index be01de3bdf..f306faed95 100644
--- a/src/test/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojoTest.java
+++ b/src/test/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojoTest.java
@@ -35,6 +35,7 @@
import static org.apache.commons.codec.CharEncoding.UTF_8;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.matchesPattern;
+import static org.hamcrest.Matchers.not;
/**
* Unit tests for {@link DisplayPropertyUpdatesMojo}
@@ -85,4 +86,25 @@ public void testPropertiesFromParent() throws Exception
assertThat( String.join( "", Files.readAllLines( tempFile ) ),
matchesPattern( ".*\\$\\{ver} \\.* 1\\.0\\.0 -> 2\\.0\\.0.*" ) );
}
+
+ @Test
+ public void testDisablePropertiesFromParent() throws Exception
+ {
+ Path tempFile = Files.createTempFile( tempDir, "output", "" );
+
+ TestUtils.copyDir( Paths.get( "src/test/resources/org/codehaus/mojo/display-property-updates/issue-367" ),
+ tempDir );
+ DisplayPropertyUpdatesMojo mojo =
+ (DisplayPropertyUpdatesMojo) mojoRule.lookupConfiguredMojo( tempDir.resolve( "child" ).toFile(),
+ "display-property-updates" );
+ mojo.outputEncoding = UTF_8;
+ mojo.outputFile = tempFile.toFile();
+ mojo.setPluginContext( new HashMap<>() );
+ mojo.artifactMetadataSource = MockUtils.mockArtifactMetadataSource();
+ mojo.includeParent = false;
+ mojo.execute();
+
+ assertThat( String.join( "", Files.readAllLines( tempFile ) ),
+ not( matchesPattern( ".*\\$\\{ver} \\.* 1\\.0\\.0 -> 2\\.0\\.0.*" ) ) );
+ }
}
diff --git a/src/test/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojoTest.java b/src/test/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojoTest.java
new file mode 100644
index 0000000000..4d498592d4
--- /dev/null
+++ b/src/test/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojoTest.java
@@ -0,0 +1,98 @@
+package org.codehaus.mojo.versions;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.OutputStream;
+import java.util.Locale;
+
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.doxia.module.xhtml5.Xhtml5SinkFactory;
+import org.apache.maven.doxia.sink.SinkFactory;
+import org.apache.maven.doxia.tools.SiteTool;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugin.testing.MojoRule;
+import org.apache.maven.plugin.testing.stubs.StubArtifactRepository;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.codehaus.mojo.versions.utils.MockUtils.mockArtifactMetadataSource;
+import static org.codehaus.mojo.versions.utils.MockUtils.mockSiteTool;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.not;
+
+/**
+ * Unit tests for {@link PropertyUpdatesReportMojo}
+ */
+public class PropertyUpdatesReportMojoTest extends AbstractMojoTestCase
+{
+ @Rule
+ public MojoRule mojoRule = new MojoRule( this );
+ private static final ArtifactMetadataSource ARTIFACT_METADATA_SOURCE = mockArtifactMetadataSource();
+ private static final SiteTool SITE_TOOL = mockSiteTool();
+ private static final StubArtifactRepository LOCAL_REPOSITORY = new StubArtifactRepository( "" );
+
+ @Test
+ public void testIncludeParentTrueShouldContainProperty() throws Exception
+ {
+ OutputStream os = new ByteArrayOutputStream();
+ SinkFactory sinkFactory = new Xhtml5SinkFactory();
+
+ PropertyUpdatesReportMojo mojo =
+ (PropertyUpdatesReportMojo) mojoRule.lookupConfiguredMojo(
+ new File( "src/test/resources/org/codehaus/mojo/display-property-updates/issue-367/child" ),
+ "property-updates-report" );
+ setVariableValueToObject( mojo, "localRepository", LOCAL_REPOSITORY );
+ setVariableValueToObject( mojo, "siteTool", SITE_TOOL );
+ setVariableValueToObject( mojo, "artifactMetadataSource", ARTIFACT_METADATA_SOURCE );
+ setVariableValueToObject( mojo, "includeParent", true );
+ mojo.generate( sinkFactory.createSink( os ), sinkFactory, Locale.getDefault() );
+
+ String output = os.toString()
+ .replaceAll( "<[^>]+>", " " )
+ .replaceAll( "&[^;]+;", " " )
+ .replaceAll( "\\s+", " " );
+ assertThat( output, containsString( "${ver}" ) );
+ }
+
+ @Test
+ public void testIncludeParentFalseShouldNotCountainProperty() throws Exception
+ {
+ OutputStream os = new ByteArrayOutputStream();
+ SinkFactory sinkFactory = new Xhtml5SinkFactory();
+
+ PropertyUpdatesReportMojo mojo =
+ (PropertyUpdatesReportMojo) mojoRule.lookupConfiguredMojo(
+ new File( "src/test/resources/org/codehaus/mojo/display-property-updates/issue-367/child" ),
+ "property-updates-report" );
+ setVariableValueToObject( mojo, "localRepository", new StubArtifactRepository( "" ) );
+ setVariableValueToObject( mojo, "siteTool", SITE_TOOL );
+ setVariableValueToObject( mojo, "artifactMetadataSource", ARTIFACT_METADATA_SOURCE );
+ setVariableValueToObject( mojo, "includeParent", false );
+ mojo.generate( sinkFactory.createSink( os ), sinkFactory, Locale.getDefault() );
+
+ String output = os.toString()
+ .replaceAll( "<[^>]+>", " " )
+ .replaceAll( "&[^;]+;", " " )
+ .replaceAll( "\\s+", " " );
+ assertThat( output, not( containsString( "${ver}" ) ) );
+ }
+}
diff --git a/src/test/java/org/codehaus/mojo/versions/api/DefaultVersionsHelperTest.java b/src/test/java/org/codehaus/mojo/versions/api/DefaultVersionsHelperTest.java
index 89fcc92b49..3e196f8203 100644
--- a/src/test/java/org/codehaus/mojo/versions/api/DefaultVersionsHelperTest.java
+++ b/src/test/java/org/codehaus/mojo/versions/api/DefaultVersionsHelperTest.java
@@ -182,7 +182,8 @@ public void testMVERSIONS159ExcludedAndNotIncluded()
};
// should not throw an IllegalStateException
Map result =
- helper.getVersionPropertiesMap( project, propertyDefinitions, "foo.version", "bar.version", false );
+ helper.getVersionPropertiesMap( project, propertyDefinitions, "foo.version", "bar.version",
+ false, false );
assertTrue( result.isEmpty() );
}