You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ep...@apache.org on 2006/09/08 12:50:10 UTC

svn commit: r441469 - in /maven/continuum/branches/release-integration/maven/maven-release-plugin/src: main/java/org/apache/maven/plugins/release/ main/resources/META-INF/plexus/ test/resources/org/apache/maven/plugins/release/

Author: epunzalan
Date: Fri Sep  8 03:50:09 2006
New Revision: 441469

URL: http://svn.apache.org/viewvc?view=rev&rev=441469
Log:
PR: CONTINUUM-727

added support for listeners
added todo for release:perform phases

Added:
    maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManagerListener.java   (with props)
Modified:
    maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java
    maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java
    maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml
    maven/continuum/branches/release-integration/maven/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/DefaultReleaseManagerTest.xml

Modified: maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java?view=diff&rev=441469&r1=441468&r2=441469
==============================================================================
--- maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java (original)
+++ maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java Fri Sep  8 03:50:09 2006
@@ -42,6 +42,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.ArrayList;
 
 /**
  * Implementation of the release manager.
@@ -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,6 +81,11 @@
      */
     private MavenExecutor mavenExecutor;
 
+    //todo tests
+    private List listenerList = new ArrayList();
+
+    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
     {
@@ -87,6 +96,8 @@
                          boolean dryRun )
         throws ReleaseExecutionException, ReleaseFailureException
     {
+        reportToListeners( "prepare", goalStart );
+
         ReleaseDescriptor config;
         if ( resume )
         {
@@ -96,6 +107,8 @@
             }
             catch ( ReleaseDescriptorStoreException e )
             {
+                reportToListeners( e.getMessage(), error );
+
                 throw new ReleaseExecutionException( "Error reading stored configuration: " + e.getMessage(), e );
             }
         }
@@ -108,30 +121,41 @@
         // more flexible set of steps.
 
         String completedPhase = config.getCompletedPhase();
-        int index = phases.indexOf( completedPhase );
+        int index = preparePhases.indexOf( completedPhase );
+
+        for ( int idx = 0; idx < preparePhases.size(); idx++ )
+        {
+            reportToListeners( 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" );
         }
         else if ( index >= 0 )
         {
-            getLogger().info( "Resuming release from phase '" + phases.get( index + 1 ) + "'" );
+            getLogger().info( "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 );
 
             if ( phase == null )
             {
-                throw new ReleaseExecutionException( "Unable to find phase '" + name + "' to execute" );
+                String message = "Unable to find phase '" + name + "' to execute";
+
+                reportToListeners( message, error );
+
+                throw new ReleaseExecutionException( message );
             }
 
+            reportToListeners( name, phaseStart );
+
             if ( dryRun )
             {
                 phase.simulate( config, settings, reactorProjects );
@@ -148,9 +172,15 @@
             }
             catch ( ReleaseDescriptorStoreException e )
             {
+                reportToListeners( e.getMessage(), error );
+
                 // TODO: rollback?
                 throw new ReleaseExecutionException( "Error writing release properties after completing phase", e );
             }
+
+            reportToListeners( name, phaseEnd );
+
+            reportToListeners( "prepare", goalEnd );
         }
     }
 
@@ -158,8 +188,12 @@
                          File checkoutDirectory, String goals, boolean useReleaseProfile )
         throws ReleaseExecutionException, ReleaseFailureException
     {
+        reportToListeners( "perform", goalStart );
+
         getLogger().info( "Checking out the project to perform the release ..." );
 
+        reportToListeners( "verify-release-configuration", phaseStart );
+
         ReleaseDescriptor config;
         try
         {
@@ -167,21 +201,37 @@
         }
         catch ( ReleaseDescriptorStoreException e )
         {
+            reportToListeners( e.getMessage(), error );
+
             throw new ReleaseExecutionException( "Error reading stored configuration: " + e.getMessage(), e );
         }
 
+        reportToListeners( "verify-release-configuration", phaseEnd );
+        reportToListeners( "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.";
+
+            reportToListeners( 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";
+
+            reportToListeners( message, error );
+
+            throw new ReleaseFailureException( message );
         }
 
+        reportToListeners( "verify-completed-prepare-phases", phaseEnd );
+        reportToListeners( "configure-repositories", phaseStart );
+
         ScmRepository repository;
         ScmProvider provider;
         try
@@ -192,15 +242,22 @@
         }
         catch ( ScmRepositoryException e )
         {
+            reportToListeners( e.getMessage(), error );
+
             throw new ReleaseScmRepositoryException( e.getMessage(), e.getValidationMessages() );
         }
         catch ( NoSuchScmProviderException e )
         {
+            reportToListeners( e.getMessage(), error );
+
             throw new ReleaseExecutionException( "Unable to configure SCM repository: " + e.getMessage(), e );
         }
 
         // TODO: sanity check that it is not . or .. or lower
 
+        reportToListeners( "configure-repositories", phaseEnd );
+        reportToListeners( "checkout-project-from-scm", phaseStart );
+
         if ( checkoutDirectory.exists() )
         {
             try
@@ -209,6 +266,8 @@
             }
             catch ( IOException e )
             {
+                reportToListeners( e.getMessage(), error );
+
                 throw new ReleaseExecutionException( "Unable to remove old checkout directory: " + e.getMessage(), e );
             }
         }
@@ -221,13 +280,20 @@
         }
         catch ( ScmException e )
         {
+            reportToListeners( e.getMessage(), error );
+
             throw new ReleaseExecutionException( "An error is occurred in the checkout process: " + e.getMessage(), e );
         }
         if ( !result.isSuccess() )
         {
+            reportToListeners( result.getProviderMessage(), error );
+
             throw new ReleaseScmCommandException( "Unable to checkout from SCM", result );
         }
 
+        reportToListeners( "checkout-project-from-scm", phaseEnd );
+        reportToListeners( "build-project", phaseStart );
+
         String additionalArguments = config.getAdditionalArguments();
 
         if ( useReleaseProfile )
@@ -249,10 +315,18 @@
         }
         catch ( MavenExecutorException e )
         {
+            reportToListeners( e.getMessage(), error );
+
             throw new ReleaseExecutionException( "Error executing Maven: " + e.getMessage(), e );
         }
 
+        reportToListeners( "build-project", phaseEnd );
+        reportToListeners( "cleanup", phaseStart );
+
         clean( config, reactorProjects );
+
+        reportToListeners( "cleanup", phaseEnd );
+        reportToListeners( "perform", goalEnd );
     }
 
     public void clean( ReleaseDescriptor releaseDescriptor, List reactorProjects )
@@ -261,7 +335,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 +353,68 @@
     void setMavenExecutor( MavenExecutor mavenExecutor )
     {
         this.mavenExecutor = mavenExecutor;
+    }
+
+    void reportToListeners( String name, int state )
+    {
+        for( Iterator listeners = listenerList.iterator(); listeners.hasNext(); )
+        {
+            ReleaseManagerListener listener = (ReleaseManagerListener) listeners.next();
+
+            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;
+    }
+
+    public void addListener( ReleaseManagerListener listener )
+    {
+        listenerList.add( listener );
+    }
+
+    public void removeListener( ReleaseManagerListener listener )
+    {
+        if ( listenerList.contains( listener ) )
+        {
+            listenerList.remove( listener );
+        }
+    }
+
+    List getListeners()
+    {
+        return listenerList;
     }
 }

Modified: maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java?view=diff&rev=441469&r1=441468&r2=441469
==============================================================================
--- maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java (original)
+++ maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManager.java Fri Sep  8 03:50:09 2006
@@ -83,4 +83,18 @@
      * @param reactorProjects   the reactor projects
      */
     void clean( ReleaseDescriptor releaseDescriptor, List reactorProjects );
+
+    /**
+     * Add a progress listener
+     *
+     * @param listener
+     */
+    void addListener( ReleaseManagerListener listener );
+
+    /**
+     * Remove a progress listener
+     *
+     * @param listener
+     */
+    void removeListener( ReleaseManagerListener listener );
 }

Added: maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManagerListener.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManagerListener.java?view=auto&rev=441469
==============================================================================
--- maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManagerListener.java (added)
+++ maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManagerListener.java Fri Sep  8 03:50:09 2006
@@ -0,0 +1,37 @@
+package org.apache.maven.plugins.release;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.List;
+
+/**
+ * @author Edwin Punzalan
+ */
+public interface ReleaseManagerListener
+{
+    void goalStart( String goal, List phases );
+
+    void phaseStart( String name );
+
+    void phaseEnd();
+
+    void phaseSkip( String name );
+
+    void goalEnd();
+
+    void error( String reason );
+}

Propchange: maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/ReleaseManagerListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=441469&r1=441468&r2=441469
==============================================================================
--- maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/continuum/branches/release-integration/maven/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml Fri Sep  8 03:50:09 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/continuum/branches/release-integration/maven/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/DefaultReleaseManagerTest.xml
URL: http://svn.apache.org/viewvc/maven/continuum/branches/release-integration/maven/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/DefaultReleaseManagerTest.xml?view=diff&rev=441469&r1=441468&r2=441469
==============================================================================
--- maven/continuum/branches/release-integration/maven/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/DefaultReleaseManagerTest.xml (original)
+++ maven/continuum/branches/release-integration/maven/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/DefaultReleaseManagerTest.xml Fri Sep  8 03:50:09 2006
@@ -38,11 +38,11 @@
         </requirement>
       </requirements>
       <configuration>
-        <phases>
+        <preparePhases>
           <phase>step1</phase>
           <phase>step2</phase>
           <phase>step3</phase>
-        </phases>
+        </preparePhases>
       </configuration>
     </component>
     <component>
@@ -61,9 +61,9 @@
         </requirement>
       </requirements>
       <configuration>
-        <phases>
+        <preparePhases>
           <phase>foo</phase>
-        </phases>
+        </preparePhases>
       </configuration>
     </component>
     <component>



Re: svn commit: r441469 - in /maven/continuum/branches/release-integration/maven/maven-release-plugin/src: main/java/org/apache/maven/plugins/release/ main/resources/META-INF/plexus/ test/resources/org/apache/maven/plugins/release/

Posted by Edwin Punzalan <ep...@exist.com>.

I'll fix this asap.  Thanks.


Brett Porter wrote:
>
> On 08/09/2006, at 8:50 PM, epunzalan@apache.org wrote:
>
>> Author: epunzalan
>> Date: Fri Sep  8 03:50:09 2006
>> New Revision: 441469
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=441469
>> Log:
>> PR: CONTINUUM-727
>> +    private final int phaseSkip = 0, phaseStart = 1, phaseEnd = 2, 
>> goalStart = 11, goalEnd = 12, error = 99;
>
> Shouldn't these be constants? static PHASE_SKIP, PHASE_START, etc?
>

Re: svn commit: r441469 - in /maven/continuum/branches/release-integration/maven/maven-release-plugin/src: main/java/org/apache/maven/plugins/release/ main/resources/META-INF/plexus/ test/resources/org/apache/maven/plugins/release/

Posted by Brett Porter <br...@apache.org>.
On 08/09/2006, at 8:50 PM, epunzalan@apache.org wrote:

> Author: epunzalan
> Date: Fri Sep  8 03:50:09 2006
> New Revision: 441469
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=441469
> Log:
> PR: CONTINUUM-727
> +    private final int phaseSkip = 0, phaseStart = 1, phaseEnd = 2,  
> goalStart = 11, goalEnd = 12, error = 99;

Shouldn't these be constants? static PHASE_SKIP, PHASE_START, etc?