From ed33f581b5948e0880dfc61cb1fdb3c0e33ac11a Mon Sep 17 00:00:00 2001 From: Henning Schmiedehausen Date: Fri, 3 Mar 2017 10:32:40 -0800 Subject: [PATCH 1/5] adds missing naming policy id copy opeations --- .../org/apache/maven/shared/release/config/ReleaseUtils.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java index 522fef4ad..090f5c8d6 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java @@ -123,6 +123,8 @@ public static ReleaseDescriptor merge( ReleaseDescriptor mergeInto, ReleaseDescr mergeInto.setProjectVersionPolicyId( mergeDefault( mergeInto.getProjectVersionPolicyId(), toBeMerged.getProjectVersionPolicyId() ) ); + mergeInto.setProjectNamingPolicyId( + mergeDefault( mergeInto.getProjectNamingPolicyId(), toBeMerged.getProjectNamingPolicyId() ) ); return mergeInto; } @@ -163,6 +165,7 @@ public static ReleaseDescriptor copyPropertiesToReleaseDescriptor( Properties pr releaseDescriptor.setPreparationGoals( properties.getProperty( "preparationGoals" ) ); releaseDescriptor.setCompletionGoals( properties.getProperty( "completionGoals" ) ); releaseDescriptor.setProjectVersionPolicyId( properties.getProperty( "projectVersionPolicyId" ) ); + releaseDescriptor.setProjectNamingPolicyId( properties.getProperty( "projectNamingPolicyId" ) ); String snapshotReleasePluginAllowedStr = properties.getProperty( "exec.snapshotReleasePluginAllowed" ); releaseDescriptor.setSnapshotReleasePluginAllowed( snapshotReleasePluginAllowedStr == null ? false From 85c82718e0953d6fd378dcc77622b2e2ae346ae7 Mon Sep 17 00:00:00 2001 From: Henning Schmiedehausen Date: Fri, 3 Mar 2017 10:37:56 -0800 Subject: [PATCH 2/5] Adds a second policy for branch naming as compared to tag naming. Use different configuration settings for branch and tag naming. Add a second default policy that is used when naming branches. --- .../policies/DefaultBranchNamingPolicy.java | 41 +++++++++++++++++++ .../phase/BranchInputVariablesPhaseTest.java | 31 ++++++++------ .../plugins/release/BranchReleaseMojo.java | 8 ++-- .../plugins/release/PrepareReleaseMojo.java | 8 ++-- 4 files changed, 68 insertions(+), 20 deletions(-) create mode 100644 maven-release-manager/src/main/java/org/apache/maven/shared/release/policies/DefaultBranchNamingPolicy.java diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/policies/DefaultBranchNamingPolicy.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/policies/DefaultBranchNamingPolicy.java new file mode 100644 index 000000000..999da1c4c --- /dev/null +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/policies/DefaultBranchNamingPolicy.java @@ -0,0 +1,41 @@ +package org.apache.maven.shared.release.policies; + +/* + * 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 org.apache.maven.shared.release.policy.PolicyException; +import org.apache.maven.shared.release.policy.naming.NamingPolicy; +import org.apache.maven.shared.release.policy.naming.NamingPolicyRequest; +import org.apache.maven.shared.release.policy.naming.NamingPolicyResult; +import org.codehaus.plexus.component.annotations.Component; + +/** + * + * @since 3.0.0 + */ +@Component( role = NamingPolicy.class, hint = "default-branch" ) +public class DefaultBranchNamingPolicy implements NamingPolicy +{ + @Override + public NamingPolicyResult getName( NamingPolicyRequest request ) + throws PolicyException + { + return new NamingPolicyResult().setName( null ); + } +} diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/BranchInputVariablesPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/BranchInputVariablesPhaseTest.java index d730bd6a9..eeb95b091 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/BranchInputVariablesPhaseTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/BranchInputVariablesPhaseTest.java @@ -68,7 +68,7 @@ public void testInputVariablesInteractive() List reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) ); - ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + ReleaseDescriptor releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" ); releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" ); @@ -79,7 +79,7 @@ public void testInputVariablesInteractive() assertEquals( "Check tag", "tag-value", releaseDescriptor.getScmReleaseLabel() ); // prepare - releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" ); releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" ); @@ -99,7 +99,7 @@ public void testUnmappedVersion() { List reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) ); - ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + ReleaseDescriptor releaseDescriptor = createReleaseDescriptor(); try { @@ -112,7 +112,7 @@ public void testUnmappedVersion() assertNull( "check no cause", e.getCause() ); } - releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor = createReleaseDescriptor(); try { @@ -136,7 +136,7 @@ public void testInputVariablesNonInteractiveConfigured() List reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) ); - ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + ReleaseDescriptor releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.setInteractive( false ); releaseDescriptor.setScmReleaseLabel( "tag-value" ); @@ -147,7 +147,7 @@ public void testInputVariablesNonInteractiveConfigured() assertEquals( "Check tag", "tag-value", releaseDescriptor.getScmReleaseLabel() ); // prepare - releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.setInteractive( false ); releaseDescriptor.setScmReleaseLabel( "simulated-tag-value" ); @@ -171,7 +171,7 @@ public void testInputVariablesInteractiveConfigured() List reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) ); - ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + ReleaseDescriptor releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.setScmReleaseLabel( "tag-value" ); // execute @@ -181,7 +181,7 @@ public void testInputVariablesInteractiveConfigured() assertEquals( "Check tag", "tag-value", releaseDescriptor.getScmReleaseLabel() ); // prepare - releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.setScmReleaseLabel( "simulated-tag-value" ); // execute @@ -206,7 +206,7 @@ public void testPrompterException() List reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) ); - ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + ReleaseDescriptor releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" ); releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" ); @@ -223,7 +223,7 @@ public void testPrompterException() } // prepare - releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" ); releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" ); @@ -261,7 +261,7 @@ public void testEmptyBranchName() List reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) ); - ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + ReleaseDescriptor releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.setInteractive( false ); releaseDescriptor.setScmReleaseLabel( null ); releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" ); @@ -280,7 +280,7 @@ public void testEmptyBranchName() } // prepare - releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor = createReleaseDescriptor(); releaseDescriptor.setInteractive( false ); releaseDescriptor.setScmReleaseLabel( null ); releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" ); @@ -310,4 +310,11 @@ private static MavenProject createProject( String artifactId, String version ) model.setVersion( version ); return new MavenProject( model ); } + + private static ReleaseDescriptor createReleaseDescriptor() + { + ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor.setProjectNamingPolicyId("default-branch"); + return releaseDescriptor; + } } diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java index 03aa31be7..368ca57a5 100644 --- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java +++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java @@ -199,12 +199,12 @@ public class BranchReleaseMojo private String projectVersionPolicyId; /** - * The role-hint for the NamingPolicy implementation used to calculate the project branch and tag names. + * The role-hint for the NamingPolicy implementation used to calculate the project names. * * @since 3.0.0 */ - @Parameter( defaultValue = "default", property = "projectNamingPolicyId" ) - private String projectNamingPolicyId; + @Parameter( defaultValue = "default-branch", property = "projectBranchNamingPolicyId" ) + private String projectBranchNamingPolicyId; /** * {@inheritDoc} @@ -230,7 +230,7 @@ public void execute() config.setDefaultDevelopmentVersion( developmentVersion ); config.setSuppressCommitBeforeTagOrBranch( suppressCommitBeforeBranch ); config.setProjectVersionPolicyId( projectVersionPolicyId ); - config.setProjectNamingPolicyId( projectNamingPolicyId ); + config.setProjectNamingPolicyId( projectBranchNamingPolicyId ); // Create a config containing values from the session properties (ie command line properties with cli). ReleaseDescriptor sysPropertiesConfig diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java index 852f61cd1..9efd0e15b 100644 --- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java +++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java @@ -226,12 +226,12 @@ public class PrepareReleaseMojo private String projectVersionPolicyId; /** - * The role-hint for the NamingPolicy implementation used to calculate the project branch and tag names. + * The role-hint for the NamingPolicy implementation used to calculate the project tag names. * * @since 3.0.0 */ - @Parameter( defaultValue = "default", property = "projectNamingPolicyId" ) - private String projectNamingPolicyId; + @Parameter( defaultValue = "default", property = "projectTagNamingPolicyId" ) + private String projectTagNamingPolicyId; /** * {@inheritDoc} @@ -273,7 +273,7 @@ protected void prepareRelease( boolean generateReleasePoms ) config.setSuppressCommitBeforeTagOrBranch( suppressCommitBeforeTag ); config.setWaitBeforeTagging( waitBeforeTagging ); config.setProjectVersionPolicyId( projectVersionPolicyId ); - config.setProjectNamingPolicyId( projectNamingPolicyId ); + config.setProjectNamingPolicyId( projectTagNamingPolicyId ); if ( checkModificationExcludeList != null ) { From f7712f1fe0e16bbfb0fa39d9458c9b4f741c0273 Mon Sep 17 00:00:00 2001 From: Henning Schmiedehausen Date: Fri, 3 Mar 2017 14:51:50 -0800 Subject: [PATCH 3/5] Fixes the naming policy logic. - Ensure that the naming policy is executed when a branch is requested even if an scm tag name is set. - Ensure that in non-interactive mode, the plugin does not fail unconditionally if a branch is requested. --- .../release/phase/InputVariablesPhase.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java index b4ccae2e6..4419e7967 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java @@ -74,7 +74,7 @@ public class InputVariablesPhase */ @Requirement private ScmRepositoryConfigurator scmRepositoryConfigurator; - + /** * Component used for custom or default naming policy */ @@ -134,9 +134,11 @@ public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnviro throw new ReleaseExecutionException( "Project tag cannot be selected if version is not yet mapped" ); } - String defaultTag; + String defaultTag = null; String scmTagNameFormat = releaseDescriptor.getScmTagNameFormat(); - if ( scmTagNameFormat != null ) + + // Only apply the scmTagName format for tag operations, not branching. + if ( !branchOperation && scmTagNameFormat != null ) { Interpolator interpolator = new StringSearchInterpolator( "@{", "}" ); List possiblePrefixes = java.util.Arrays.asList( "project", "pom" ); @@ -156,7 +158,8 @@ public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnviro "Could not interpolate specified tag name format: " + scmTagNameFormat, e ); } } - else + + if ( defaultTag == null ) { try { @@ -166,7 +169,7 @@ public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnviro catch ( PolicyException e ) { throw new ReleaseExecutionException( e.getMessage(), e ); - } + } } ScmProvider provider = null; @@ -207,9 +210,16 @@ public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnviro e ); } } - else if ( branchOperation ) + else if ( defaultTag == null ) { - throw new ReleaseExecutionException( "No branch name was given." ); + if ( branchOperation ) + { + throw new ReleaseExecutionException( "No branch name was given." ); + } + else + { + throw new ReleaseExecutionException( "No tag name was given." ); + } } else { @@ -236,7 +246,7 @@ public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvir return result; } - + private String resolveSuggestedName( String policyId, String version, MavenProject project ) throws PolicyException { From f2954a140ae58e562e32dd30102af9109a60a692 Mon Sep 17 00:00:00 2001 From: Henning Schmiedehausen Date: Fri, 3 Mar 2017 16:58:55 -0800 Subject: [PATCH 4/5] changes the property name back to be 'projectNamingPolicyId' --- .../org/apache/maven/plugins/release/BranchReleaseMojo.java | 2 +- .../org/apache/maven/plugins/release/PrepareReleaseMojo.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java index 368ca57a5..ba00d027f 100644 --- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java +++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java @@ -203,7 +203,7 @@ public class BranchReleaseMojo * * @since 3.0.0 */ - @Parameter( defaultValue = "default-branch", property = "projectBranchNamingPolicyId" ) + @Parameter( defaultValue = "default-branch", property = "projectNamingPolicyId" ) private String projectBranchNamingPolicyId; /** diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java index 9efd0e15b..60d1c3f9a 100644 --- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java +++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java @@ -230,7 +230,7 @@ public class PrepareReleaseMojo * * @since 3.0.0 */ - @Parameter( defaultValue = "default", property = "projectTagNamingPolicyId" ) + @Parameter( defaultValue = "default", property = "projectNamingPolicyId" ) private String projectTagNamingPolicyId; /** From f0ccb51c8d3ba2bab998677d19754a94e28cc177 Mon Sep 17 00:00:00 2001 From: Henning Schmiedehausen Date: Fri, 3 Mar 2017 17:06:48 -0800 Subject: [PATCH 5/5] fixes documentation typo --- .../org/apache/maven/plugins/release/BranchReleaseMojo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java index ba00d027f..3388ccfd6 100644 --- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java +++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java @@ -199,7 +199,7 @@ public class BranchReleaseMojo private String projectVersionPolicyId; /** - * The role-hint for the NamingPolicy implementation used to calculate the project names. + * The role-hint for the NamingPolicy implementation used to calculate the project branch names. * * @since 3.0.0 */