Author: rfscholte
Date: Wed Mar 21 22:16:44 2012
New Revision: 1303601

URL: http://svn.apache.org/viewvc?rev=1303601&view=rev
Log:
Fix MRELEASE-239: release:perform and release:prepare should accept multi-line 
goals/preparationGoals configurations

Added:
    
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/AbstractMavenExecutorTest.java
Modified:
    
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java
    
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/ForkedMavenExecutor.java
    
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java

Modified: 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java?rev=1303601&r1=1303600&r2=1303601&view=diff
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java
 (original)
+++ 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java
 Wed Mar 21 22:16:44 2012
@@ -24,8 +24,11 @@ import org.apache.maven.shared.release.e
 import org.apache.maven.shared.release.env.ReleaseEnvironment;
 import org.codehaus.plexus.logging.LogEnabled;
 import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
 public abstract class AbstractMavenExecutor
     implements MavenExecutor, LogEnabled
@@ -67,6 +70,32 @@ public abstract class AbstractMavenExecu
     {
         executeGoals( workingDirectory, goals, releaseEnvironment, 
interactive, arguments, null, result );
     }
+    
+    /** {@inheritDoc} */
+    public void executeGoals( File workingDirectory, String goals, 
ReleaseEnvironment releaseEnvironment,
+                              boolean interactive, String additionalArguments, 
String pomFileName, ReleaseResult result )
+        throws MavenExecutorException
+    {
+        List<String> goalsList = new ArrayList<String>();
+        if ( goals != null )
+        {
+            // accept both space and comma, so the old way still work
+            // also accept line separators, so that goal lists can be spread
+            // across multiple lines in the POM.
+            String[] tokens = StringUtils.split( goals, ", \n\r\t" );
+
+            for ( int i = 0; i < tokens.length; ++i )
+            {
+                goalsList.add( tokens[i] );
+            }
+        }
+        executeGoals( workingDirectory, goalsList, releaseEnvironment, 
interactive, additionalArguments, pomFileName, result );
+    }
+    
+    protected abstract void executeGoals( File workingDirectory, List<String> 
goals, ReleaseEnvironment releaseEnvironment,
+                              boolean interactive, String additionalArguments, 
String pomFileName, ReleaseResult result )
+        throws MavenExecutorException;
+
 
     protected final Logger getLogger()
     {

Modified: 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/ForkedMavenExecutor.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/ForkedMavenExecutor.java?rev=1303601&r1=1303600&r2=1303601&view=diff
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/ForkedMavenExecutor.java
 (original)
+++ 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/ForkedMavenExecutor.java
 Wed Mar 21 22:16:44 2012
@@ -24,6 +24,7 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.List;
 
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
 import org.apache.maven.shared.release.ReleaseResult;
@@ -52,7 +53,8 @@ public class ForkedMavenExecutor
     /**
      * @noinspection UseOfSystemOutOrSystemErr
      */
-    public void executeGoals( File workingDirectory, String goals, 
ReleaseEnvironment releaseEnvironment,
+    @Override
+    public void executeGoals( File workingDirectory, List<String> goals, 
ReleaseEnvironment releaseEnvironment,
                               boolean interactive, String additionalArguments, 
String pomFileName,
                               ReleaseResult relResult )
         throws MavenExecutorException
@@ -116,17 +118,9 @@ public class ForkedMavenExecutor
                 cl.createArg().setValue( pomFileName );
             }
 
-            if ( goals != null )
+            for ( String goal : goals )
             {
-                // accept both space and comma, so the old way still work
-                // also accept line separators, so that goal lists can be 
spread
-                // across multiple lines in the POM.
-                String[] tokens = StringUtils.split( goals, ", \n\r" );
-
-                for ( int i = 0; i < tokens.length; ++i )
-                {
-                    cl.createArg().setValue( tokens[i] );
-                }
+                cl.createArg().setValue( goal );
             }
 
             cl.createArg().setValue( "--no-plugin-updates" );

Modified: 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java?rev=1303601&r1=1303600&r2=1303601&view=diff
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java
 (original)
+++ 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java
 Wed Mar 21 22:16:44 2012
@@ -43,7 +43,6 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
 import java.util.StringTokenizer;
@@ -335,7 +334,8 @@ public class InvokerMavenExecutor
         }
     }
 
-    public void executeGoals( File workingDirectory, String goals, 
ReleaseEnvironment releaseEnvironment,
+    @Override
+    public void executeGoals( File workingDirectory, List<String> goals, 
ReleaseEnvironment releaseEnvironment,
                               boolean interactive, String additionalArguments, 
String pomFileName,
                               ReleaseResult result )
         throws MavenExecutorException
@@ -391,11 +391,7 @@ public class InvokerMavenExecutor
 
             setupRequest( req, bridge, additionalArguments );
 
-            if ( goals.trim().length() > 0 )
-            {
-                String[] rawGoals = goals.split( " " );
-                req.setGoals( Arrays.asList( rawGoals ) );
-            }
+            req.setGoals( goals );
 
             try
             {

Added: 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/AbstractMavenExecutorTest.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/AbstractMavenExecutorTest.java?rev=1303601&view=auto
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/AbstractMavenExecutorTest.java
 (added)
+++ 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/AbstractMavenExecutorTest.java
 Wed Mar 21 22:16:44 2012
@@ -0,0 +1,109 @@
+package org.apache.maven.shared.release.exec;
+
+/*
+ * 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 static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.isA;
+import static org.mockito.Matchers.isNull;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.shared.release.ReleaseResult;
+import org.apache.maven.shared.release.env.ReleaseEnvironment;
+
+public class AbstractMavenExecutorTest
+    extends TestCase
+{
+
+    public void testGoalSeparation()
+        throws MavenExecutorException
+    {
+        AbstractMavenExecutor executor = spy( new AbstractMavenExecutorSpy() );
+
+        executor.executeGoals( null, null, true, null, null );
+        verify( executor ).executeGoals( isNull( File.class ), eq( new 
ArrayList<String>() ),
+                                         isA( ReleaseEnvironment.class ), eq( 
true ), isNull( String.class ),
+                                         isNull( String.class ), isNull( 
ReleaseResult.class ) );
+        reset( executor );
+
+        executor.executeGoals( null, " clean verify ", true, null, null );
+        verify( executor ).executeGoals( isNull( File.class ),
+                                         eq( Arrays.asList( new String[] { 
"clean", "verify" } ) ),
+                                         isA( ReleaseEnvironment.class ), eq( 
true ), isNull( String.class ),
+                                         isNull( String.class ), isNull( 
ReleaseResult.class ) );
+        reset( executor );
+
+        executor.executeGoals( null, ",clean,verify,", true, null, null );
+        verify( executor ).executeGoals( isNull( File.class ),
+                                         eq( Arrays.asList( new String[] { 
"clean", "verify" } ) ),
+                                         isA( ReleaseEnvironment.class ), eq( 
true ), isNull( String.class ),
+                                         isNull( String.class ), isNull( 
ReleaseResult.class ) );
+        reset( executor );
+
+        executor.executeGoals( null, "\nclean\nverify\n", true, null, null );
+        verify( executor ).executeGoals( isNull( File.class ),
+                                         eq( Arrays.asList( new String[] { 
"clean", "verify" } ) ),
+                                         isA( ReleaseEnvironment.class ), eq( 
true ), isNull( String.class ),
+                                         isNull( String.class ), isNull( 
ReleaseResult.class ) );
+        reset( executor );
+
+        executor.executeGoals( null, "\rclean\rverify\r", true, null, null );
+        verify( executor ).executeGoals( isNull( File.class ),
+                                         eq( Arrays.asList( new String[] { 
"clean", "verify" } ) ),
+                                         isA( ReleaseEnvironment.class ), eq( 
true ), isNull( String.class ),
+                                         isNull( String.class ), isNull( 
ReleaseResult.class ) );
+        reset( executor );
+
+        executor.executeGoals( null, "\r\nclean\r\nverify\r\n", true, null, 
null );
+        verify( executor ).executeGoals( isNull( File.class ),
+                                         eq( Arrays.asList( new String[] { 
"clean", "verify" } ) ),
+                                         isA( ReleaseEnvironment.class ), eq( 
true ), isNull( String.class ),
+                                         isNull( String.class ), isNull( 
ReleaseResult.class ) );
+        reset( executor );
+
+        executor.executeGoals( null, "\tclean\tverify\t", true, null, null );
+        verify( executor ).executeGoals( isNull( File.class ),
+                                         eq( Arrays.asList( new String[] { 
"clean", "verify" } ) ),
+                                         isA( ReleaseEnvironment.class ), eq( 
true ), isNull( String.class ),
+                                         isNull( String.class ), isNull( 
ReleaseResult.class ) );
+        reset( executor );
+    }
+
+    private class AbstractMavenExecutorSpy
+        extends AbstractMavenExecutor
+    {
+
+        @Override
+        protected void executeGoals( File workingDirectory, List<String> 
goals, ReleaseEnvironment releaseEnvironment,
+                                     boolean interactive, String 
additionalArguments, String pomFileName,
+                                     ReleaseResult result )
+            throws MavenExecutorException
+        {
+        }
+    }
+}
\ No newline at end of file


Reply via email to