You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by GitBox <gi...@apache.org> on 2018/06/27 21:06:54 UTC

[GitHub] asfgit closed pull request #55: Fix for SCM-805

asfgit closed pull request #55: Fix for SCM-805
URL: https://github.com/apache/maven-scm/pull/55
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 919f4a99c..06d374583 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 @@
 
     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 void setRemoteBranching( boolean remoteBranching )
         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 491d9409a..2db3d182c 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 @@
 
     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 void setRemoteTagging( boolean remoteTagging )
         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 2f61f5719..12aa150e5 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 @@
     @Parameter( property = "remoteBranching", defaultValue = "true" )
     private boolean remoteBranching;     
 
+    /**
+     * Currently only implemented with Subversion scm. 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 void execute()
 
             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 49a969edf..c091eaee7 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 @@
     @Parameter( property = "remoteTagging", defaultValue = "true" )
     private boolean remoteTagging;    
 
+    /**
+     * Currently only implemented with Subversion scm. 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 void execute()
 
             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-svn-commons/pom.xml b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml
index 6e9b1f9a9..1f2aff2fa 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml
@@ -66,7 +66,6 @@
           </execution>
         </executions>
         <configuration>
-          <version>1.1.0</version>
           <useJava5>true</useJava5>
           <models>
             <model>src/main/mdo/svn-settings.mdo</model>
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 7bdaa804c..5d5e32d77 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.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 static Commandline createCommandLine( SvnScmProviderRepository repository
     {
         ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
         scmBranchParameters.setRemoteBranching( false );
+        scmBranchParameters.setPinExternals( false );
         return createCommandLine( repository, workingDirectory, branch, messageFile, scmBranchParameters );
     }
     
@@ -187,6 +189,11 @@ public static Commandline createCommandLine( SvnScmProviderRepository repository
 
         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 cdcb44fe4..668d2a11b 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
@@ -40,6 +40,7 @@
 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;
@@ -64,6 +65,7 @@ public ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fileS
         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 +80,7 @@ public ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fileS
             getLogger().debug( "SvnTagCommand :: scmTagParameters is null create an empty one" );
             scmTagParameters = new ScmTagParameters();
             scmTagParameters.setRemoteTagging( false );
+            scmTagParameters.setPinExternals( false );
         }
         else
         {
@@ -251,6 +254,10 @@ public static Commandline createCommandLine( SvnScmProviderRepository repository
 
         }
 
+        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 5dac3c5ef..0cc7dd483 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 void testBranchUserNameSvnHttpsRemoteBranchingWithRev()
 
         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 void testBranchUserNameSvnHttpsRemoteBranchingWithRev()
                          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 void testBranchUserNameSvnHttpsRemoteBranchingNoRev()
 
         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 d438039a2..a05aea073 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 void testTagRemoteTagHttps()
 
         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 void testTagRemoteTagHttpsWithRevision()
 
         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 void testTagRemoteTagHttpsWithRevision()
                          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


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services