This is an automated email from the ASF dual-hosted git repository. rfscholte pushed a commit to branch MRELEASE-835 in repository https://gitbox.apache.org/repos/asf/maven-release.git
commit 95ec13f73dbe70f31eb318ed5584dbd833ce272f Author: Thorsten Heit <[email protected]> AuthorDate: Fri Dec 20 12:27:02 2019 +0100 Add support for the "--pin-externals" option in SCM branch and tag operations. This feature was introducted in Subversion 1.9 and is available in maven-scm-plugin since version 1.11.1 --- .../maven/shared/release/config/ReleaseDescriptor.java | 8 ++++++++ .../release/config/PropertiesReleaseDescriptorStore.java | 2 ++ .../shared/release/config/ReleaseDescriptorBuilder.java | 6 ++++++ .../apache/maven/shared/release/config/ReleaseUtils.java | 5 +++++ .../apache/maven/shared/release/phase/ScmBranchPhase.java | 5 +++++ .../org/apache/maven/shared/release/phase/ScmTagPhase.java | 7 +++++++ maven-release-manager/src/main/mdo/release-descriptor.mdo | 14 ++++++++++++++ .../shared/release/phase/GenerateReleasePomsPhaseTest.java | 2 ++ .../shared/release/phase/IsScmBranchParametersEquals.java | 4 ++-- .../shared/release/phase/IsScmTagParametersEquals.java | 3 ++- .../release/phase/ScmCommitDevelopmentPhaseTest.java | 1 + .../release/phase/ScmCommitPreparationPhaseTest.java | 1 + .../apache/maven/plugins/release/BranchReleaseMojo.java | 10 ++++++++++ .../apache/maven/plugins/release/PrepareReleaseMojo.java | 10 ++++++++++ 14 files changed, 75 insertions(+), 3 deletions(-) diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java index a6d03c2..a45fd13 100644 --- a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java +++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java @@ -464,4 +464,12 @@ public interface ReleaseDescriptor void setScmRelativePathProjectDirectory( String scmRelativePathProjectDirectory ); void setScmSourceUrl( String scmUrl ); + + /** + * Get whether the "--pin-externals" option in svn copy commands is enabled + * which is new in Subversion 1.9. + * + * @return boolean + */ + boolean isPinExternals(); } diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java index 262b21d..9fd335c 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java @@ -249,6 +249,8 @@ public class PropertiesReleaseDescriptorStore properties.setProperty( "remoteTagging", Boolean.toString( config.isRemoteTagging() ) ); + properties.setProperty( "pinExternals", Boolean.toString( config.isPinExternals() ) ); + properties.setProperty( "pushChanges", Boolean.toString( config.isPushChanges() ) ); if ( config.getWorkItem() != null ) diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java index 745dc4d..8e71be9 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java @@ -440,6 +440,12 @@ public class ReleaseDescriptorBuilder return this; } + public ReleaseDescriptorBuilder setPinExternals( boolean pinExternals ) + { + releaseDescriptor.setPinExternals( pinExternals ); + return this; + } + BuilderReleaseDescriptor build() { return releaseDescriptor; 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 bc48cc5..0da9629 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 @@ -161,6 +161,11 @@ public class ReleaseUtils String remoteTaggingStr = properties.getProperty( "remoteTagging" ); builder.setRemoteTagging( Boolean.valueOf( remoteTaggingStr ) ); } + if ( properties.containsKey( "pinExternals" ) ) + { + String pinExternals = properties.getProperty( "pinExternals" ); + builder.setPinExternals( Boolean.valueOf( pinExternals ) ); + } if ( properties.containsKey( "pushChanges" ) ) { String pushChanges = properties.getProperty( "pushChanges" ); diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java index d1d85b6..8bbde41 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java @@ -108,6 +108,7 @@ public class ScmBranchPhase scmBranchParameters.setMessage( releaseDescriptor.getScmCommentPrefix() + "copy for branch " + branchName ); scmBranchParameters.setRemoteBranching( releaseDescriptor.isRemoteTagging() ); scmBranchParameters.setScmRevision( releaseDescriptor.getScmReleasedPomRevision() ); + scmBranchParameters.setPinExternals( releaseDescriptor.isPinExternals() ); result = provider.branch( repository, fileSet, branchName, scmBranchParameters ); } @@ -143,6 +144,10 @@ public class ScmBranchPhase logInfo( result, " To SCM URL: " + releaseDescriptor.getScmBranchBase() ); } logInfo( result, " with label: '" + releaseDescriptor.getScmReleaseLabel() + "'" ); + if ( releaseDescriptor.isPinExternals() ) + { + logInfo( result, " with pinned externals" ); + } result.setResultCode( ReleaseResult.SUCCESS ); diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java index 5f52d39..6f4f67d 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java @@ -120,6 +120,7 @@ public class ScmTagPhase new ScmTagParameters( releaseDescriptor.getScmCommentPrefix() + "copy for tag " + tagName ); scmTagParameters.setRemoteTagging( releaseDescriptor.isRemoteTagging() ); scmTagParameters.setScmRevision( releaseDescriptor.getScmReleasedPomRevision() ); + scmTagParameters.setPinExternals( releaseDescriptor.isPinExternals() ); if ( getLogger().isDebugEnabled() ) { getLogger().debug( @@ -127,6 +128,8 @@ public class ScmTagPhase getLogger().debug( "ScmTagPhase :: scmTagParameters scmRevision " + releaseDescriptor.getScmReleasedPomRevision() ); getLogger().debug( "ScmTagPhase :: fileSet " + fileSet ); + getLogger().debug( + "ScmTagPhase :: scmTagParameters pinExternals " + releaseDescriptor.isPinExternals() ); } result = provider.tag( repository, fileSet, tagName, scmTagParameters ); } @@ -168,6 +171,10 @@ public class ScmTagPhase logInfo( result, "Full run would be tagging remotely " + basedirAlignedReleaseDescriptor.getScmSourceUrl() + " with label: '" + releaseDescriptor.getScmReleaseLabel() + "'" ); } + if ( releaseDescriptor.isPinExternals() ) + { + logInfo( result, "Full run would pin externals" ); + } result.setResultCode( ReleaseResult.SUCCESS ); diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo index b63c4b4..d1d4996 100644 --- a/maven-release-manager/src/main/mdo/release-descriptor.mdo +++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo @@ -563,6 +563,18 @@ </description> </field> + <field> + <name>pinExternals</name> + <version>3.0.0+</version> + <type>boolean</type> + <defaultValue>false</defaultValue> + <description> + Enable the "--pin-externals" option in svn copy commands which is new in Subversion 1.9. + NOTE : Currently only implemented with Subversion. + (https://issues.apache.org/jira/browse/SCM-805) + </description> + </field> + <!-- Announcement Information Announcement related info, this can be a second part of the process. @@ -785,6 +797,7 @@ updateVersionsToSnapshot != that.isUpdateVersionsToSnapshot() || allowTimestampedSnapshots != that.isAllowTimestampedSnapshots() || remoteTagging != that.isRemoteTagging() || + pinExternals != that.isPinExternals() || localCheckout != that.isLocalCheckout() || pushChanges != that.isPushChanges() ) @@ -1054,6 +1067,7 @@ result = 29 * result + java.util.Objects.hashCode( defaultReleaseVersion ); result = 29 * result + java.util.Objects.hashCode( scmReleasedPomRevision ); result = 29 * result + java.util.Objects.hashCode( workItem ); + result = 29 * result + java.util.Objects.hashCode( pinExternals ); return result; } diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java index c150589..ad381ee 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java @@ -117,6 +117,7 @@ public class GenerateReleasePomsPhaseTest builder.setGenerateReleasePoms( true ); builder.setSuppressCommitBeforeTagOrBranch( true ); builder.setRemoteTagging( false ); + builder.setPinExternals( false ); mapNextVersion( builder, "groupId:artifactId" ); phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects ); @@ -135,6 +136,7 @@ public class GenerateReleasePomsPhaseTest builder.setGenerateReleasePoms( true ); builder.setSuppressCommitBeforeTagOrBranch( true ); builder.setRemoteTagging( true ); + builder.setPinExternals( false ); mapNextVersion( builder, "groupId:artifactId" ); phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects ); diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java index 9fb572f..8431b85 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java @@ -40,7 +40,7 @@ public class IsScmBranchParametersEquals extends ArgumentMatcher<ScmBranchParame { ScmBranchParameters sbp = (ScmBranchParameters) argument; return sbp.getMessage().equals( this.scmBranchParameters.getMessage() ) - //&& stp.isRemoteTagging() == this.scmBranchParameters.isRemoteTagging() - ; + && sbp.isRemoteBranching() == this.scmBranchParameters.isRemoteBranching() + && sbp.isPinExternals() == this.scmBranchParameters.isPinExternals(); } } diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java index 0c3dc75..6196256 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java @@ -39,6 +39,7 @@ public class IsScmTagParametersEquals extends ArgumentMatcher<ScmTagParameters> { ScmTagParameters stp = (ScmTagParameters) argument; return stp.getMessage().equals( this.scmTagParameters.getMessage() ) - && stp.isRemoteTagging() == this.scmTagParameters.isRemoteTagging(); + && stp.isRemoteTagging() == this.scmTagParameters.isRemoteTagging() + && stp.isPinExternals() == this.scmTagParameters.isPinExternals(); } } diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java index 50ba849..8378869 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java @@ -96,6 +96,7 @@ public class ScmCommitDevelopmentPhaseTest List<MavenProject> reactorProjects = createReactorProjects(); builder.setRemoteTagging( false ); + builder.setPinExternals( false ); builder.setSuppressCommitBeforeTagOrBranch( true ); builder.setUpdateWorkingCopyVersions( false ); diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java index 863cdbd..954086c 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java @@ -488,6 +488,7 @@ public class ScmCommitPreparationPhaseTest List<MavenProject> reactorProjects = createReactorProjects(); builder.setRemoteTagging( true ); + builder.setPinExternals( false ); builder.setSuppressCommitBeforeTagOrBranch( true ); ScmProvider scmProviderMock = mock( ScmProvider.class ); 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 1cbd467..05030f0 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 @@ -230,6 +230,15 @@ public class BranchReleaseMojo @Parameter( defaultValue = "@{prefix} prepare branch @{releaseLabel}", property = "scmBranchCommitComment" ) private String scmBranchCommitComment = "@{prefix} prepare branch @{releaseLabel}"; + /** + * Currently only implemented with svn scm. Enable the "--pin-externals" option in svn + * copy commands which is new in Subversion 1.9. + * + * @since 3.0.0 + */ + @Parameter( defaultValue = "false", property = "pinExternals" ) + private boolean pinExternals; + @Override public void execute() throws MojoExecutionException, MojoFailureException @@ -254,6 +263,7 @@ public class BranchReleaseMojo config.setProjectVersionPolicyId( projectVersionPolicyId ); config.setProjectNamingPolicyId( projectBranchNamingPolicyId ); config.setScmBranchCommitComment( scmBranchCommitComment ); + config.setPinExternals( pinExternals ); if ( checkModificationExcludeList != null ) { 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 1c3e057..f09a24d 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 @@ -280,6 +280,15 @@ public class PrepareReleaseMojo property = "scmDevelopmentCommitComment" ) private String scmDevelopmentCommitComment = "@{prefix} prepare for next development iteration"; + /** + * Currently only implemented with svn scm. Enable the "--pin-externals" option in svn + * copy commands which is new in Subversion 1.9. + * + * @since 3.0.0 + */ + @Parameter( defaultValue = "false", property = "pinExternals" ) + private boolean pinExternals; + @Override public void execute() throws MojoExecutionException, MojoFailureException @@ -321,6 +330,7 @@ public class PrepareReleaseMojo config.setProjectNamingPolicyId( projectTagNamingPolicyId ); config.setScmDevelopmentCommitComment( scmDevelopmentCommitComment ); config.setScmReleaseCommitComment( scmReleaseCommitComment ); + config.setPinExternals( pinExternals ); if ( checkModificationExcludeList != null ) {
