Got svn repo provider working

Project: http://git-wip-us.apache.org/repos/asf/commons-release-plugin/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/commons-release-plugin/commit/2a3a8823
Tree: 
http://git-wip-us.apache.org/repos/asf/commons-release-plugin/tree/2a3a8823
Diff: 
http://git-wip-us.apache.org/repos/asf/commons-release-plugin/diff/2a3a8823

Branch: refs/heads/master
Commit: 2a3a88238a95397331e35fb98670240575a4bea9
Parents: 7cc0bd9
Author: Rob Tompkins <[email protected]>
Authored: Tue Jan 2 11:27:21 2018 -0500
Committer: Rob Tompkins <[email protected]>
Committed: Tue Jan 2 11:28:55 2018 -0500

----------------------------------------------------------------------
 pom.xml                                         |  24 +++-
 .../commons/release/plugin/SharedFunctions.java |  20 ++-
 .../plugin/handler/DistributionScmHandler.java  | 122 ++++++++++++++++++-
 .../release/plugin/handler/package-info.java    |  16 +++
 .../CommonsDistributionDetatchmentMojo.java     |   3 +-
 .../mojos/CommonsDistributionStagingMojo.java   |  70 ++++++++++-
 .../mojos/CommonsSiteCompressionMojo.java       |  18 ++-
 7 files changed, 261 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/2a3a8823/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 1d8f463..c79db7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,7 +43,8 @@
 
   <scm>
     
<connection>scm:git:http://git-wip-us.apache.org/repos/asf/commons-release-plugin.git</connection>
-    
<developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/commons-release-plugin.git</developerConnection>
+    
<developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/commons-release-plugin.git
+    </developerConnection>
     
<url>https://git-wip-us.apache.org/repos/asf?p=commons-release-plugin.git</url>
   </scm>
 
@@ -97,9 +98,24 @@
       <version>2.2.1</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.maven.wagon</groupId>
-      <artifactId>wagon-provider-api</artifactId>
-      <version>3.0.0</version>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-api</artifactId>
+      <version>1.9.5</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-provider-svnexe</artifactId>
+      <version>1.9.5</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-provider-svn-commons</artifactId>
+      <version>1.9.5</version>
+    </dependency>
+    <dependency>
+      <groupId>org.sonatype.plexus</groupId>
+      <artifactId>plexus-sec-dispatcher</artifactId>
+      <version>1.4</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.wagon</groupId>

http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/2a3a8823/src/main/java/org/apache/commons/release/plugin/SharedFunctions.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/release/plugin/SharedFunctions.java 
b/src/main/java/org/apache/commons/release/plugin/SharedFunctions.java
index 238d58b..60f2db9 100644
--- a/src/main/java/org/apache/commons/release/plugin/SharedFunctions.java
+++ b/src/main/java/org/apache/commons/release/plugin/SharedFunctions.java
@@ -1,3 +1,19 @@
+/*
+ * 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.
+ */
 package org.apache.commons.release.plugin;
 
 import org.apache.maven.plugin.MojoExecutionException;
@@ -26,13 +42,13 @@ public class SharedFunctions {
      * @param log is the maven log for output logging, particularly in regards 
to error management.
      * @param workingDirectory is a {@link File} that represents the directory 
to first attempt to delete then create.
      */
-    public static void initWorkingDirectory(Log log, File workingDirectory) 
throws MojoExecutionException {
+    public static void initDirectory(Log log, File workingDirectory) throws 
MojoExecutionException {
         if (workingDirectory.exists()) {
             try {
                 FileUtils.deleteDirectory(workingDirectory);
             } catch (IOException e) {
                 log.error(e.getMessage());
-                throw new MojoExecutionException("Unable to remove working 
directory: " + e.getMessage(), e);
+                throw new MojoExecutionException("Unable to remove directory: 
" + e.getMessage(), e);
             }
         }
         if (!workingDirectory.exists()) {

http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/2a3a8823/src/main/java/org/apache/commons/release/plugin/handler/DistributionScmHandler.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/release/plugin/handler/DistributionScmHandler.java
 
b/src/main/java/org/apache/commons/release/plugin/handler/DistributionScmHandler.java
index 0a841f9..4762dae 100644
--- 
a/src/main/java/org/apache/commons/release/plugin/handler/DistributionScmHandler.java
+++ 
b/src/main/java/org/apache/commons/release/plugin/handler/DistributionScmHandler.java
@@ -1,11 +1,131 @@
+/*
+ * 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.
+ */
 package org.apache.commons.release.plugin.handler;
 
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.StringUtils;
+import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
+import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;
+
 import java.io.File;
 
-public class DistributionScmHandler {
+@Component(role= DistributionScmHandler.class, instantiationStrategy = 
"singleton" )
+public class DistributionScmHandler extends AbstractLogEnabled {
+
+    /**
+     * The SCM manager.
+     */
+    @Requirement
+    private ScmManager scmManager;
+
+    /**
+     * When this plugin requires Maven 3.0 as minimum, this component can be 
removed and o.a.m.s.c.SettingsDecrypter be
+     * used instead.
+     */
+    @Requirement(hint = "mng-4384")
+    private SecDispatcher secDispatcher;
 
     public void checkoutDirectory(String scmUrl, File checkoutRootDirectory) {
 
     }
 
+    public ScmRepository getConfiguredRepository(String url,
+                                                 String username,
+                                                 String password,
+                                                 String privateKey,
+                                                 String passphrase,
+                                                 Settings settings)
+            throws ScmRepositoryException, NoSuchScmProviderException {
+        ScmRepository repository = scmManager.makeScmRepository(url);
+        ScmProviderRepository scmRepo = repository.getProviderRepository();
+        //MRELEASE-76
+        scmRepo.setPersistCheckout(false);
+        if (settings != null) {
+            Server server = null;
+            if (server == null && repository.getProviderRepository() 
instanceof ScmProviderRepositoryWithHost) {
+                ScmProviderRepositoryWithHost repositoryWithHost =
+                        (ScmProviderRepositoryWithHost) 
repository.getProviderRepository();
+                String host = repositoryWithHost.getHost();
+                int port = repositoryWithHost.getPort();
+                if (port > 0) {
+                    host += ":" + port;
+                }
+                // TODO: this is a bit dodgy - id is not host, but since we 
don't have a <host> field we make an assumption
+                server = settings.getServer(host);
+            }
+
+            if (server != null) {
+                if (username == null) {
+                    username = server.getUsername();
+                }
+                if (password == null) {
+                    password = decrypt(server.getPassword(), server.getId());
+                }
+                if (privateKey == null) {
+                    privateKey = server.getPrivateKey();
+                }
+                if (passphrase == null) {
+                    passphrase = decrypt(server.getPassphrase(), 
server.getId());
+                }
+            }
+        }
+        if (!StringUtils.isEmpty(username)) {
+            scmRepo.setUser(username);
+        }
+        if (!StringUtils.isEmpty(password)) {
+            scmRepo.setPassword(password);
+        }
+        if (scmRepo instanceof ScmProviderRepositoryWithHost) {
+            ScmProviderRepositoryWithHost repositoryWithHost = 
(ScmProviderRepositoryWithHost) scmRepo;
+            if (!StringUtils.isEmpty(privateKey)) {
+                repositoryWithHost.setPrivateKey(privateKey);
+            }
+            if (!StringUtils.isEmpty(passphrase)) {
+                repositoryWithHost.setPassphrase(passphrase);
+            }
+        }
+        return repository;
+    }
+
+    private String decrypt(String str, String server) {
+        try {
+            return secDispatcher.decrypt(str);
+        } catch (SecDispatcherException e) {
+            String msg =
+                    "Failed to decrypt password/passphrase for server " + 
server + ", using auth token as is: "
+                            + e.getMessage();
+            if (getLogger().isDebugEnabled()) {
+                getLogger().warn(msg, e);
+            } else {
+                getLogger().warn(msg);
+            }
+            return str;
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/2a3a8823/src/main/java/org/apache/commons/release/plugin/handler/package-info.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/release/plugin/handler/package-info.java 
b/src/main/java/org/apache/commons/release/plugin/handler/package-info.java
index 064b55a..6f97164 100644
--- a/src/main/java/org/apache/commons/release/plugin/handler/package-info.java
+++ b/src/main/java/org/apache/commons/release/plugin/handler/package-info.java
@@ -1 +1,17 @@
+/*
+ * 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.
+ */
 package org.apache.commons.release.plugin.handler;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/2a3a8823/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionDetatchmentMojo.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionDetatchmentMojo.java
 
b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionDetatchmentMojo.java
index 1d6d54e..c8ed139 100644
--- 
a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionDetatchmentMojo.java
+++ 
b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionDetatchmentMojo.java
@@ -26,7 +26,6 @@ import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.AttachedArtifact;
-import org.codehaus.plexus.util.FileUtils;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -92,7 +91,7 @@ public class CommonsDistributionDetatchmentMojo extends 
AbstractMojo {
             project.getAttachedArtifacts().remove(artifactToRemove);
         }
         if (!workingDirectory.exists()) {
-            SharedFunctions.initWorkingDirectory(getLog(), workingDirectory);
+            SharedFunctions.initDirectory(getLog(), workingDirectory);
         }
         copyRemovedArtifactsToWorkingDirectory();
         getLog().info("");

http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/2a3a8823/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
 
b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
index b4741f2..327d8c5 100644
--- 
a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
+++ 
b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
@@ -1,25 +1,91 @@
+/*
+ * 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.
+ */
 package org.apache.commons.release.plugin.mojos;
 
+import org.apache.commons.release.plugin.SharedFunctions;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.scm.manager.BasicScmManager;
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+import org.apache.maven.settings.Settings;
 
 import java.io.File;
 
 @Mojo( name = "stage-distributions", defaultPhase = LifecyclePhase.DEPLOY, 
threadSafe = true)
 public class CommonsDistributionStagingMojo extends AbstractMojo {
 
+    /**
+     */
+    @Parameter( defaultValue = "${settings}", readonly = true, required = true 
)
+    private Settings settings;
+
+    /**
+     */
     @Parameter( defaultValue = 
"${project.build.directory}/commons-release-plugin", alias = "outputDirectory" )
     private File workingDirectory;
 
+    /**
+     */
+    @Parameter( defaultValue = 
"${project.build.directory}/commons-release-plugin/scm", alias = 
"outputDirectory" )
+    private File distCheckoutDirectory;
+
+    /**
+     */
     @Parameter ( required = true )
-    private String distScmStagingUrl;
+    private String distSvnStagingUrl;
+
+    /**
+     * The SCM username to use.
+     */
+    @Parameter( property = "username" )
+    private String username;
+
+    /**
+     * The SCM password to use.
+     */
+    @Parameter( property = "password" )
+    private String password;
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
-
+        try {
+            ScmManager scmManager = new BasicScmManager();
+            scmManager.setScmProvider("svn", new SvnExeScmProvider());
+            ScmRepository repository = 
scmManager.makeScmRepository(distSvnStagingUrl);
+            if (!workingDirectory.exists()) {
+                SharedFunctions.initDirectory(getLog(), workingDirectory);
+            }
+            if (!distCheckoutDirectory.exists()) {
+                SharedFunctions.initDirectory(getLog(), distCheckoutDirectory);
+            }
+        } catch (ScmRepositoryException e) {
+            getLog().error("Failed getting scm repository: " + 
distSvnStagingUrl, e);
+            throw new MojoExecutionException("Failed getting scm repository: " 
+ distSvnStagingUrl, e);
+        } catch (NoSuchScmProviderException e) {
+            getLog().error("No Scm Provider For: " + distSvnStagingUrl, e);
+            throw new MojoExecutionException("No Scm Provider For: " + 
distSvnStagingUrl, e);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/2a3a8823/src/main/java/org/apache/commons/release/plugin/mojos/CommonsSiteCompressionMojo.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsSiteCompressionMojo.java
 
b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsSiteCompressionMojo.java
index 5812061..c030f90 100644
--- 
a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsSiteCompressionMojo.java
+++ 
b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsSiteCompressionMojo.java
@@ -1,3 +1,19 @@
+/*
+ * 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.
+ */
 package org.apache.commons.release.plugin.mojos;
 
 import org.apache.commons.compress.archivers.zip.ParallelScatterZipCreator;
@@ -44,7 +60,7 @@ public class CommonsSiteCompressionMojo extends AbstractMojo {
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         if (!workingDirectory.exists()) {
-            SharedFunctions.initWorkingDirectory(getLog(), workingDirectory);
+            SharedFunctions.initDirectory(getLog(), workingDirectory);
         }
         try {
             filesToCompress = new ArrayList<>();

Reply via email to