You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/01/07 21:56:47 UTC

[maven-release] 01/02: 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

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 <th...@gmx.de>
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 )
         {