You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2018/06/27 21:06:46 UTC

[maven-scm] branch master updated: [SCM-805] Add SVN --pin-externals option to copy command (branch/tag)

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-scm.git


The following commit(s) were added to refs/heads/master by this push:
     new c03e33c  [SCM-805] Add SVN --pin-externals option to copy command (branch/tag)
c03e33c is described below

commit c03e33c4a2afe8fcb1a002fd4bbc7fe8dd831e77
Author: Thorsten Heit <th...@gmx.de>
AuthorDate: Wed Oct 25 10:11:26 2017 +0200

    [SCM-805] Add SVN --pin-externals option to copy command (branch/tag)
    
    This closes #55
---
 .../org/apache/maven/scm/ScmBranchParameters.java  | 13 +++++++++
 .../org/apache/maven/scm/ScmTagParameters.java     | 13 +++++++++
 .../org/apache/maven/scm/plugin/BranchMojo.java    | 12 ++++++++
 .../java/org/apache/maven/scm/plugin/TagMojo.java  | 12 ++++++++
 .../svnexe/command/branch/SvnBranchCommand.java    |  7 +++++
 .../svn/svnexe/command/tag/SvnTagCommand.java      |  6 ++++
 .../command/branch/SvnExeBranchCommandTckTest.java | 34 ++++++++++++++++++++++
 .../command/tag/SvnExeTagCommandTckTest.java       | 32 ++++++++++++++++++++
 8 files changed, 129 insertions(+)

diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/ScmBranchParameters.java b/maven-scm-api/src/main/java/org/apache/maven/scm/ScmBranchParameters.java
index 919f4a9..06d3745 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/ScmBranchParameters.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/ScmBranchParameters.java
@@ -34,11 +34,14 @@ public class ScmBranchParameters
 
     private boolean remoteBranching = false;
 
+    private boolean pinExternals = false;
+
     private String scmRevision;
 
     public ScmBranchParameters()
     {
         this.remoteBranching = false;
+        this.pinExternals = false;
     }
 
     public ScmBranchParameters( String message )
@@ -76,6 +79,16 @@ public class ScmBranchParameters
         this.remoteBranching = remoteBranching;
     }
 
+    public boolean isPinExternals()
+    {
+        return pinExternals;
+    }
+
+    public void setPinExternals( boolean pinExternals )
+    {
+        this.pinExternals = pinExternals;
+    }
+
     public String toString()
     {
         return "[" + scmRevision + "] " + message;
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/ScmTagParameters.java b/maven-scm-api/src/main/java/org/apache/maven/scm/ScmTagParameters.java
index 491d940..2db3d18 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/ScmTagParameters.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/ScmTagParameters.java
@@ -34,11 +34,14 @@ public class ScmTagParameters
 
     private boolean remoteTagging = false;
 
+    private boolean pinExternals = false;
+
     private String scmRevision;
 
     public ScmTagParameters()
     {
         this.remoteTagging = false;
+        this.pinExternals = false;
     }
 
     public ScmTagParameters( String message )
@@ -66,6 +69,16 @@ public class ScmTagParameters
         this.remoteTagging = remoteTagging;
     }
 
+    public boolean isPinExternals()
+    {
+        return pinExternals;
+    }
+
+    public void setPinExternals( boolean pinExternals )
+    {
+        this.pinExternals = pinExternals;
+    }
+
     public String getScmRevision()
     {
         return scmRevision;
diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BranchMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BranchMojo.java
index 2f61f57..fcaafaa 100644
--- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BranchMojo.java
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BranchMojo.java
@@ -60,6 +60,17 @@ public class BranchMojo
     @Parameter( property = "remoteBranching", defaultValue = "true" )
     private boolean remoteBranching;     
 
+    /**
+     * Currently only implemented with Subversion. Enable the "--pin-externals"
+     * option in svn copy commands which is new in Subversion 1.9.
+     *
+     * @since 1.10.1
+     *
+     * @see https://subversion.apache.org/docs/release-notes/1.9.html
+     */
+    @Parameter( property = "pinExternals", defaultValue = "false" )
+    private boolean pinExternals;
+
     /** {@inheritDoc} */
     public void execute()
         throws MojoExecutionException
@@ -76,6 +87,7 @@ public class BranchMojo
 
             ScmBranchParameters scmBranchParameters = new ScmBranchParameters( message );
             scmBranchParameters.setRemoteBranching( remoteBranching );
+            scmBranchParameters.setPinExternals( pinExternals );
             
             BranchScmResult result = provider.branch( repository, getFileSet(), finalBranch, scmBranchParameters );
 
diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/TagMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/TagMojo.java
index 49a969e..a040d68 100644
--- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/TagMojo.java
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/TagMojo.java
@@ -87,6 +87,17 @@ public class TagMojo
     @Parameter( property = "remoteTagging", defaultValue = "true" )
     private boolean remoteTagging;    
 
+    /**
+     * Currently only implemented with Subversion. Enable the "--pin-externals"
+     * option in svn copy commands which is new in Subversion 1.9.
+     *
+     * @since 1.10.1
+     *
+     * @see https://subversion.apache.org/docs/release-notes/1.9.html
+     */
+    @Parameter( property = "pinExternals", defaultValue = "false" )
+    private boolean pinExternals;
+
     /** {@inheritDoc} */
     public void execute()
         throws MojoExecutionException
@@ -133,6 +144,7 @@ public class TagMojo
 
             ScmTagParameters scmTagParameters = new ScmTagParameters( message );
             scmTagParameters.setRemoteTagging( remoteTagging );
+            scmTagParameters.setPinExternals( pinExternals );
 
             TagScmResult result = provider.tag( repository, getFileSet(), finalTag, scmTagParameters );
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java
index 7bdaa80..5d5e32d 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java
@@ -39,6 +39,7 @@ import org.apache.maven.scm.provider.svn.SvnTagBranchUtils;
 import org.apache.maven.scm.provider.svn.command.SvnCommand;
 import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
 import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils;
+import org.apache.maven.scm.provider.svn.util.SvnUtil;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.Os;
 import org.codehaus.plexus.util.StringUtils;
@@ -170,6 +171,7 @@ public class SvnBranchCommand
     {
         ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
         scmBranchParameters.setRemoteBranching( false );
+        scmBranchParameters.setPinExternals( false );
         return createCommandLine( repository, workingDirectory, branch, messageFile, scmBranchParameters );
     }
     
@@ -187,6 +189,11 @@ public class SvnBranchCommand
 
         cl.createArg().setValue( messageFile.getAbsolutePath() );
 
+        if ( scmBranchParameters != null && scmBranchParameters.isPinExternals() )
+        {
+            cl.createArg().setValue( "--pin-externals" );
+        }
+
         if ( scmBranchParameters != null && scmBranchParameters.isRemoteBranching() )
         {
             if ( StringUtils.isNotBlank( scmBranchParameters.getScmRevision() ) )
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java
index cdcb44f..e2f2626 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java
@@ -64,6 +64,7 @@ public class SvnTagCommand
         ScmTagParameters scmTagParameters = new ScmTagParameters( message );
         // force false to preserve backward comp
         scmTagParameters.setRemoteTagging( false );
+        scmTagParameters.setPinExternals( false );
         return executeTagCommand( repo, fileSet, tag, scmTagParameters );
     }
 
@@ -78,6 +79,7 @@ public class SvnTagCommand
             getLogger().debug( "SvnTagCommand :: scmTagParameters is null create an empty one" );
             scmTagParameters = new ScmTagParameters();
             scmTagParameters.setRemoteTagging( false );
+            scmTagParameters.setPinExternals( false );
         }
         else
         {
@@ -251,6 +253,10 @@ public class SvnTagCommand
 
         }
 
+        if ( scmTagParameters != null && scmTagParameters.isPinExternals() )
+        {
+            cl.createArg().setValue( "--pin-externals" );
+        }
 
         if ( scmTagParameters != null && scmTagParameters.isRemoteTagging() )
         {
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnExeBranchCommandTckTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnExeBranchCommandTckTest.java
index 5dac3c5..0cc7dd4 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnExeBranchCommandTckTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnExeBranchCommandTckTest.java
@@ -45,6 +45,7 @@ public class SvnExeBranchCommandTckTest
 
         ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
         scmBranchParameters.setRemoteBranching( true );
+        scmBranchParameters.setPinExternals( false );
         scmBranchParameters.setScmRevision( "2" );
 
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
@@ -53,6 +54,23 @@ public class SvnExeBranchCommandTckTest
                          scmBranchParameters );
     }
 
+    public void testBranchUserNameSvnHttpsRemoteBranchingWithRevWithPinExternals()
+        throws Exception
+    {
+        File messageFile = File.createTempFile( "maven-scm", "commit" );
+        messageFile.deleteOnExit();
+
+        ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
+        scmBranchParameters.setRemoteBranching( true );
+        scmBranchParameters.setPinExternals( true );
+        scmBranchParameters.setScmRevision( "2" );
+
+        testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
+                         "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
+                             + " --pin-externals --revision 2 https://foo.com/svn/trunk https://foo.com/svn/branches/svnbranch",
+                         scmBranchParameters );
+    }
+
     public void testBranchUserNameSvnHttpsRemoteBranchingNoRev()
         throws Exception
     {
@@ -61,12 +79,28 @@ public class SvnExeBranchCommandTckTest
 
         ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
         scmBranchParameters.setRemoteBranching( true );
+        scmBranchParameters.setPinExternals( false );
 
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
                              + " https://foo.com/svn/trunk https://foo.com/svn/branches/svnbranch", scmBranchParameters );
     }
 
+    public void testBranchUserNameSvnHttpsRemoteBranchingNoRevWithPinExternals()
+        throws Exception
+    {
+        File messageFile = File.createTempFile( "maven-scm", "commit" );
+        messageFile.deleteOnExit();
+
+        ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
+        scmBranchParameters.setRemoteBranching( true );
+        scmBranchParameters.setPinExternals( true );
+
+        testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
+                         "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
+                             + " --pin-externals https://foo.com/svn/trunk https://foo.com/svn/branches/svnbranch", scmBranchParameters );
+    }
+
     public void testBranchUserNameSvnHttps()
         throws Exception
     {
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
index d438039..a05aea0 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
@@ -55,11 +55,26 @@ public class SvnExeTagCommandTckTest
 
         ScmTagParameters scmTagParameters = new ScmTagParameters();
         scmTagParameters.setRemoteTagging( true );
+        scmTagParameters.setPinExternals( false );
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath()
                              + " --parents https://foo.com/svn/trunk https://foo.com/svn/tags/svntag", scmTagParameters );
     }
 
+    public void testTagRemoteTagHttpsWithPinExternals()
+        throws Exception
+    {
+        File messageFile = File.createTempFile( "maven-scm", "commit" );
+        messageFile.deleteOnExit();
+
+        ScmTagParameters scmTagParameters = new ScmTagParameters();
+        scmTagParameters.setRemoteTagging( true );
+        scmTagParameters.setPinExternals( true );
+        testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
+                         "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath()
+                             + " --parents --pin-externals https://foo.com/svn/trunk https://foo.com/svn/tags/svntag", scmTagParameters );
+    }
+
     public void testTagRemoteTagHttpsWithRevision()
         throws Exception
     {
@@ -68,6 +83,7 @@ public class SvnExeTagCommandTckTest
 
         ScmTagParameters scmTagParameters = new ScmTagParameters();
         scmTagParameters.setRemoteTagging( true );
+        scmTagParameters.setPinExternals( false );
         scmTagParameters.setScmRevision( "12" );
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath()
@@ -75,6 +91,22 @@ public class SvnExeTagCommandTckTest
                          scmTagParameters );
     }
 
+    public void testTagRemoteTagHttpsWithRevisionAndPinExternals()
+        throws Exception
+    {
+        File messageFile = File.createTempFile( "maven-scm", "commit" );
+        messageFile.deleteOnExit();
+
+        ScmTagParameters scmTagParameters = new ScmTagParameters();
+        scmTagParameters.setRemoteTagging( true );
+        scmTagParameters.setPinExternals( true );
+        scmTagParameters.setScmRevision( "12" );
+        testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
+                         "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath()
+                             + " --parents --revision 12 --pin-externals https://foo.com/svn/trunk https://foo.com/svn/tags/svntag",
+                         scmTagParameters );
+    }
+
     private void testCommandLine( String scmUrl, String tag, File messageFile, String user, String commandLine,
                                   ScmTagParameters scmTagParameters )
         throws Exception