Repository: commons-release-plugin
Updated Branches:
  refs/heads/master c315ce0ce -> 462dffabe


COMMONSSITE-123: introduce configuration parameter to perfom distribution 
checkin using Maven settings server credentials


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/462dffab
Tree: 
http://git-wip-us.apache.org/repos/asf/commons-release-plugin/tree/462dffab
Diff: 
http://git-wip-us.apache.org/repos/asf/commons-release-plugin/diff/462dffab

Branch: refs/heads/master
Commit: 462dffabe3c0c01a99fea2dffdc59067059cea02
Parents: c315ce0
Author: Matt Benson <mben...@apache.org>
Authored: Thu Aug 30 14:19:44 2018 -0500
Committer: Matt Benson <mben...@apache.org>
Committed: Thu Aug 30 14:19:44 2018 -0500

----------------------------------------------------------------------
 .../mojos/CommonsDistributionStagingMojo.java   | 43 +++++++++++++++++++-
 .../stage-distributions/stage-distributions.xml |  1 +
 2 files changed, 42 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/462dffab/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 6221c34..2846352 100755
--- 
a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
+++ 
b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
@@ -25,6 +25,7 @@ import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
@@ -37,9 +38,15 @@ import 
org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.manager.BasicScmManager;
 import org.apache.maven.scm.manager.ScmManager;
 import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
 import org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider;
 import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest;
+import org.apache.maven.settings.crypto.SettingsDecrypter;
+import org.apache.maven.settings.crypto.SettingsDecryptionResult;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -49,6 +56,7 @@ import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * This class checks out the dev distribution location, copies the 
distributions into that directory
@@ -143,6 +151,13 @@ public class CommonsDistributionStagingMojo extends 
AbstractMojo {
     private String commonsRcVersion;
 
     /**
+     * The ID of the server (specified in settings.xml) which should be used 
for dist authentication.
+     * This will be used in preference to {@link #username}/{@link #password}.
+     */
+    @Parameter(property = "commons.distServer")
+    private String distServer;
+
+    /**
      * The username for the distribution subversion repository. This is 
typically your Apache id.
      */
     @Parameter(property = "user.name")
@@ -155,6 +170,18 @@ public class CommonsDistributionStagingMojo extends 
AbstractMojo {
     private String password;
 
     /**
+     * Maven {@link Settings}.
+     */
+    @Parameter(defaultValue = "${settings}", readonly = true, required = true)
+    private Settings settings;
+
+    /**
+     * Maven {@link SettingsDecrypter} component.
+     */
+    @Component
+    private SettingsDecrypter settingsDecrypter;
+
+    /**
      * A subdirectory of the dist directory into which we are going to stage 
the release candidate. We
      * build this up in the {@link CommonsDistributionStagingMojo#execute()} 
method. And, for example,
      * the directory should look like 
<code>https://https://dist.apache.org/repos/dist/dev/commons/text/1.4-RC1</code>.
@@ -183,8 +210,7 @@ public class CommonsDistributionStagingMojo extends 
AbstractMojo {
             ScmRepository repository = 
scmManager.makeScmRepository(distSvnStagingUrl);
             ScmProvider provider = 
scmManager.getProviderByRepository(repository);
             SvnScmProviderRepository providerRepository = 
(SvnScmProviderRepository) repository.getProviderRepository();
-            providerRepository.setUser(username);
-            providerRepository.setPassword(password);
+            setAuthentication(providerRepository);
             distVersionRcVersionDirectory =
                     new File(distCheckoutDirectory, commonsReleaseVersion + 
"-" + commonsRcVersion);
             if (!distCheckoutDirectory.exists()) {
@@ -456,4 +482,17 @@ public class CommonsDistributionStagingMojo extends 
AbstractMojo {
     protected void setBaseDir(File baseDir) {
         this.baseDir = baseDir;
     }
+
+    /**
+     * Set authentication information on the specified {@link 
ScmProviderRepository}.
+     * @param providerRepository target
+     */
+    private void setAuthentication(ScmProviderRepository providerRepository) {
+        Optional<Server> server =
+            
Optional.ofNullable(distServer).map(settings::getServer).map(DefaultSettingsDecryptionRequest::new)
+                
.map(settingsDecrypter::decrypt).map(SettingsDecryptionResult::getServer);
+
+        
providerRepository.setUser(server.map(Server::getUsername).orElse(username));
+        
providerRepository.setPassword(server.map(Server::getPassword).orElse(password));
+    }
 }

http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/462dffab/src/test/resources/mojos/stage-distributions/stage-distributions.xml
----------------------------------------------------------------------
diff --git 
a/src/test/resources/mojos/stage-distributions/stage-distributions.xml 
b/src/test/resources/mojos/stage-distributions/stage-distributions.xml
index b8ad1ca..852bbf0 100755
--- a/src/test/resources/mojos/stage-distributions/stage-distributions.xml
+++ b/src/test/resources/mojos/stage-distributions/stage-distributions.xml
@@ -43,6 +43,7 @@
                 <artifactId>commons-release-plugin</artifactId>
                 <configuration>
                     <project 
implementation="org.apache.commons.release.plugin.stubs.DistributionDetachmentProjectStub"
 />
+                    <settings 
implementation="org.apache.maven.settings.Settings" />
                     
<workingDirectory>target/testing-commons-release-plugin</workingDirectory>
                     
<distCheckoutDirectory>target/testing-commons-release-plugin/scm</distCheckoutDirectory>
                     
<siteDirectory>${basedir}/target/test-classes/mojos/detach-distributions/target/site</siteDirectory>

Reply via email to