You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ca...@apache.org on 2006/09/15 04:16:04 UTC

svn commit: r446463 [1/2] - in /maven/plugins/trunk/maven-release-plugin: ./ src/main/java/org/apache/maven/plugins/release/ src/main/java/org/apache/maven/plugins/release/exec/ src/main/java/org/apache/maven/plugins/release/phase/ src/main/mdo/ src/ma...

Author: carlos
Date: Thu Sep 14 19:16:03 2006
New Revision: 446463

URL: http://svn.apache.org/viewvc?view=rev&rev=446463
Log:
[CONTINUUM-727] Merged rev# 440002-443305 from https://svn.apache.org/repos/asf/maven/continuum/branches/release-integration/maven/maven-release-plugin

Added:
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManagerListener.java
      - copied unchanged from r443305, maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManagerListener.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseResult.java
      - copied unchanged from r443305, maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseResult.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/MavenExecutorResult.java
      - copied unchanged from r443305, maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/MavenExecutorResult.java
Modified:
    maven/plugins/trunk/maven-release-plugin/pom.xml
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/ForkedMavenExecutor.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/MavenExecutor.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractReleasePhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractRewritePomsPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckPomPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/EndReleasePhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/GenerateReleasePomsPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/InputVariablesPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ReleasePhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RemoveReleasePomsPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForDevelopmentPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RunGoalsPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCheckModificationsPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCommitPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmTagPhase.java
    maven/plugins/trunk/maven-release-plugin/src/main/mdo/release-descriptor.mdo
    maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml
    maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/DefaultReleaseManagerTest.java
    maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/exec/ForkedMavenExecutorTest.java
    maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/ReleasePhaseStub.java
    maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/RunGoalsPhaseTest.java
    maven/plugins/trunk/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/DefaultReleaseManagerTest.xml

Modified: maven/plugins/trunk/maven-release-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/pom.xml?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-release-plugin/pom.xml Thu Sep 14 19:16:03 2006
@@ -234,7 +234,9 @@
         <executions>
           <execution>
             <goals>
+              <goal>xpp3-reader</goal>
               <goal>java</goal>
+              <goal>xpp3-writer</goal>
             </goals>
           </execution>
         </executions>

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java Thu Sep 14 19:16:03 2006
@@ -39,6 +39,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -55,7 +56,10 @@
     /**
      * The phases of release to run, and in what order.
      */
-    private List phases;
+    private List preparePhases;
+
+    //todo implement
+    private List performPhases;
 
     /**
      * The available phases.
@@ -77,16 +81,63 @@
      */
     private MavenExecutor mavenExecutor;
 
+    private final int phaseSkip = 0, phaseStart = 1, phaseEnd = 2, goalStart = 11, goalEnd = 12, error = 99;
+
     public void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        prepare( releaseDescriptor, settings, reactorProjects, true, false );
+        prepare( releaseDescriptor, settings, reactorProjects, true, false, null );
     }
 
     public void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, boolean resume,
                          boolean dryRun )
         throws ReleaseExecutionException, ReleaseFailureException
     {
+        prepare( releaseDescriptor, settings, reactorProjects, resume, dryRun, null );
+    }
+
+    public ReleaseResult prepareWithResult( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, boolean resume,
+                         boolean dryRun, ReleaseManagerListener listener )
+    {
+        ReleaseResult result = new ReleaseResult();
+
+        result.setStartTime( System.currentTimeMillis() );
+
+        try
+        {
+            prepare( releaseDescriptor, settings, reactorProjects, resume, dryRun, listener, result );
+
+            result.setResultCode( ReleaseResult.SUCCESS );
+        }
+        catch ( ReleaseExecutionException e )
+        {
+            captureException( result, listener, e );
+        }
+        catch ( ReleaseFailureException e )
+        {
+            captureException( result, listener, e );
+        }
+        finally
+        {
+            result.setEndTime( System.currentTimeMillis() );
+        }
+
+        return result;
+    }
+
+    public void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, boolean resume,
+                         boolean dryRun, ReleaseManagerListener listener )
+        throws ReleaseExecutionException, ReleaseFailureException
+    {
+        prepare( releaseDescriptor, settings, reactorProjects, resume, dryRun, listener, null );
+    }
+
+    private void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, boolean resume,
+                         boolean dryRun, ReleaseManagerListener listener, ReleaseResult result )
+        throws ReleaseExecutionException, ReleaseFailureException
+    {
+        updateListener( listener, "prepare", goalStart );
+
         ReleaseDescriptor config;
         if ( resume )
         {
@@ -108,22 +159,27 @@
         // more flexible set of steps.
 
         String completedPhase = config.getCompletedPhase();
-        int index = phases.indexOf( completedPhase );
+        int index = preparePhases.indexOf( completedPhase );
+
+        for ( int idx = 0; idx <= index; idx++ )
+        {
+            updateListener( listener, preparePhases.get( idx ).toString(), phaseSkip );
+        }
 
-        if ( index == phases.size() - 1 )
+        if ( index == preparePhases.size() - 1 )
         {
-            getLogger().info(
-                "Release preparation already completed. You can now continue with release:perform, or start again using the -Dresume=false flag" );
+            logInfo( result, "Release preparation already completed. You can now continue with release:perform, " +
+                             "or start again using the -Dresume=false flag" );
         }
         else if ( index >= 0 )
         {
-            getLogger().info( "Resuming release from phase '" + phases.get( index + 1 ) + "'" );
+            logInfo( result, "Resuming release from phase '" + preparePhases.get( index + 1 ) + "'" );
         }
 
         // start from next phase
-        for ( int i = index + 1; i < phases.size(); i++ )
+        for ( int i = index + 1; i < preparePhases.size(); i++ )
         {
-            String name = (String) phases.get( i );
+            String name = (String) preparePhases.get( i );
 
             ReleasePhase phase = (ReleasePhase) releasePhases.get( name );
 
@@ -132,13 +188,26 @@
                 throw new ReleaseExecutionException( "Unable to find phase '" + name + "' to execute" );
             }
 
-            if ( dryRun )
-            {
-                phase.simulate( config, settings, reactorProjects );
-            }
-            else
+            updateListener( listener, name, phaseStart );
+
+            ReleaseResult phaseResult = null;
+            try
             {
-                phase.execute( config, settings, reactorProjects );
+                if ( dryRun )
+                {
+                    phaseResult = phase.simulate( config, settings, reactorProjects );
+                }
+                else
+                {
+                    phaseResult = phase.execute( config, settings, reactorProjects );
+                }
+            }
+            finally
+            {
+                if ( result != null && phaseResult != null )
+                {
+                    result.getOutputBuffer().append( phaseResult.getOutput() );
+                }
             }
 
             config.setCompletedPhase( name );
@@ -151,14 +220,70 @@
                 // TODO: rollback?
                 throw new ReleaseExecutionException( "Error writing release properties after completing phase", e );
             }
+
+            updateListener( listener, name, phaseEnd );
         }
+
+        updateListener( listener, "prepare", goalEnd );
     }
 
     public void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects,
                          File checkoutDirectory, String goals, boolean useReleaseProfile )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        getLogger().info( "Checking out the project to perform the release ..." );
+        perform( releaseDescriptor, settings, reactorProjects, checkoutDirectory, goals, useReleaseProfile, null );
+    }
+
+    public void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects,
+                         File checkoutDirectory, String goals, boolean useReleaseProfile,
+                         ReleaseManagerListener listener )
+        throws ReleaseExecutionException, ReleaseFailureException
+    {
+        perform( releaseDescriptor, settings, reactorProjects, checkoutDirectory, goals,
+                 useReleaseProfile, listener, new ReleaseResult() );
+    }
+
+    public ReleaseResult performWithResult( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects,
+                                            File checkoutDirectory, String goals, boolean useReleaseProfile,
+                                            ReleaseManagerListener listener )
+    {
+        ReleaseResult result = new ReleaseResult();
+
+        try
+        {
+            result.setStartTime( System.currentTimeMillis() );
+
+            perform( releaseDescriptor, settings, reactorProjects, checkoutDirectory, goals,
+                     useReleaseProfile, listener, result );
+
+            result.setResultCode( ReleaseResult.SUCCESS );
+        }
+        catch ( ReleaseExecutionException e )
+        {
+            captureException( result, listener, e );
+        }
+        catch ( ReleaseFailureException e )
+        {
+            captureException( result, listener, e );
+        }
+        finally
+        {
+            result.setEndTime( System.currentTimeMillis() );
+        }
+
+        return result;
+    }
+
+    private void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects,
+                         File checkoutDirectory, String goals, boolean useReleaseProfile,
+                         ReleaseManagerListener listener, ReleaseResult result )
+        throws ReleaseExecutionException, ReleaseFailureException
+    {
+        updateListener( listener, "perform", goalStart );
+
+        logInfo( result, "Checking out the project to perform the release ..." );
+
+        updateListener( listener, "verify-release-configuration", phaseStart );
 
         ReleaseDescriptor config;
         try
@@ -167,21 +292,37 @@
         }
         catch ( ReleaseDescriptorStoreException e )
         {
+            updateListener( listener, e.getMessage(), error );
+
             throw new ReleaseExecutionException( "Error reading stored configuration: " + e.getMessage(), e );
         }
 
+        updateListener( listener, "verify-release-configuration", phaseEnd );
+        updateListener( listener, "verify-completed-prepare-phases", phaseStart );
+
         // if we stopped mid-way through preparation - don't perform
         if ( config.getCompletedPhase() != null && !"end-release".equals( config.getCompletedPhase() ) )
         {
-            throw new ReleaseFailureException(
-                "Cannot perform release - the preparation step was stopped mid-way. Please re-run release:prepare to continue, or perform the release from an SCM tag." );
+            String message = "Cannot perform release - the preparation step was stopped mid-way. Please re-run " +
+                "release:prepare to continue, or perform the release from an SCM tag.";
+
+            updateListener( listener, message, error );
+
+            throw new ReleaseFailureException( message );
         }
 
         if ( config.getScmSourceUrl() == null )
         {
-            throw new ReleaseFailureException( "No SCM URL was provided to perform the release from" );
+            String message = "No SCM URL was provided to perform the release from";
+
+            updateListener( listener, message, error );
+
+            throw new ReleaseFailureException( message );
         }
 
+        updateListener( listener, "verify-completed-prepare-phases", phaseEnd );
+        updateListener( listener, "configure-repositories", phaseStart );
+
         ScmRepository repository;
         ScmProvider provider;
         try
@@ -192,15 +333,22 @@
         }
         catch ( ScmRepositoryException e )
         {
+            updateListener( listener, e.getMessage(), error );
+
             throw new ReleaseScmRepositoryException( e.getMessage(), e.getValidationMessages() );
         }
         catch ( NoSuchScmProviderException e )
         {
+            updateListener( listener, e.getMessage(), error );
+
             throw new ReleaseExecutionException( "Unable to configure SCM repository: " + e.getMessage(), e );
         }
 
         // TODO: sanity check that it is not . or .. or lower
 
+        updateListener( listener, "configure-repositories", phaseEnd );
+        updateListener( listener, "checkout-project-from-scm", phaseStart );
+
         if ( checkoutDirectory.exists() )
         {
             try
@@ -209,25 +357,34 @@
             }
             catch ( IOException e )
             {
+                updateListener( listener, e.getMessage(), error );
+
                 throw new ReleaseExecutionException( "Unable to remove old checkout directory: " + e.getMessage(), e );
             }
         }
         checkoutDirectory.mkdirs();
 
-        CheckOutScmResult result;
+        CheckOutScmResult scmResult;
         try
         {
-            result = provider.checkOut( repository, new ScmFileSet( checkoutDirectory ), config.getScmReleaseLabel() );
+            scmResult = provider.checkOut( repository, new ScmFileSet( checkoutDirectory ), config.getScmReleaseLabel() );
         }
         catch ( ScmException e )
         {
+            updateListener( listener, e.getMessage(), error );
+
             throw new ReleaseExecutionException( "An error is occurred in the checkout process: " + e.getMessage(), e );
         }
-        if ( !result.isSuccess() )
+        if ( !scmResult.isSuccess() )
         {
-            throw new ReleaseScmCommandException( "Unable to checkout from SCM", result );
+            updateListener( listener, scmResult.getProviderMessage(), error );
+
+            throw new ReleaseScmCommandException( "Unable to checkout from SCM", scmResult );
         }
 
+        updateListener( listener, "checkout-project-from-scm", phaseEnd );
+        updateListener( listener, "build-project", phaseStart );
+
         String additionalArguments = config.getAdditionalArguments();
 
         if ( useReleaseProfile )
@@ -245,14 +402,22 @@
         try
         {
             mavenExecutor.executeGoals( checkoutDirectory, goals, config.isInteractive(), additionalArguments,
-                                        config.getPomFileName() );
+                                        config.getPomFileName(), result );
         }
         catch ( MavenExecutorException e )
         {
+            updateListener( listener, e.getMessage(), error );
+
             throw new ReleaseExecutionException( "Error executing Maven: " + e.getMessage(), e );
         }
 
+        updateListener( listener, "build-project", phaseEnd );
+
+        updateListener( listener, "cleanup", phaseStart );
         clean( config, reactorProjects );
+        updateListener( listener, "cleanup", phaseEnd );
+        
+        updateListener( listener, "perform", goalEnd );
     }
 
     public void clean( ReleaseDescriptor releaseDescriptor, List reactorProjects )
@@ -261,7 +426,7 @@
 
         configStore.delete( releaseDescriptor );
 
-        for ( Iterator i = phases.iterator(); i.hasNext(); )
+        for ( Iterator i = preparePhases.iterator(); i.hasNext(); )
         {
             String name = (String) i.next();
 
@@ -279,5 +444,67 @@
     void setMavenExecutor( MavenExecutor mavenExecutor )
     {
         this.mavenExecutor = mavenExecutor;
+    }
+
+    void updateListener( ReleaseManagerListener listener, String name, int state )
+    {
+        if ( listener != null )
+        {
+            switch( state )
+            {
+                case goalStart:
+                    listener.goalStart( name, getGoalPhases( name ) );
+                    break;
+                case goalEnd:
+                    listener.goalEnd();
+                    break;
+                case phaseSkip:
+                    listener.phaseSkip( name );
+                    break;
+                case phaseStart:
+                    listener.phaseStart( name );
+                    break;
+                case phaseEnd:
+                    listener.phaseEnd();
+                    break;
+                default:
+                    listener.error( name );
+            }
+        }
+    }
+
+    private List getGoalPhases( String name )
+    {
+        List phases = new ArrayList();
+
+        if ( "prepare".equals( name ) )
+        {
+            phases.addAll( this.preparePhases );
+        }
+        else if ( "perform".equals( name ) )
+        {
+            phases.addAll( this.performPhases );
+        }
+
+        return phases;
+    }
+
+    private void logInfo( ReleaseResult result, String message )
+    {
+        if ( result != null )
+        {
+            result.appendInfo( message );
+        }
+
+        getLogger().info( message );
+    }
+
+    private void captureException( ReleaseResult result, ReleaseManagerListener listener, Exception e )
+    {
+        updateListener( listener, e.getMessage(), error );
+
+        result.appendError( e );
+
+        result.setResultCode( ReleaseResult.ERROR );
     }
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java Thu Sep 14 19:16:03 2006
@@ -58,7 +58,7 @@
      * @throws ReleaseFailureException   if there is a problem performing the release
      */
     void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, boolean resume,
-                  boolean dryRun )
+                           boolean dryRun )
         throws ReleaseExecutionException, ReleaseFailureException;
 
     /**
@@ -72,8 +72,8 @@
      * @throws ReleaseExecutionException if there is a problem performing the release
      * @throws ReleaseFailureException   if there is a problem performing the release
      */
-    void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, File checkoutDirectory,
-                  String goals, boolean useReleaseProfile )
+    void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects,
+                           File checkoutDirectory, String goals, boolean useReleaseProfile )
         throws ReleaseExecutionException, ReleaseFailureException;
 
     /**
@@ -83,4 +83,20 @@
      * @param reactorProjects   the reactor projects
      */
     void clean( ReleaseDescriptor releaseDescriptor, List reactorProjects );
+
+    void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, boolean resume,
+                           boolean dryRun, ReleaseManagerListener listener )
+        throws ReleaseExecutionException, ReleaseFailureException;
+
+    ReleaseResult prepareWithResult( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects, boolean resume,
+                           boolean dryRun, ReleaseManagerListener listener );
+
+    void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects,
+                           File checkoutDirectory, String goals, boolean useReleaseProfile,
+                           ReleaseManagerListener listener )
+        throws ReleaseExecutionException, ReleaseFailureException;
+
+    ReleaseResult performWithResult( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects,
+                           File checkoutDirectory, String goals, boolean useReleaseProfile,
+                           ReleaseManagerListener listener );
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/ForkedMavenExecutor.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/ForkedMavenExecutor.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/ForkedMavenExecutor.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/ForkedMavenExecutor.java Thu Sep 14 19:16:03 2006
@@ -22,6 +22,7 @@
 import org.codehaus.plexus.util.cli.CommandLineUtils;
 import org.codehaus.plexus.util.cli.Commandline;
 import org.codehaus.plexus.util.cli.StreamConsumer;
+import org.apache.maven.plugins.release.ReleaseResult;
 
 import java.io.File;
 
@@ -42,8 +43,8 @@
     /**
      * @noinspection UseOfSystemOutOrSystemErr
      */
-    public void executeGoals( File workingDirectory, String goals, boolean interactive, String additionalArguments,
-                              String pomFileName )
+    public void executeGoals( File workingDirectory, String goals, boolean interactive,
+                                             String additionalArguments, String pomFileName, ReleaseResult relResult )
         throws MavenExecutorException
     {
         Commandline cl = commandLineFactory.createCommandLine( "mvn" );
@@ -86,6 +87,7 @@
 
         try
         {
+            relResult.appendInfo( "Executing: " + cl.toString() );
             getLogger().info( "Executing: " + cl.toString() );
 
             int result = CommandLineUtils.executeCommandLine( cl, stdOut, stdErr );
@@ -100,12 +102,17 @@
         {
             throw new MavenExecutorException( "Can't run goal " + goals, stdOut.toString(), stdErr.toString(), e );
         }
+        finally
+        {
+            relResult.appendOutput( stdOut.toString() );
+        }
     }
 
-    public void executeGoals( File workingDirectory, String goals, boolean interactive, String arguments )
+    public void executeGoals( File workingDirectory, String goals, boolean interactive,
+                                             String arguments, ReleaseResult result )
         throws MavenExecutorException
     {
-        executeGoals( workingDirectory, goals, interactive, arguments, null );
+        executeGoals( workingDirectory, goals, interactive, arguments, null, result );
     }
 
     public void setCommandLineFactory( CommandLineFactory commandLineFactory )

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/MavenExecutor.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/MavenExecutor.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/MavenExecutor.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/exec/MavenExecutor.java Thu Sep 14 19:16:03 2006
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+import org.apache.maven.plugins.release.ReleaseResult;
+
 import java.io.File;
 
 /**
@@ -40,8 +42,8 @@
      * @param pomFileName         the file name of the POM to execute on
      * @throws MavenExecutorException if an error occurred executing Maven
      */
-    void executeGoals( File workingDirectory, String goals, boolean interactive, String additionalArguments,
-                       String pomFileName )
+    void executeGoals( File workingDirectory, String goals, boolean interactive,
+                                      String additionalArguments, String pomFileName, ReleaseResult result )
         throws MavenExecutorException;
 
     /**
@@ -53,6 +55,7 @@
      * @param additionalArguments additional arguments to pass to the Maven command
      * @throws MavenExecutorException if an error occurred executing Maven
      */
-    void executeGoals( File workingDirectory, String goals, boolean interactive, String additionalArguments )
+    void executeGoals( File workingDirectory, String goals, boolean interactive,
+                                      String additionalArguments, ReleaseResult result )
         throws MavenExecutorException;
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractReleasePhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractReleasePhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractReleasePhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractReleasePhase.java Thu Sep 14 19:16:03 2006
@@ -17,6 +17,7 @@
  */
 
 import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.apache.maven.plugins.release.ReleaseResult;
 
 import java.util.List;
 
@@ -29,8 +30,37 @@
     extends AbstractLogEnabled
     implements ReleasePhase
 {
-    public void clean( List reactorProjects )
+    public ReleaseResult clean( List reactorProjects )
     {
         // nothing to do by default
+
+        return getReleaseResultSuccess();
+    }
+
+    protected void logInfo( ReleaseResult result, String message )
+    {
+        result.appendInfo( message );
+        getLogger().info( message );
+    }
+
+    protected void logWarn( ReleaseResult result, String message )
+    {
+        result.appendWarn( message );
+        getLogger().warn( message );
+    }
+
+    protected void logDebug( ReleaseResult result, String message, Exception e )
+    {
+        result.appendDebug( message, e );
+        getLogger().debug( message, e );
+    }
+
+    protected ReleaseResult getReleaseResultSuccess()
+    {
+        ReleaseResult result = new ReleaseResult();
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractRewritePomsPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractRewritePomsPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractRewritePomsPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/AbstractRewritePomsPhase.java Thu Sep 14 19:16:03 2006
@@ -23,6 +23,7 @@
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.ReleaseFailureException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.scm.ReleaseScmCommandException;
 import org.apache.maven.plugins.release.scm.ReleaseScmRepositoryException;
@@ -85,28 +86,34 @@
      */
     private String pomSuffix;
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        transform( releaseDescriptor, settings, reactorProjects, false );
+        ReleaseResult result = new ReleaseResult();
+
+        transform( releaseDescriptor, settings, reactorProjects, false, result );
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
     private void transform( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects,
-                            boolean simulate )
+                            boolean simulate, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         for ( Iterator it = reactorProjects.iterator(); it.hasNext(); )
         {
             MavenProject project = (MavenProject) it.next();
 
-            getLogger().info( "Transforming '" + project.getName() + "'..." );
+            logInfo( result, "Transforming '" + project.getName() + "'..." );
 
-            transformProject( project, releaseDescriptor, settings, reactorProjects, simulate );
+            transformProject( project, releaseDescriptor, settings, reactorProjects, simulate, result );
         }
     }
 
     private void transformProject( MavenProject project, ReleaseDescriptor releaseDescriptor, Settings settings,
-                                   List reactorProjects, boolean simulate )
+                                   List reactorProjects, boolean simulate, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         Document document;
@@ -165,7 +172,8 @@
             throw new ReleaseExecutionException( "Unable to configure SCM repository: " + e.getMessage(), e );
         }
 
-        transformDocument( project, document.getRootElement(), releaseDescriptor, reactorProjects, scmRepository );
+        transformDocument( project, document.getRootElement(), releaseDescriptor,
+                           reactorProjects, scmRepository, result );
 
         if ( simulate )
         {
@@ -190,7 +198,7 @@
     }
 
     private void transformDocument( MavenProject project, Element rootElement, ReleaseDescriptor releaseDescriptor,
-                                    List reactorProjects, ScmRepository scmRepository )
+                                    List reactorProjects, ScmRepository scmRepository, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         Namespace namespace = rootElement.getNamespace();
@@ -203,7 +211,8 @@
 
         rewriteVersion( rootElement, namespace, mappedVersions, projectId, project, parentVersion );
 
-        rewriteDependencies( project.getDependencies(), rootElement, mappedVersions, originalVersions, projectId );
+        rewriteDependencies( project.getDependencies(), rootElement, mappedVersions, originalVersions,
+                             projectId, result );
 
         if ( project.getDependencyManagement() != null )
         {
@@ -211,7 +220,7 @@
             if ( dependencyRoot != null )
             {
                 rewriteDependencies( project.getDependencyManagement().getDependencies(), dependencyRoot,
-                                     mappedVersions, originalVersions, projectId );
+                                     mappedVersions, originalVersions, projectId, result );
             }
         }
 
@@ -220,18 +229,19 @@
             Element buildRoot = rootElement.getChild( "build", namespace );
             if ( buildRoot != null )
             {
-                rewritePlugins( project.getBuildPlugins(), buildRoot, mappedVersions, originalVersions, projectId );
+                rewritePlugins( project.getBuildPlugins(), buildRoot, mappedVersions,
+                                originalVersions, projectId, result );
                 if ( project.getPluginManagement() != null )
                 {
                     Element pluginsRoot = buildRoot.getChild( "pluginManagement", namespace );
                     if ( pluginsRoot != null )
                     {
                         rewritePlugins( project.getPluginManagement().getPlugins(), pluginsRoot, mappedVersions,
-                                        originalVersions, projectId );
+                                        originalVersions, projectId, result );
                     }
                 }
                 rewriteExtensions( project.getBuildExtensions(), buildRoot, mappedVersions, originalVersions,
-                                   projectId );
+                                   projectId, result );
             }
         }
 
@@ -241,11 +251,11 @@
             if ( pluginsRoot != null )
             {
                 rewriteReportPlugins( project.getReportPlugins(), pluginsRoot, mappedVersions, originalVersions,
-                                      projectId );
+                                      projectId, result );
             }
         }
 
-        transformScm( project, rootElement, namespace, releaseDescriptor, projectId, scmRepository );
+        transformScm( project, rootElement, namespace, releaseDescriptor, projectId, scmRepository, result );
     }
 
     private void rewriteVersion( Element rootElement, Namespace namespace, Map mappedVersions, String projectId,
@@ -307,7 +317,7 @@
     }
 
     private void rewriteDependencies( List dependencies, Element dependencyRoot, Map mappedVersions,
-                                      Map originalVersions, String projectId )
+                                      Map originalVersions, String projectId, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         if ( dependencies != null )
@@ -317,13 +327,13 @@
                 Dependency dep = (Dependency) i.next();
 
                 updateDomVersion( dep.getGroupId(), dep.getArtifactId(), mappedVersions, dep.getVersion(),
-                                  originalVersions, "dependencies", "dependency", dependencyRoot, projectId );
+                                  originalVersions, "dependencies", "dependency", dependencyRoot, projectId, result );
             }
         }
     }
 
     private void rewritePlugins( List plugins, Element pluginRoot, Map mappedVersions, Map originalVersions,
-                                 String projectId )
+                                 String projectId, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         if ( plugins != null )
@@ -336,14 +346,14 @@
                 if ( plugin.getVersion() != null )
                 {
                     updateDomVersion( plugin.getGroupId(), plugin.getArtifactId(), mappedVersions, plugin.getVersion(),
-                                      originalVersions, "plugins", "plugin", pluginRoot, projectId );
+                                      originalVersions, "plugins", "plugin", pluginRoot, projectId, result );
                 }
             }
         }
     }
 
     private void rewriteExtensions( List extensions, Element extensionRoot, Map mappedVersions, Map originalVersions,
-                                    String projectId )
+                                    String projectId, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         if ( extensions != null )
@@ -354,13 +364,13 @@
 
                 updateDomVersion( extension.getGroupId(), extension.getArtifactId(), mappedVersions,
                                   extension.getVersion(), originalVersions, "extensions", "extension", extensionRoot,
-                                  projectId );
+                                  projectId, result );
             }
         }
     }
 
     private void rewriteReportPlugins( List plugins, Element pluginRoot, Map mappedVersions, Map originalVersions,
-                                       String projectId )
+                                       String projectId, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         if ( plugins != null )
@@ -373,7 +383,7 @@
                 if ( plugin.getVersion() != null )
                 {
                     updateDomVersion( plugin.getGroupId(), plugin.getArtifactId(), mappedVersions, plugin.getVersion(),
-                                      originalVersions, "plugins", "plugin", pluginRoot, projectId );
+                                      originalVersions, "plugins", "plugin", pluginRoot, projectId, result );
                 }
             }
         }
@@ -381,7 +391,7 @@
 
     private void updateDomVersion( String groupId, String artifactId, Map mappedVersions, String version,
                                    Map originalVersions, String groupTagName, String tagName, Element dependencyRoot,
-                                   String projectId )
+                                   String projectId, ReleaseResult result )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         String key = ArtifactUtils.versionlessKey( groupId, artifactId );
@@ -392,7 +402,7 @@
         {
             if ( mappedVersion != null )
             {
-                getLogger().debug( "Updating " + artifactId + " to " + mappedVersion );
+                logInfo( result, "Updating " + artifactId + " to " + mappedVersion );
 
                 try
                 {
@@ -525,14 +535,22 @@
         }
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        transform( releaseDescriptor, settings, reactorProjects, true );
+        ReleaseResult result = new ReleaseResult();
+
+        transform( releaseDescriptor, settings, reactorProjects, true, result );
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
-    public void clean( List reactorProjects )
+    public ReleaseResult clean( List reactorProjects )
     {
+        ReleaseResult result = new ReleaseResult();
+
         super.clean( reactorProjects );
 
         if ( reactorProjects != null )
@@ -549,6 +567,10 @@
                 }
             }
         }
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
     protected abstract Map getOriginalVersionMap( ReleaseDescriptor releaseDescriptor, List reactorProjects );
@@ -557,7 +579,7 @@
 
     protected abstract void transformScm( MavenProject project, Element rootElement, Namespace namespace,
                                           ReleaseDescriptor releaseDescriptor, String projectId,
-                                          ScmRepository scmRepository )
+                                          ScmRepository scmRepository, ReleaseResult result )
         throws ReleaseExecutionException;
 
     protected Element rewriteElement( String name, String value, Element root, Namespace namespace )

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java Thu Sep 14 19:16:03 2006
@@ -20,6 +20,7 @@
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.ReleaseFailureException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.settings.Settings;
@@ -50,10 +51,12 @@
      */
     private Prompter prompter;
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        getLogger().info( "Checking dependencies and plugins for snapshots ..." );
+        ReleaseResult result = new ReleaseResult();
+
+        logInfo( result, "Checking dependencies and plugins for snapshots ..." );
 
         Map originalVersions = releaseDescriptor.getOriginalVersions( reactorProjects );
 
@@ -63,6 +66,10 @@
 
             checkProject( project, originalVersions, releaseDescriptor );
         }
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
     private void checkProject( MavenProject project, Map originalVersions, ReleaseDescriptor releaseDescriptor )
@@ -183,11 +190,11 @@
             !artifact.getBaseVersion().equals( originalVersions.get( versionlessArtifactKey ) );
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         // It makes no modifications, so simulate is the same as execute
-        execute( releaseDescriptor, settings, reactorProjects );
+        return execute( releaseDescriptor, settings, reactorProjects );
     }
 
     public void setPrompter( Prompter prompter )

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckPomPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckPomPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckPomPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckPomPhase.java Thu Sep 14 19:16:03 2006
@@ -19,6 +19,7 @@
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.ReleaseFailureException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.scm.ReleaseScmRepositoryException;
 import org.apache.maven.plugins.release.scm.ScmRepositoryConfigurator;
@@ -44,9 +45,11 @@
      */
     private ScmRepositoryConfigurator scmRepositoryConfigurator;
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
+        ReleaseResult result = new ReleaseResult();
+
         // Currently, we don't deal with multiple SCM locations in a multiproject
         if ( StringUtils.isEmpty( releaseDescriptor.getScmSourceUrl() ) )
         {
@@ -96,12 +99,16 @@
                     "The project " + projectId + " isn't a snapshot (" + project.getVersion() + ")." );
             }
         }
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         // It makes no modifications, so simulate is the same as execute
-        execute( releaseDescriptor, settings, reactorProjects );
+        return execute( releaseDescriptor, settings, reactorProjects );
     }
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/EndReleasePhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/EndReleasePhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/EndReleasePhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/EndReleasePhase.java Thu Sep 14 19:16:03 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.ReleaseFailureException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.settings.Settings;
 
@@ -32,15 +33,27 @@
     extends AbstractReleasePhase
 {
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        getLogger().info( "Release preparation complete." );
+        ReleaseResult result = new ReleaseResult();
+
+        logInfo( result, "Release preparation complete." );
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        getLogger().info( "Release preparation simulation complete." );
+        ReleaseResult result = new ReleaseResult();
+
+        logInfo( result, "Release preparation simulation complete." );
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/GenerateReleasePomsPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/GenerateReleasePomsPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/GenerateReleasePomsPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/GenerateReleasePomsPhase.java Thu Sep 14 19:16:03 2006
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.plugins.release.ReleaseExecutionException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.settings.Settings;
 
@@ -30,15 +31,21 @@
 public class GenerateReleasePomsPhase
     extends AbstractReleasePhase
 {
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException
     {
+        ReleaseResult result = new ReleaseResult();
+
         if ( releaseDescriptor.isGenerateReleasePoms() )
         {
-            getLogger().info( "Generating release POMs..." );
+            logInfo( result, "Generating release POMs..." );
 
             generateReleasePoms();
         }
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
     private void generateReleasePoms()
@@ -369,9 +376,13 @@
     }
 */
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
     {
         // TODO [!]: implement
+        ReleaseResult result = new ReleaseResult();
+
+        result.setResultCode( ReleaseResult.SUCCESS );
 
+        return result;
     }
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/InputVariablesPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/InputVariablesPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/InputVariablesPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/InputVariablesPhase.java Thu Sep 14 19:16:03 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.plugins.release.ReleaseExecutionException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.settings.Settings;
@@ -44,9 +45,11 @@
         this.prompter = prompter;
     }
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException
     {
+        ReleaseResult result = new ReleaseResult();
+
         // get the root project
         MavenProject project = (MavenProject) reactorProjects.get( 0 );
 
@@ -82,13 +85,23 @@
             }
             releaseDescriptor.setScmReleaseLabel( tag );
         }
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException
     {
+        ReleaseResult result = new ReleaseResult();
+
         // It makes no modifications, so simulate is the same as execute
         execute( releaseDescriptor, settings, reactorProjects );
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java Thu Sep 14 19:16:03 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.plugins.release.ReleaseExecutionException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.versions.DefaultVersionInfo;
 import org.apache.maven.plugins.release.versions.VersionInfo;
@@ -29,6 +30,7 @@
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Map projects to their new versions after release / into the next development cycle.
@@ -53,9 +55,11 @@
         this.prompter = prompter;
     }
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException
     {
+        ReleaseResult result = new ReleaseResult();
+
         for ( Iterator i = reactorProjects.iterator(); i.hasNext(); )
         {
             MavenProject project = (MavenProject) i.next();
@@ -72,8 +76,8 @@
                 String msg = "Error parsing version, cannot determine next version: " + e.getMessage();
                 if ( releaseDescriptor.isInteractive() )
                 {
-                    getLogger().warn( msg );
-                    getLogger().debug( e.getMessage(), e );
+                    logWarn( result, msg );
+                    logDebug( result, e.getMessage(), e );
                 }
                 else
                 {
@@ -97,6 +101,14 @@
                         nextVersion = prompter.prompt( "What is the new development version for \"" +
                             project.getName() + "\"? (" + projectId + ")", nextVersion );
                     }
+                    else
+                    {
+                        Map devVersions = releaseDescriptor.getDevelopmentVersions();
+                        if ( devVersions.containsKey( projectId ) )
+                        {
+                            nextVersion = devVersions.remove( projectId ).toString();
+                        }
+                    }
 
                     releaseDescriptor.mapDevelopmentVersion( projectId, nextVersion );
                 }
@@ -114,6 +126,14 @@
                             "What is the release version for \"" + project.getName() + "\"? (" + projectId + ")",
                             nextVersion );
                     }
+                    else
+                    {
+                        Map relVersions = releaseDescriptor.getReleaseVersions();
+                        if ( relVersions.containsKey( projectId ) )
+                        {
+                            nextVersion = relVersions.remove( projectId ).toString();
+                        }
+                    }
 
                     releaseDescriptor.mapReleaseVersion( projectId, nextVersion );
                 }
@@ -123,13 +143,23 @@
                 throw new ReleaseExecutionException( "Error reading version from input handler: " + e.getMessage(), e );
             }
         }
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException
     {
+        ReleaseResult result = new ReleaseResult();
+
         // It makes no modifications, so simulate is the same as execute
         execute( releaseDescriptor, settings, reactorProjects );
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ReleasePhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ReleasePhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ReleasePhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ReleasePhase.java Thu Sep 14 19:16:03 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.ReleaseFailureException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.settings.Settings;
 
@@ -44,7 +45,7 @@
      * @throws ReleaseExecutionException an exception during the execution of the phase
      * @throws ReleaseFailureException   a failure during the execution of the phase
      */
-    void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException;
 
     /**
@@ -56,7 +57,7 @@
      * @throws ReleaseExecutionException an exception during the execution of the phase
      * @throws ReleaseFailureException   a failure during the execution of the phase
      */
-    void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException;
 
     /**
@@ -64,5 +65,5 @@
      *
      * @param reactorProjects the reactor projects
      */
-    void clean( List reactorProjects );
+    ReleaseResult clean( List reactorProjects );
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RemoveReleasePomsPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RemoveReleasePomsPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RemoveReleasePomsPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RemoveReleasePomsPhase.java Thu Sep 14 19:16:03 2006
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.plugins.release.ReleaseExecutionException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.settings.Settings;
 
@@ -30,11 +31,13 @@
 public class RemoveReleasePomsPhase
     extends AbstractReleasePhase
 {
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException
     {
+        ReleaseResult result = new ReleaseResult();
+
         // TODO [!]: implement
-        getLogger().info( "Removing release POMs..." );
+        logInfo( result, "Removing release POMs..." );
 
 /*
         File currentReleasePomFile = null;
@@ -80,10 +83,20 @@
         }
 
 */
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
     {
+        ReleaseResult result = new ReleaseResult();
+
         // TODO [!]: implement
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForDevelopmentPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForDevelopmentPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForDevelopmentPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForDevelopmentPhase.java Thu Sep 14 19:16:03 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.model.Scm;
 import org.apache.maven.plugins.release.ReleaseExecutionException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.scm.ScmTranslator;
 import org.apache.maven.project.MavenProject;
@@ -42,7 +43,8 @@
     private Map scmTranslators;
 
     protected void transformScm( MavenProject project, Element rootElement, Namespace namespace,
-                                 ReleaseDescriptor releaseDescriptor, String projectId, ScmRepository scmRepository )
+                                 ReleaseDescriptor releaseDescriptor, String projectId, ScmRepository scmRepository,
+                                 ReleaseResult result )
         throws ReleaseExecutionException
     {
         // If SCM is null in original model, it is inherited, no mods needed
@@ -79,7 +81,9 @@
                 }
                 else
                 {
-                    getLogger().debug( "No SCM translator found - skipping rewrite" );
+                    String message = "No SCM translator found - skipping rewrite";
+                    result.appendDebug( message );
+                    getLogger().debug( message );
                 }
             }
         }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java Thu Sep 14 19:16:03 2006
@@ -20,6 +20,7 @@
 import org.apache.maven.model.Scm;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.scm.ScmTranslator;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.jdom.Element;
@@ -42,7 +43,8 @@
     private Map scmTranslators;
 
     protected void transformScm( MavenProject project, Element rootElement, Namespace namespace,
-                                 ReleaseDescriptor releaseDescriptor, String projectId, ScmRepository scmRepository )
+                                 ReleaseDescriptor releaseDescriptor, String projectId, ScmRepository scmRepository,
+                                 ReleaseResult result )
     {
         // If SCM is null in original model, it is inherited, no mods needed
         if ( project.getScm() != null )
@@ -52,7 +54,7 @@
             {
                 releaseDescriptor.mapOriginalScmInfo( projectId, project.getScm() );
 
-                translateScm( project, releaseDescriptor, scmRoot, namespace, scmRepository );
+                translateScm( project, releaseDescriptor, scmRoot, namespace, scmRepository, result );
             }
             else
             {
@@ -70,7 +72,7 @@
                         scmRoot = new Element( "scm" );
                         scmRoot.addContent( "\n  " );
 
-                        if ( translateScm( project, releaseDescriptor, scmRoot, namespace, scmRepository ) )
+                        if ( translateScm( project, releaseDescriptor, scmRoot, namespace, scmRepository, result ) )
                         {
                             rootElement.addContent( "\n  " ).addContent( scmRoot ).addContent( "\n" );
                         }
@@ -81,7 +83,7 @@
     }
 
     private boolean translateScm( MavenProject project, ReleaseDescriptor releaseDescriptor, Element scmRoot,
-                                  Namespace namespace, ScmRepository scmRepository )
+                                  Namespace namespace, ScmRepository scmRepository, ReleaseResult relResult )
     {
         ScmTranslator translator = (ScmTranslator) scmTranslators.get( scmRepository.getProvider() );
         boolean result = false;
@@ -139,7 +141,11 @@
         }
         else
         {
-            getLogger().debug( "No SCM translator found - skipping rewrite" );
+            String message = "No SCM translator found - skipping rewrite";
+
+            relResult.appendDebug( message );
+
+            getLogger().debug( message );
         }
         return result;
     }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RunGoalsPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RunGoalsPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RunGoalsPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RunGoalsPhase.java Thu Sep 14 19:16:03 2006
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.plugins.release.ReleaseExecutionException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.exec.MavenExecutor;
 import org.apache.maven.plugins.release.exec.MavenExecutorException;
@@ -39,34 +40,44 @@
      */
     private MavenExecutor mavenExecutor;
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException
     {
+        ReleaseResult result = new ReleaseResult();
+
         try
         {
             String goals = releaseDescriptor.getPreparationGoals();
             if ( !StringUtils.isEmpty( goals ) )
             {
-                getLogger().info( "Executing preparation goals '" + goals + "'..." );
+                logInfo( result, "Executing preparation goals '" + goals + "'..." );
 
                 mavenExecutor.executeGoals( new File( releaseDescriptor.getWorkingDirectory() ), goals,
                                             releaseDescriptor.isInteractive(),
-                                            releaseDescriptor.getAdditionalArguments() );
+                                            releaseDescriptor.getAdditionalArguments(), result );
             }
         }
         catch ( MavenExecutorException e )
         {
             throw new ReleaseExecutionException( e.getMessage(), e );
         }
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException
     {
-        getLogger().info(
-            "Executing preparation goals - since this is simulation mode it is running against the original project, not the rewritten ones" );
+        ReleaseResult result = new ReleaseResult();
+
+        logInfo( result, "Executing preparation goals - since this is simulation mode it is running against the " +
+                         "original project, not the rewritten ones" );
 
         execute( releaseDescriptor, settings, reactorProjects );
+
+        return result;
     }
 
     public void setMavenExecutor( MavenExecutor mavenExecutor )

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCheckModificationsPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCheckModificationsPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCheckModificationsPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCheckModificationsPhase.java Thu Sep 14 19:16:03 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.ReleaseFailureException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.scm.ReleaseScmCommandException;
 import org.apache.maven.plugins.release.scm.ReleaseScmRepositoryException;
@@ -60,10 +61,12 @@
     private Set excludedFiles = new HashSet( Arrays.asList(
         new String[]{"pom.xml", "pom.xml.backup", "pom.xml.tag", "pom.xml.next", "release.properties"} ) );
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        getLogger().info( "Verifying that there are no local modifications..." );
+        ReleaseResult relResult = new ReleaseResult();
+
+        logInfo( relResult, "Verifying that there are no local modifications..." );
 
         ScmRepository repository;
         ScmProvider provider;
@@ -132,12 +135,16 @@
             throw new ReleaseFailureException(
                 "Cannot prepare the release because you have local modifications : \n" + message );
         }
+
+        relResult.setResultCode( ReleaseResult.SUCCESS );
+
+        return relResult;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         // It makes no modifications, so simulate is the same as execute
-        execute( releaseDescriptor, settings, reactorProjects );
+        return execute( releaseDescriptor, settings, reactorProjects );
     }
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCommitPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCommitPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCommitPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmCommitPhase.java Thu Sep 14 19:16:03 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.ReleaseFailureException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.scm.ReleaseScmCommandException;
 import org.apache.maven.plugins.release.scm.ReleaseScmRepositoryException;
@@ -57,9 +58,11 @@
      */
     private String messageFormat;
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
+        ReleaseResult relResult = new ReleaseResult();
+
         validateConfiguration( releaseDescriptor );
 
         getLogger().info( "Checking in modified POMs..." );
@@ -98,16 +101,26 @@
         {
             throw new ReleaseScmCommandException( "Unable to commit files", result );
         }
+
+        relResult.setResultCode( ReleaseResult.SUCCESS );
+
+        return relResult;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
+        ReleaseResult result = new ReleaseResult();
+
         validateConfiguration( releaseDescriptor );
 
         Collection pomFiles = createPomFiles( reactorProjects );
-        getLogger().info( "Full run would be checking in " + pomFiles.size() + " files with message: '" +
+        logInfo( result, "Full run would be checking in " + pomFiles.size() + " files with message: '" +
             createMessage( releaseDescriptor ) + "'" );
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
     private static void validateConfiguration( ReleaseDescriptor releaseDescriptor )

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmTagPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmTagPhase.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmTagPhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/ScmTagPhase.java Thu Sep 14 19:16:03 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.ReleaseFailureException;
+import org.apache.maven.plugins.release.ReleaseResult;
 import org.apache.maven.plugins.release.config.ReleaseDescriptor;
 import org.apache.maven.plugins.release.scm.ReleaseScmCommandException;
 import org.apache.maven.plugins.release.scm.ReleaseScmRepositoryException;
@@ -47,12 +48,14 @@
      */
     private ScmRepositoryConfigurator scmRepositoryConfigurator;
 
-    public void execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
+        ReleaseResult relResult = new ReleaseResult();
+
         validateConfiguration( releaseDescriptor );
 
-        getLogger().info( "Tagging release with the label " + releaseDescriptor.getScmReleaseLabel() + "..." );
+        logInfo( relResult, "Tagging release with the label " + releaseDescriptor.getScmReleaseLabel() + "..." );
 
         ScmRepository repository;
         ScmProvider provider;
@@ -87,15 +90,25 @@
         {
             throw new ReleaseScmCommandException( "Unable to tag SCM", result );
         }
+
+        relResult.setResultCode( ReleaseResult.SUCCESS );
+
+        return relResult;
     }
 
-    public void simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
+        ReleaseResult result = new ReleaseResult();
+
         validateConfiguration( releaseDescriptor );
 
-        getLogger().info( "Full run would be tagging " + releaseDescriptor.getWorkingDirectory() + " with label: '" +
+        logInfo( result, "Full run would be tagging " + releaseDescriptor.getWorkingDirectory() + " with label: '" +
             releaseDescriptor.getScmReleaseLabel() + "'" );
+
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
     }
 
     private static void validateConfiguration( ReleaseDescriptor releaseDescriptor )

Modified: maven/plugins/trunk/maven-release-plugin/src/main/mdo/release-descriptor.mdo
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/mdo/release-descriptor.mdo?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/mdo/release-descriptor.mdo (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/mdo/release-descriptor.mdo Thu Sep 14 19:16:03 2006
@@ -1,6 +1,6 @@
 <model>
   <id>release-descriptor</id>
-  <name>Release Descriptor</name>
+  <name>ReleaseDescriptor</name>
   <description>
     A release descriptor contains everything that is needed to perform a
     release. A release descriptor can be used by third party systems like

Modified: maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml Thu Sep 14 19:16:03 2006
@@ -38,7 +38,7 @@
         </requirement>
       </requirements>
       <configuration>
-        <phases>
+        <preparePhases>
           <phase>check-poms</phase>
           <phase>scm-check-modifications</phase>
           <phase>check-dependency-snapshots</phase>
@@ -54,7 +54,15 @@
           <phase>remove-release-poms</phase>
           <phase>scm-commit-development</phase>
           <phase>end-release</phase>
-        </phases>
+        </preparePhases>
+        <performPhases>
+          <phase>verify-release-configuration</phase>
+          <phase>verify-completed-prepare-phases</phase>
+          <phase>configure-repositories</phase>
+          <phase>checkout-project-from-scm</phase>
+          <phase>build-project</phase>
+          <phase>cleanup</phase>
+        </performPhases>
       </configuration>
     </component>
     <component>

Modified: maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/DefaultReleaseManagerTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/DefaultReleaseManagerTest.java?view=diff&rev=446463&r1=446462&r2=446463
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/DefaultReleaseManagerTest.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/DefaultReleaseManagerTest.java Thu Sep 14 19:16:03 2006
@@ -391,7 +391,7 @@
 
         Mock mock = new Mock( MavenExecutor.class );
         Constraint[] constraints = new Constraint[]{new IsSame( checkoutDirectory ), new IsEqual( "goal1 goal2" ),
-            new IsEqual( Boolean.TRUE ), new IsEqual( "-DperformRelease=true" ), new IsNull()};
+            new IsEqual( Boolean.TRUE ), new IsEqual( "-DperformRelease=true" ), new IsNull(), new IsAnything() };
         mock.expects( new InvokeOnceMatcher() ).method( "executeGoals" ).with( constraints );
         releaseManager.setMavenExecutor( (MavenExecutor) mock.proxy() );
 
@@ -420,7 +420,7 @@
 
         Mock mock = new Mock( MavenExecutor.class );
         Constraint[] constraints = new Constraint[]{new IsSame( checkoutDirectory ), new IsEqual( "goal1 goal2" ),
-            new IsEqual( Boolean.TRUE ), new IsNull(), new IsNull()};
+            new IsEqual( Boolean.TRUE ), new IsNull(), new IsNull(), new IsAnything() };
         mock.expects( new InvokeOnceMatcher() ).method( "executeGoals" ).with( constraints );
         releaseManager.setMavenExecutor( (MavenExecutor) mock.proxy() );
 
@@ -450,7 +450,8 @@
 
         Mock mock = new Mock( MavenExecutor.class );
         Constraint[] constraints = new Constraint[]{new IsSame( checkoutDirectory ), new IsEqual( "goal1 goal2" ),
-            new IsEqual( Boolean.TRUE ), new IsEqual( "-Dmaven.test.skip=true -DperformRelease=true" ), new IsNull()};
+            new IsEqual( Boolean.TRUE ), new IsEqual( "-Dmaven.test.skip=true -DperformRelease=true" ), new IsNull(),
+            new IsAnything() };
         mock.expects( new InvokeOnceMatcher() ).method( "executeGoals" ).with( constraints );
         releaseManager.setMavenExecutor( (MavenExecutor) mock.proxy() );
 
@@ -480,7 +481,7 @@
 
         Mock mock = new Mock( MavenExecutor.class );
         Constraint[] constraints = new Constraint[]{new IsSame( checkoutDirectory ), new IsEqual( "goal1 goal2" ),
-            new IsEqual( Boolean.TRUE ), new IsEqual( "-Dmaven.test.skip=true" ), new IsNull()};
+            new IsEqual( Boolean.TRUE ), new IsEqual( "-Dmaven.test.skip=true" ), new IsNull(), new IsAnything() };
         mock.expects( new InvokeOnceMatcher() ).method( "executeGoals" ).with( constraints );
         releaseManager.setMavenExecutor( (MavenExecutor) mock.proxy() );
 
@@ -509,7 +510,7 @@
 
         Mock mock = new Mock( MavenExecutor.class );
         Constraint[] constraints = new Constraint[]{new IsSame( checkoutDirectory ), new IsEqual( "goal1 goal2" ),
-            new IsEqual( Boolean.TRUE ), new IsEqual( "-DperformRelease=true" ), new IsNull()};
+            new IsEqual( Boolean.TRUE ), new IsEqual( "-DperformRelease=true" ), new IsNull(), new IsAnything() };
         mock.expects( new InvokeOnceMatcher() ).method( "executeGoals" ).with( constraints );
         releaseManager.setMavenExecutor( (MavenExecutor) mock.proxy() );
 
@@ -730,7 +731,7 @@
 
         Mock mock = new Mock( MavenExecutor.class );
         Constraint[] constraints = new Constraint[]{new IsSame( checkoutDirectory ), new IsEqual( "goal1 goal2" ),
-            new IsEqual( Boolean.TRUE ), new IsEqual( "-DperformRelease=true" ), new IsNull()};
+            new IsEqual( Boolean.TRUE ), new IsEqual( "-DperformRelease=true" ), new IsNull(), new IsAnything() };
         mock.expects( new InvokeOnceMatcher() ).method( "executeGoals" ).with( constraints ).will(
             new ThrowStub( new MavenExecutorException( "...", 1, "stdOut", "stdErr" ) ) );
         releaseManager.setMavenExecutor( (MavenExecutor) mock.proxy() );