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 2018/01/13 15:43:33 UTC

[maven-release] branch master updated (2bef00a -> bea2313)

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

rfscholte pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/maven-release.git.


    from 2bef00a  Remove all overloaded methods from ReleaseManager, only use Release<Goal>Request
     new 047d09e  simplify code, replace iterators with foreach loops
     new bea2313  [MRELEASE-956] Release Strategy Interface

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../maven/shared/release/strategy/Strategy.java    |  68 +++++++++
 .../src/main/components-fragment.xml               |  15 +-
 .../shared/release/DefaultReleaseManager.java      | 160 +++++++++++++--------
 .../maven/shared/release/ReleaseManager.java       |   3 +-
 .../config/PropertiesReleaseDescriptorStore.java   |  42 +++---
 .../maven/shared/release/config/ReleaseUtils.java  |   3 +
 .../shared/release/strategies/DefaultStrategy.java | 112 +++++++++++++++
 .../src/main/mdo/release-descriptor.mdo            |   9 ++
 .../shared/release/DefaultReleaseManagerTest.java  |   5 +-
 .../release/phase/AbstractReleaseTestCase.java     |  19 +--
 .../phase/CheckDependencySnapshotsPhaseTest.java   |   3 +-
 .../shared/release/DefaultReleaseManagerTest.xml   |  23 +++
 .../maven/plugins/release/AbstractReleaseMojo.java |  12 ++
 .../maven/plugins/release/CleanReleaseMojo.java    |  10 +-
 .../plugins/release/CleanReleaseMojoTest.java      |   5 +-
 .../plugins/release/PrepareReleaseMojoTest.java    |   3 -
 .../plugins/release/StageReleaseMojoTest.java      |   6 -
 17 files changed, 375 insertions(+), 123 deletions(-)
 create mode 100644 maven-release-api/src/main/java/org/apache/maven/shared/release/strategy/Strategy.java
 create mode 100644 maven-release-manager/src/main/java/org/apache/maven/shared/release/strategies/DefaultStrategy.java

-- 
To stop receiving notification emails like this one, please contact
['"commits@maven.apache.org" <co...@maven.apache.org>'].

[maven-release] 02/02: [MRELEASE-956] Release Strategy Interface

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit bea23130c9cf66fbc21061822d185b331a2c93b3
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Jan 13 16:43:25 2018 +0100

    [MRELEASE-956] Release Strategy Interface
---
 .../maven/shared/release/strategy/Strategy.java    |  68 +++++++++
 .../src/main/components-fragment.xml               |  15 +-
 .../shared/release/DefaultReleaseManager.java      | 160 +++++++++++++--------
 .../maven/shared/release/ReleaseManager.java       |   3 +-
 .../config/PropertiesReleaseDescriptorStore.java   |   8 ++
 .../maven/shared/release/config/ReleaseUtils.java  |   3 +
 .../shared/release/strategies/DefaultStrategy.java | 112 +++++++++++++++
 .../src/main/mdo/release-descriptor.mdo            |   9 ++
 .../shared/release/DefaultReleaseManagerTest.java  |   5 +-
 .../shared/release/DefaultReleaseManagerTest.xml   |  23 +++
 .../maven/plugins/release/AbstractReleaseMojo.java |  12 ++
 .../maven/plugins/release/CleanReleaseMojo.java    |  10 +-
 .../plugins/release/CleanReleaseMojoTest.java      |   5 +-
 .../plugins/release/PrepareReleaseMojoTest.java    |   3 -
 .../plugins/release/StageReleaseMojoTest.java      |   6 -
 15 files changed, 357 insertions(+), 85 deletions(-)

diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/strategy/Strategy.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/strategy/Strategy.java
new file mode 100644
index 0000000..faca146
--- /dev/null
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/strategy/Strategy.java
@@ -0,0 +1,68 @@
+package org.apache.maven.shared.release.strategy;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+/**
+ * Interface to override default strategy.
+ * 
+ * If a method returns {@code null}, the default will be used, otherwise the provided collection of phaseIds  
+ * 
+ * @author Robert Scholte
+ * @since 3.0.0
+ */
+public interface Strategy
+{
+    /**
+     * The release phases to execute the calling the prepare goal 
+     * 
+     * @return
+     */
+    List<String> getPreparePhases();
+    
+    /**
+     * The release phases to execute the calling the perform goal 
+     * 
+     * @return
+     */
+    List<String> getPerformPhases();
+    
+    /**
+     * The release phases to execute the calling the branch goal 
+     * 
+     * @return
+     */
+    List<String> getBranchPhases();
+    
+    /**
+     * The release phases to execute the calling the rollback goal 
+     * 
+     * @return
+     */
+    List<String> getRollbackPhases();
+    
+    /**
+     * The release phases to execute the calling the update-versions goal 
+     * 
+     * @return
+     */
+    List<String> getUpdateVersionsPhases();
+}
diff --git a/maven-release-manager/src/main/components-fragment.xml b/maven-release-manager/src/main/components-fragment.xml
index 92ebfd3..6f156e9 100644
--- a/maven-release-manager/src/main/components-fragment.xml
+++ b/maven-release-manager/src/main/components-fragment.xml
@@ -21,20 +21,9 @@
 <component-set>
   <components>
     <component>
-      <role>org.apache.maven.shared.release.ReleaseManager</role>
+      <role>org.apache.maven.shared.release.strategy.Strategy</role>
       <role-hint>default</role-hint>
-      <implementation>org.apache.maven.shared.release.DefaultReleaseManager</implementation>
-      <requirements>
-        <requirement>
-          <role>org.apache.maven.shared.release.phase.ReleasePhase</role>
-          <field-name>releasePhases</field-name>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.shared.release.config.ReleaseDescriptorStore</role>
-          <role-hint>properties</role-hint>
-          <field-name>configStore</field-name>
-        </requirement>
-      </requirements>
+      <implementation>org.apache.maven.shared.release.strategies.DefaultStrategy</implementation>
       <configuration>
         <preparePhases>
           <phase>check-poms</phase>
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
index c6e45f5..ad93daa 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
@@ -20,7 +20,6 @@ package org.apache.maven.shared.release;
  */
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -32,6 +31,9 @@ import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.config.ReleaseDescriptorStore;
 import org.apache.maven.shared.release.config.ReleaseDescriptorStoreException;
 import org.apache.maven.shared.release.phase.ReleasePhase;
+import org.apache.maven.shared.release.strategy.Strategy;
+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;
 
@@ -40,46 +42,27 @@ import org.codehaus.plexus.util.StringUtils;
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */
+@Component( role = ReleaseManager.class )
 public class DefaultReleaseManager
     extends AbstractLogEnabled
     implements ReleaseManager
 {
-    /**
-     * The phases of release to run, and in what order.
-     */
-    private List<String> preparePhases;
-
-    /**
-     * The phases of release to run to perform.
-     */
-    private List<String> performPhases;
-
-    /**
-     * The phases of release to run to rollback changes
-     */
-    private List<String> rollbackPhases;
-
-    /**
-     * The phases to create a branch.
-     */
-    private List<String> branchPhases;
-
-    /**
-     * The phases to create update versions.
-     */
-    private List<String> updateVersionsPhases;
+    @Requirement
+    private Map<String, Strategy> strategies;
 
     /**
      * The available phases.
      */
+    @Requirement
     private Map<String, ReleasePhase> releasePhases;
 
     /**
      * The configuration storage.
      */
+    @Requirement( hint = "properties" )
     private ReleaseDescriptorStore configStore;
 
-    private static final int PHASE_SKIP = 0, PHASE_START = 1, PHASE_END = 2, GOAL_START = 11, GOAL_END = 12, ERROR = 99;
+    private static final int PHASE_SKIP = 0, PHASE_START = 1, PHASE_END = 2, GOAL_END = 12, ERROR = 99;
 
     @Override
     public ReleaseResult prepareWithResult( ReleasePrepareRequest prepareRequest )
@@ -116,8 +99,6 @@ public class DefaultReleaseManager
     private void prepare( ReleasePrepareRequest prepareRequest, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        updateListener( prepareRequest.getReleaseManagerListener(), "prepare", GOAL_START );
-
         ReleaseDescriptor config;
         if ( BooleanUtils.isNotFalse( prepareRequest.getResume() ) )
         {
@@ -129,6 +110,12 @@ public class DefaultReleaseManager
             config = prepareRequest.getReleaseDescriptor();
         }
 
+        Strategy releaseStrategy = getStrategy( config.getReleaseStrategyId() );
+
+        List<String> preparePhases = getGoalPhases( releaseStrategy, "prepare" );
+
+        goalStart( prepareRequest.getReleaseManagerListener(), "prepare", preparePhases );
+
         // Later, it would be a good idea to introduce a proper workflow tool so that the release can be made up of a
         // more flexible set of steps.
 
@@ -209,10 +196,14 @@ public class DefaultReleaseManager
     public void rollback( ReleaseRollbackRequest rollbackRequest )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        updateListener( rollbackRequest.getReleaseManagerListener(), "rollback", GOAL_START );
-
         ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( rollbackRequest.getReleaseDescriptor(), null );
 
+        Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+        List<String> rollbackPhases = getGoalPhases( releaseStrategy, "rollback" );
+
+        goalStart( rollbackRequest.getReleaseManagerListener(), "rollback", rollbackPhases );
+
         for ( String name : rollbackPhases )
         {
             ReleasePhase phase = releasePhases.get( name );
@@ -269,11 +260,15 @@ public class DefaultReleaseManager
     private void perform( ReleasePerformRequest performRequest, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        updateListener( performRequest.getReleaseManagerListener(), "perform", GOAL_START );
-
         ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( performRequest.getReleaseDescriptor(),
                                                                      performRequest.getReleaseManagerListener() );
 
+        Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+        List<String> performPhases = getGoalPhases( releaseStrategy, "perform" );
+
+        goalStart( performRequest.getReleaseManagerListener(), "perform", performPhases );
+
         for ( String name : performPhases )
         {
             ReleasePhase phase = releasePhases.get( name );
@@ -328,10 +323,14 @@ public class DefaultReleaseManager
         ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( branchRequest.getReleaseDescriptor(),
                                                                      branchRequest.getReleaseManagerListener() );
 
-        updateListener( branchRequest.getReleaseManagerListener(), "branch", GOAL_START );
-
         boolean dryRun = BooleanUtils.isTrue( branchRequest.getDryRun() );
 
+        Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+        List<String> branchPhases = getGoalPhases( releaseStrategy, "branch" );
+
+        goalStart( branchRequest.getReleaseManagerListener(), "branch", branchPhases );
+
         for ( String name : branchPhases )
         {
             ReleasePhase phase = releasePhases.get( name );
@@ -370,11 +369,15 @@ public class DefaultReleaseManager
     public void updateVersions( ReleaseUpdateVersionsRequest updateVersionsRequest )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        updateListener( updateVersionsRequest.getReleaseManagerListener(), "updateVersions", GOAL_START );
-
         ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( updateVersionsRequest.getReleaseDescriptor(),
                                                                    updateVersionsRequest.getReleaseManagerListener() );
 
+        Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+        List<String> updateVersionsPhases = getGoalPhases( releaseStrategy, "updateVersions" );
+
+        goalStart( updateVersionsRequest.getReleaseManagerListener(), "updateVersions", updateVersionsPhases );
+
         for ( String name : updateVersionsPhases )
         {
             ReleasePhase phase = releasePhases.get( name );
@@ -438,7 +441,7 @@ public class DefaultReleaseManager
     }
 
     
-    protected void clean( AbstractReleaseRequest releaseRequest  )
+    protected void clean( AbstractReleaseRequest releaseRequest  ) throws ReleaseFailureException
     {
         ReleaseCleanRequest cleanRequest = new ReleaseCleanRequest();
         cleanRequest.setReleaseDescriptor( releaseRequest.getReleaseDescriptor() );
@@ -449,15 +452,21 @@ public class DefaultReleaseManager
     }
 
     @Override
-    public void clean( ReleaseCleanRequest cleanRequest )
+    public void clean( ReleaseCleanRequest cleanRequest ) throws ReleaseFailureException
     {
         updateListener( cleanRequest.getReleaseManagerListener(), "cleanup", PHASE_START );
 
         getLogger().info( "Cleaning up after release..." );
 
-        configStore.delete( cleanRequest.getReleaseDescriptor() );
-        Set<String> phases = new LinkedHashSet<>( preparePhases );
-        phases.addAll( branchPhases );
+        ReleaseDescriptor releaseDescriptor = cleanRequest.getReleaseDescriptor();
+
+        configStore.delete( releaseDescriptor );
+
+        Strategy releaseStrategy = getStrategy( releaseDescriptor.getReleaseStrategyId() );
+
+        Set<String> phases = new LinkedHashSet<>();
+        phases.addAll( getGoalPhases( releaseStrategy, "prepare" ) );
+        phases.addAll( getGoalPhases( releaseStrategy, "branch" ) );
 
         for ( String name : phases )
         {
@@ -474,15 +483,20 @@ public class DefaultReleaseManager
         this.configStore = configStore;
     }
 
+    void goalStart( ReleaseManagerListener listener, String goal, List<String> phases )
+    {
+        if ( listener != null )
+        {
+            listener.goalStart( goal, phases );
+        }
+    }
+
     void updateListener( ReleaseManagerListener listener, String name, int state )
     {
         if ( listener != null )
         {
             switch ( state )
             {
-                case GOAL_START:
-                    listener.goalStart( name, getGoalPhases( name ) );
-                    break;
                 case GOAL_END:
                     listener.goalEnd();
                     break;
@@ -501,29 +515,63 @@ public class DefaultReleaseManager
         }
     }
 
-    private List<String> getGoalPhases( String name )
+    private Strategy getStrategy( String strategyId ) throws ReleaseFailureException
     {
-        List<String> phases = new ArrayList<>();
+        Strategy strategy = strategies.get( strategyId );
+        if ( strategy == null )
+        {
+            throw new ReleaseFailureException( "Unknown strategy: " + strategyId );
+        }
+        return strategy;
+    }
 
-        if ( "prepare".equals( name ) )
+    private List<String> getGoalPhases( Strategy strategy, String goal )
+    {
+        List<String> phases;
+
+        if ( "prepare".equals( goal ) )
         {
-            phases.addAll( preparePhases );
+            phases = strategy.getPreparePhases();
+            if ( phases  == null )
+            {
+                phases = strategies.get( "default" ).getPreparePhases();
+            }
         }
-        else if ( "perform".equals( name ) )
+        else if ( "perform".equals( goal ) )
         {
-            phases.addAll( performPhases );
+            phases = strategy.getPerformPhases();
+            if ( phases  == null )
+            {
+                phases = strategies.get( "default" ).getPerformPhases();
+            }
         }
-        else if ( "rollback".equals( name ) )
+        else if ( "rollback".equals( goal ) )
         {
-            phases.addAll( rollbackPhases );
+            phases = strategy.getRollbackPhases();
+            if ( phases  == null )
+            {
+                phases = strategies.get( "default" ).getRollbackPhases();
+            }
         }
-        else if ( "branch".equals( name ) )
+        else if ( "branch".equals( goal ) )
         {
-            phases.addAll( branchPhases );
+            phases = strategy.getBranchPhases();
+            if ( phases  == null )
+            {
+                phases = strategies.get( "default" ).getBranchPhases();
+            }
         }
-        else if ( "updateVersions".equals( name ) )
+        else if ( "updateVersions".equals( goal ) )
+        {
+            phases = strategy.getUpdateVersionsPhases();
+            if ( phases  == null )
+            {
+                phases = strategies.get( "default" ).getUpdateVersionsPhases();
+            }
+        }
+        else
         {
-            phases.addAll( updateVersionsPhases );
+            phases = null;
         }
 
         return Collections.unmodifiableList( phases );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
index d8ceb56..cab46b2 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
@@ -55,9 +55,10 @@ public interface ReleaseManager
      * Clean a release.
      *
      * @param cleanRequest all clean arguments
+     * @throws ReleaseFailureException 
      * @since 2.3
      */
-    void clean( ReleaseCleanRequest cleanRequest );
+    void clean( ReleaseCleanRequest cleanRequest ) throws ReleaseFailureException;
 
     /**
      * Rollback changes made by the previous release
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 8162b5f..673ca9b 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
@@ -223,6 +223,14 @@ public class PropertiesReleaseDescriptorStore
         {
             properties.setProperty( "projectVersionPolicyId", config.getProjectVersionPolicyId() );
         }
+        if ( config.getProjectNamingPolicyId() != null )
+        {
+            properties.setProperty( "projectNamingPolicyId", config.getProjectNamingPolicyId() );
+        }
+        if ( config.getReleaseStrategyId() != null )
+        {
+            properties.setProperty( "releaseStrategyId", config.getReleaseStrategyId() );
+        }
 
         properties.setProperty( "exec.snapshotReleasePluginAllowed",
                                 Boolean.toString( config.isSnapshotReleasePluginAllowed() ) );
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 54fc026..743b062 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
@@ -125,6 +125,8 @@ public class ReleaseUtils
                                                            toBeMerged.getProjectVersionPolicyId() ) );
         mergeInto.setProjectNamingPolicyId( mergeDefault( mergeInto.getProjectNamingPolicyId(),
                                                           toBeMerged.getProjectNamingPolicyId() ) );
+        mergeInto.setReleaseStrategyId( mergeOverride( mergeInto.getReleaseStrategyId(),
+                                                          toBeMerged.getReleaseStrategyId() ) );
 
         return mergeInto;
     }
@@ -166,6 +168,7 @@ public class ReleaseUtils
         releaseDescriptor.setCompletionGoals( properties.getProperty( "completionGoals" ) );
         releaseDescriptor.setProjectVersionPolicyId( properties.getProperty( "projectVersionPolicyId" ) );
         releaseDescriptor.setProjectNamingPolicyId( properties.getProperty( "projectNamingPolicyId" ) );
+        releaseDescriptor.setReleaseStrategyId( properties.getProperty( "releaseStrategyId" ) );
         String snapshotReleasePluginAllowedStr = properties.getProperty( "exec.snapshotReleasePluginAllowed" );
         releaseDescriptor.setSnapshotReleasePluginAllowed( snapshotReleasePluginAllowedStr == null
                                                                ? false
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/strategies/DefaultStrategy.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/strategies/DefaultStrategy.java
new file mode 100644
index 0000000..ad5c1ee
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/strategies/DefaultStrategy.java
@@ -0,0 +1,112 @@
+package org.apache.maven.shared.release.strategies;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.shared.release.strategy.Strategy;
+
+/**
+ * 
+ * @author Robert Scholte
+ * @since 3.0.0
+ */
+public class DefaultStrategy implements Strategy
+{
+    /**
+     * The phases of release to run, and in what order.
+     */
+    private List<String> preparePhases;
+
+    /**
+     * The phases of release to run to perform.
+     */
+    private List<String> performPhases;
+
+    /**
+     * The phases of release to run to rollback changes
+     */
+    private List<String> rollbackPhases;
+
+    /**
+     * The phases to create a branch.
+     */
+    private List<String> branchPhases;
+
+    /**
+     * The phases to create update versions.
+     */
+    private List<String> updateVersionsPhases;
+
+    @Override
+    public List<String> getPreparePhases()
+    {
+        return preparePhases;
+    }
+
+    public void setPreparePhases( List<String> preparePhases )
+    {
+        this.preparePhases = preparePhases;
+    }
+
+    @Override
+    public List<String> getPerformPhases()
+    {
+        return performPhases;
+    }
+
+    public void setPerformPhases( List<String> performPhases )
+    {
+        this.performPhases = performPhases;
+    }
+
+    @Override
+    public List<String> getRollbackPhases()
+    {
+        return rollbackPhases;
+    }
+
+    public void setRollbackPhases( List<String> rollbackPhases )
+    {
+        this.rollbackPhases = rollbackPhases;
+    }
+
+    @Override
+    public List<String> getBranchPhases()
+    {
+        return branchPhases;
+    }
+
+    public void setBranchPhases( List<String> branchPhases )
+    {
+        this.branchPhases = branchPhases;
+    }
+
+    @Override
+    public List<String> getUpdateVersionsPhases()
+    {
+        return updateVersionsPhases;
+    }
+
+    public void setUpdateVersionsPhases( List<String> updateVersionsPhases )
+    {
+        this.updateVersionsPhases = updateVersionsPhases;
+    }
+}
diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo
index c430cb1..6191087 100644
--- a/maven-release-manager/src/main/mdo/release-descriptor.mdo
+++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo
@@ -452,6 +452,15 @@
             The role-hint for the NamingPolicy implementation used to calculate the project branch and tag names.
           </description>
         </field>
+        <field>
+          <name>releaseStrategyId</name>
+          <version>3.0.0+</version>
+          <type>String</type>
+          <defaultValue>default</defaultValue>
+          <description>
+            The role-hint for the release Strategy implementation.
+          </description>
+        </field>
 
         <field>
           <name>remoteTagging</name>
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
index 43a935a..891934e 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
@@ -316,8 +316,11 @@ public class DefaultReleaseManagerTest
         ReleaseManager releaseManager = lookup( ReleaseManager.class, "bad-phase-configured" );
 
         ReleasePrepareRequest prepareRequest = new ReleasePrepareRequest();
-        prepareRequest.setReleaseDescriptor( new ReleaseDescriptor() );
+        ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
+        releaseDescriptor.setReleaseStrategyId( "foo" );
+        prepareRequest.setReleaseDescriptor( releaseDescriptor );
         prepareRequest.setReleaseEnvironment( new DefaultReleaseEnvironment() );
+        
         try
         {
             releaseManager.prepare( prepareRequest );
diff --git a/maven-release-manager/src/test/resources/org/apache/maven/shared/release/DefaultReleaseManagerTest.xml b/maven-release-manager/src/test/resources/org/apache/maven/shared/release/DefaultReleaseManagerTest.xml
index ff18c6a..01fbb8a 100644
--- a/maven-release-manager/src/test/resources/org/apache/maven/shared/release/DefaultReleaseManagerTest.xml
+++ b/maven-release-manager/src/test/resources/org/apache/maven/shared/release/DefaultReleaseManagerTest.xml
@@ -33,7 +33,16 @@
           <role-hint>stub</role-hint>
           <field-name>configStore</field-name>
         </requirement>
+        <requirement>
+          <role>org.apache.maven.shared.release.strategy.Strategy</role>
+          <field-name>strategies</field-name>
+        </requirement>
       </requirements>
+    </component>
+    <component>
+      <role>org.apache.maven.shared.release.strategy.Strategy</role>
+      <role-hint>default</role-hint>
+      <implementation>org.apache.maven.shared.release.strategies.DefaultStrategy</implementation>
       <configuration>
         <preparePhases>
           <phase>step1</phase>
@@ -70,6 +79,10 @@
           <role-hint>stub</role-hint>
           <field-name>configStore</field-name>
         </requirement>
+        <requirement>
+          <role>org.apache.maven.shared.release.strategy.Strategy</role>
+          <field-name>strategies</field-name>
+        </requirement>
       </requirements>
       <configuration>
         <preparePhases>
@@ -78,6 +91,16 @@
       </configuration>
     </component>
     <component>
+      <role>org.apache.maven.shared.release.strategy.Strategy</role>
+      <role-hint>foo</role-hint>
+      <implementation>org.apache.maven.shared.release.strategies.DefaultStrategy</implementation>
+      <configuration>
+        <preparePhases>
+          <phase>foo</phase>
+        </preparePhases>
+      </configuration>
+    </component>
+    <component>
       <role>org.apache.maven.shared.release.config.ReleaseDescriptorStore</role>
       <role-hint>stub</role-hint>
       <implementation>org.apache.maven.shared.release.config.ReleaseDescriptorStoreStub</implementation>
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
index faa9805..ed8b0d6 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
@@ -125,6 +125,16 @@ public abstract class AbstractReleaseMojo
     protected MavenSession session;
 
     /**
+     * The role-hint for the {@link org.apache.maven.shared.release.strategy.Strategy}
+     * implementation used to specify the phases per goal.
+     * 
+     * @since 3.0.0
+     * @see org.apache.maven.shared.release.strategies.DefaultStrategy
+     */
+    @Parameter( defaultValue = "default", property = "releaseStrategyId" )
+    private String releaseStrategyId;
+    
+    /**
      * Gets the enviroment settings configured for this release.
      *
      * @return The release environment, never <code>null</code>.
@@ -187,6 +197,8 @@ public abstract class AbstractReleaseMojo
             }
         }
         descriptor.setAdditionalArguments( args );
+        
+        descriptor.setReleaseStrategyId( releaseStrategyId );
 
         return descriptor;
     }
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
index 4ef5af8..186785b 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
@@ -23,6 +23,7 @@ import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.shared.release.ReleaseCleanRequest;
+import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 
 /**
@@ -50,7 +51,14 @@ public class CleanReleaseMojo
         cleanRequest.setReleaseDescriptor( releaseDescriptor );
         cleanRequest.setReactorProjects( getReactorProjects() );
         
-        releaseManager.clean( cleanRequest );
+        try
+        {
+            releaseManager.clean( cleanRequest );
+        }
+        catch ( ReleaseFailureException e )
+        {
+            throw new MojoFailureException( e.getMessage() );
+        }
     }
 
 }
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/CleanReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/CleanReleaseMojoTest.java
index 6cdd62d..2a972c3 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/CleanReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/CleanReleaseMojoTest.java
@@ -25,12 +25,9 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import java.io.File;
 
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.shared.release.ReleaseCleanRequest;
 import org.apache.maven.shared.release.ReleaseManager;
-import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.mockito.ArgumentCaptor;
 
 /**
@@ -57,7 +54,7 @@ public class CleanReleaseMojoTest
     }
 
     public void testClean()
-        throws MojoFailureException, MojoExecutionException
+        throws Exception
     {
         // prepare
         ArgumentCaptor<ReleaseCleanRequest> request = ArgumentCaptor.forClass( ReleaseCleanRequest.class );
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
index 76525d7..deca8a5 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
@@ -25,16 +25,13 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertThat;
 
-import static org.mockito.Matchers.eq;
 import static org.mockito.Matchers.isA;
-import static org.mockito.Matchers.isNull;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import java.io.File;
-import java.util.List;
 import java.util.Properties;
 
 import org.apache.maven.execution.MavenSession;
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
index 882bffa..6ea0bb2 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
@@ -19,15 +19,11 @@ package org.apache.maven.plugins.release;
  * under the License.
  */
 
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.isA;
-import static org.mockito.Matchers.isNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import java.io.File;
-import java.util.List;
 
 import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Site;
@@ -36,7 +32,6 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.release.ReleaseManager;
 import org.apache.maven.shared.release.ReleasePerformRequest;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
-import org.apache.maven.shared.release.env.ReleaseEnvironment;
 import org.mockito.ArgumentCaptor;
 
 /**
@@ -49,7 +44,6 @@ public class StageReleaseMojoTest
 {
     private File workingDirectory;
 
-    @SuppressWarnings( "unchecked" )
     public void testStage()
         throws Exception
     {

-- 
To stop receiving notification emails like this one, please contact
"commits@maven.apache.org" <co...@maven.apache.org>.

[maven-release] 01/02: simplify code, replace iterators with foreach loops

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 047d09e4868a4248e6b5acb72a70187bc926ce18
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Jan 12 22:50:46 2018 +0100

    simplify code, replace iterators with foreach loops
---
 .../config/PropertiesReleaseDescriptorStore.java   | 34 +++++++---------------
 .../release/phase/AbstractReleaseTestCase.java     | 19 ++++--------
 .../phase/CheckDependencySnapshotsPhaseTest.java   |  3 +-
 3 files changed, 18 insertions(+), 38 deletions(-)

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 9498e42..8162b5f 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
@@ -26,11 +26,8 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.Iterator;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Properties;
-import java.util.Set;
 
 import org.apache.maven.model.Scm;
 import org.apache.maven.shared.release.scm.IdentifiedScm;
@@ -237,22 +234,19 @@ public class PropertiesReleaseDescriptorStore
         // others boolean properties are not written to the properties file because the value from the caller is always
         // used
 
-        for ( Iterator<?> i = config.getReleaseVersions().entrySet().iterator(); i.hasNext(); )
+        for ( Map.Entry<String, String> entry : config.getReleaseVersions().entrySet() )
         {
-            Map.Entry<?, ?> entry = (Map.Entry<?, ?>) i.next();
-            properties.setProperty( "project.rel." + entry.getKey(), (String) entry.getValue() );
+            properties.setProperty( "project.rel." + entry.getKey(), entry.getValue() );
         }
 
-        for ( Iterator<?> i = config.getDevelopmentVersions().entrySet().iterator(); i.hasNext(); )
+        for ( Map.Entry<String, String> entry : config.getDevelopmentVersions().entrySet() )
         {
-            Map.Entry<?, ?> entry = (Map.Entry<?, ?>) i.next();
             properties.setProperty( "project.dev." + entry.getKey(), (String) entry.getValue() );
         }
 
-        for ( Iterator<?> i = config.getOriginalScmInfo().entrySet().iterator(); i.hasNext(); )
+        for ( Map.Entry<String, Scm> entry : config.getOriginalScmInfo().entrySet() )
         {
-            Map.Entry<?, ?> entry = (Map.Entry<?, ?>) i.next();
-            Scm scm = (Scm) entry.getValue();
+            Scm scm = entry.getValue();
             String prefix = "project.scm." + entry.getKey();
             if ( scm != null )
             {
@@ -304,22 +298,16 @@ public class PropertiesReleaseDescriptorStore
         }
     }
 
-    private void processResolvedDependencies( Properties prop, Map<?, ?> resolvedDependencies )
+    private void processResolvedDependencies( Properties prop, Map<String, Map<String, String>> resolvedDependencies )
     {
-        Set<?> entries = resolvedDependencies.entrySet();
-        Iterator<?> iterator = entries.iterator();
-        Entry<?, ?> currentEntry;
-
-        while ( iterator.hasNext() )
+        for ( Map.Entry<String, Map<String, String>> currentEntry : resolvedDependencies.entrySet() )
         {
-            currentEntry = (Entry<?, ?>) iterator.next();
-
-            Map<?, ?> versionMap = (Map<?, ?>) currentEntry.getValue();
-
+            Map<String, String> versionMap = currentEntry.getValue();
+            
             prop.setProperty( "dependency." + currentEntry.getKey() + ".release",
-                              (String) versionMap.get( ReleaseDescriptor.RELEASE_KEY ) );
+                              versionMap.get( ReleaseDescriptor.RELEASE_KEY ) );
             prop.setProperty( "dependency." + currentEntry.getKey() + ".development",
-                              (String) versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
+                              versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
         }
     }
 
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java
index 506a880..2deaf8b 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java
@@ -35,11 +35,9 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Stack;
 
 import org.apache.commons.lang.SystemUtils;
 import org.apache.maven.artifact.ArtifactUtils;
@@ -140,14 +138,14 @@ public abstract class AbstractReleaseTestCase
             }
         });
 
-        Stack<Path> projectFiles = new Stack<>();
+        Path projectFile;
         if ( executionRoot == null )
         {
-            projectFiles.push( Paths.get( "pom.xml" ) );
+            projectFile = testCaseRootTo.resolve( "pom.xml" );
         }
         else
         {
-            projectFiles.push( Paths.get( executionRoot, "pom.xml" ) );
+            projectFile = testCaseRootTo.resolve( Paths.get( executionRoot, "pom.xml" ) );
         }
 
         List<ArtifactRepository> repos =
@@ -176,8 +174,7 @@ public abstract class AbstractReleaseTestCase
         buildingRequest.setResolveDependencies( true );
 
         List<ProjectBuildingResult> buildingResults =
-            projectBuilder.build( Collections.singletonList( testCaseRootTo.resolve( projectFiles.peek() ).toFile() ),
-                                  true, buildingRequest );
+            projectBuilder.build( Collections.singletonList( projectFile.toFile() ), true, buildingRequest );
 
         List<MavenProject> reactorProjects = new ArrayList<>();
         for ( ProjectBuildingResult buildingResult : buildingResults )
@@ -202,10 +199,8 @@ public abstract class AbstractReleaseTestCase
     protected static Map<String,MavenProject> getProjectsAsMap( List<MavenProject> reactorProjects )
     {
         Map<String,MavenProject> map = new HashMap<>();
-        for ( Iterator<MavenProject> i = reactorProjects.iterator(); i.hasNext(); )
+        for ( MavenProject project : reactorProjects )
         {
-            MavenProject project = i.next();
-
             map.put( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ), project );
         }
         return map;
@@ -235,10 +230,8 @@ public abstract class AbstractReleaseTestCase
     protected void comparePomFiles( List<MavenProject> reactorProjects, String expectedFileSuffix, boolean normalizeLineEndings )
         throws IOException
     {
-        for ( Iterator<MavenProject> i = reactorProjects.iterator(); i.hasNext(); )
+        for ( MavenProject project : reactorProjects )
         {
-            MavenProject project = i.next();
-
             comparePomFiles( project, expectedFileSuffix, normalizeLineEndings );
         }
     }
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
index 879b0c1..215513b 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
@@ -1092,8 +1092,7 @@ public class CheckDependencySnapshotsPhaseTest
         }
 
         // validate
-        @SuppressWarnings( "rawtypes" )
-        Map versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "groupId:parent-external" );
+        Map<String, String> versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "groupId:parent-external" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0-test", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );

-- 
To stop receiving notification emails like this one, please contact
"commits@maven.apache.org" <co...@maven.apache.org>.