Author: brett
Date: Wed Apr 26 01:49:51 2006
New Revision: 397148

URL: http://svn.apache.org/viewcvs?rev=397148&view=rev
Log:
[MRELEASE-98] mapping and input of dev/release versions

Added:
    
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java
   (with props)
    
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.java
   (with props)
    
maven/plugins/trunk/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.xml
   (with props)
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/config/PropertiesReleaseConfigurationStore.java
    
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/ReleaseConfiguration.java
    
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/config/PropertiesReleaseConfigurationStoreTest.java
    
maven/plugins/trunk/maven-release-plugin/src/test/resources/release.properties

Modified: maven/plugins/trunk/maven-release-plugin/pom.xml
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/pom.xml?rev=397148&r1=397147&r2=397148&view=diff
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-release-plugin/pom.xml Wed Apr 26 01:49:51 2006
@@ -113,6 +113,13 @@
   <build>
     <plugins>
       <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.4</source>
+          <target>1.4</target>
+        </configuration>
+      </plugin>
+      <plugin>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <childDelegation>false</childDelegation>

Modified: 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/DefaultReleaseManager.java?rev=397148&r1=397147&r2=397148&view=diff
==============================================================================
--- 
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
 Wed Apr 26 01:49:51 2006
@@ -59,7 +59,7 @@
      */
     private ReleaseConfigurationStore configStore;
 
-    // TODO: config - release pom generation, interactive, tag, use edit mode
+    // TODO: config - tag
 
     public void prepare( ReleaseConfiguration releaseConfiguration )
         throws ReleaseExecutionException
@@ -80,10 +80,6 @@
         {
             config = releaseConfiguration;
         }
-
-        // TODO: move these to phases? Into the rewriting, or as a separate 
phase? Separate phase sounds best to be able to rearrange
-        // - walk through modules, map out values, prompt as necessary - for 
development versions
-        // - walk through modules, map out values, prompt as necessary - for 
release versions
 
         // Later, it would be a good idea to introduce a proper workflow tool 
so that the release can be made up of a
         // more flexible set of steps.

Modified: 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/PropertiesReleaseConfigurationStore.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/PropertiesReleaseConfigurationStore.java?rev=397148&r1=397147&r2=397148&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/PropertiesReleaseConfigurationStore.java
 (original)
+++ 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/PropertiesReleaseConfigurationStore.java
 Wed Apr 26 01:49:51 2006
@@ -26,6 +26,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.Map;
 import java.util.Properties;
 
 /**
@@ -83,6 +85,23 @@
         releaseConfiguration.setPassphrase( properties.getProperty( 
"scm.passphrase" ) );
         releaseConfiguration.setTagBase( properties.getProperty( "scm.tagBase" 
) );
 
+        // boolean properties are not written to the properties file because 
the value from the caller is always used
+
+        for ( Iterator i = properties.keySet().iterator(); i.hasNext(); )
+        {
+            String property = (String) i.next();
+            if ( property.startsWith( "project.rel." ) )
+            {
+                releaseConfiguration.mapReleaseVersion( property.substring( 
"project.rel.".length() ),
+                                                        
properties.getProperty( property ) );
+            }
+            else if ( property.startsWith( "project.dev." ) )
+            {
+                releaseConfiguration.mapDevelopmentVersion( 
property.substring( "project.dev.".length() ),
+                                                            
properties.getProperty( property ) );
+            }
+        }
+
         if ( mergeConfiguration != null )
         {
             releaseConfiguration.merge( mergeConfiguration );
@@ -102,6 +121,20 @@
         properties.setProperty( "scm.privateKey", config.getPrivateKey() );
         properties.setProperty( "scm.passphrase", config.getPassphrase() );
         properties.setProperty( "scm.tagBase", config.getTagBase() );
+
+        // boolean properties are not written to the properties file because 
the value from the caller is always used
+
+        for ( Iterator i = config.getReleaseVersions().entrySet().iterator(); 
i.hasNext(); )
+        {
+            Map.Entry entry = (Map.Entry) i.next();
+            properties.setProperty( "project.rel." + entry.getKey(), (String) 
entry.getValue() );
+        }
+
+        for ( Iterator i = 
config.getDevelopmentVersions().entrySet().iterator(); i.hasNext(); )
+        {
+            Map.Entry entry = (Map.Entry) i.next();
+            properties.setProperty( "project.dev." + entry.getKey(), (String) 
entry.getValue() );
+        }
 
         OutputStream outStream = null;
         //noinspection OverlyBroadCatchBlock

Modified: 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/ReleaseConfiguration.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/ReleaseConfiguration.java?rev=397148&r1=397147&r2=397148&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/ReleaseConfiguration.java
 (original)
+++ 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/config/ReleaseConfiguration.java
 Wed Apr 26 01:49:51 2006
@@ -19,7 +19,10 @@
 import org.apache.maven.settings.Settings;
 
 import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Configuration used for the release.
@@ -95,6 +98,32 @@
      */
     private boolean generateReleasePoms;
 
+    /**
+     * Whether the release process is interactive and the release manager 
should be prompted to confirm values, or
+     * whether the defaults are used regardless.
+     */
+    private boolean interactive = true;
+
+    /**
+     * A map of projects to versions to use when releasing the given projects.
+     */
+    private Map releaseVersions = new HashMap();
+
+    /**
+     * A map of projects to versions to use when moving the given projects 
back into devlopment after release.
+     */
+    private Map developmentVersions = new HashMap();
+
+    public boolean isInteractive()
+    {
+        return interactive;
+    }
+
+    public void setInteractive( boolean interactive )
+    {
+        this.interactive = interactive;
+    }
+
     public boolean isGenerateReleasePoms()
     {
         return generateReleasePoms;
@@ -225,6 +254,16 @@
         this.generateReleasePoms = generateReleasePoms;
     }
 
+    public Map getReleaseVersions()
+    {
+        return Collections.unmodifiableMap( releaseVersions );
+    }
+
+    public Map getDevelopmentVersions()
+    {
+        return Collections.unmodifiableMap( developmentVersions );
+    }
+
     /**
      * Merge two configurations together. All SCM settings are overridden by 
the merge configuration, as are the
      * <code>settings</code> and <code>workingDirectory</code> fields. The 
<code>completedPhase</code> field is used as
@@ -245,6 +284,7 @@
         this.useEditMode = mergeConfiguration.useEditMode;
         this.addSchema = mergeConfiguration.addSchema;
         this.generateReleasePoms = mergeConfiguration.generateReleasePoms;
+        this.interactive = mergeConfiguration.interactive;
 
         // These must be overridden, as they are not stored
         this.settings = mergeOverride( this.settings, 
mergeConfiguration.settings );
@@ -253,6 +293,8 @@
 
         // Not overridden - not configured from caller
         this.completedPhase = mergeDefault( this.completedPhase, 
mergeConfiguration.completedPhase );
+
+        // The version maps are never merged
     }
 
     private List mergeOverride( List thisValue, List mergeValue )
@@ -280,24 +322,6 @@
         return thisValue != null ? thisValue : mergeValue;
     }
 
-    public int hashCode()
-    {
-        int result = completedPhase != null ? completedPhase.hashCode() : 0;
-        result = 29 * result + ( settings != null ? settings.hashCode() : 0 );
-        result = 29 * result + ( tagBase != null ? tagBase.hashCode() : 0 );
-        result = 29 * result + ( username != null ? username.hashCode() : 0 );
-        result = 29 * result + ( password != null ? password.hashCode() : 0 );
-        result = 29 * result + ( url != null ? url.hashCode() : 0 );
-        result = 29 * result + ( privateKey != null ? privateKey.hashCode() : 
0 );
-        result = 29 * result + ( passphrase != null ? passphrase.hashCode() : 
0 );
-        result = 29 * result + ( workingDirectory != null ? 
workingDirectory.hashCode() : 0 );
-        result = 29 * result + ( reactorProjects != null ? 
reactorProjects.hashCode() : 0 );
-        result = 29 * result + ( useEditMode ? 1 : 0 );
-        result = 29 * result + ( addSchema ? 1 : 0 );
-        result = 29 * result + ( generateReleasePoms ? 1 : 0 );
-        return result;
-    }
-
     public boolean equals( Object obj )
     {
         if ( this == obj )
@@ -315,11 +339,15 @@
         {
             return false;
         }
-        if ( useEditMode != that.useEditMode )
+        if ( generateReleasePoms != that.generateReleasePoms )
         {
             return false;
         }
-        if ( generateReleasePoms != that.generateReleasePoms )
+        if ( interactive != that.interactive )
+        {
+            return false;
+        }
+        if ( useEditMode != that.useEditMode )
         {
             return false;
         }
@@ -327,6 +355,11 @@
         {
             return false;
         }
+        if ( developmentVersions != null ? !developmentVersions.equals( 
that.developmentVersions )
+            : that.developmentVersions != null )
+        {
+            return false;
+        }
         if ( passphrase != null ? !passphrase.equals( that.passphrase ) : 
that.passphrase != null )
         {
             return false;
@@ -343,6 +376,10 @@
         {
             return false;
         }
+        if ( releaseVersions != null ? !releaseVersions.equals( 
that.releaseVersions ) : that.releaseVersions != null )
+        {
+            return false;
+        }
         if ( settings != null ? !settings.equals( that.settings ) : 
that.settings != null )
         {
             return false;
@@ -367,5 +404,52 @@
         }
 
         return true;
+    }
+
+    public int hashCode()
+    {
+        int result = completedPhase != null ? completedPhase.hashCode() : 0;
+        result = 29 * result + ( settings != null ? settings.hashCode() : 0 );
+        result = 29 * result + ( tagBase != null ? tagBase.hashCode() : 0 );
+        result = 29 * result + ( username != null ? username.hashCode() : 0 );
+        result = 29 * result + ( password != null ? password.hashCode() : 0 );
+        result = 29 * result + ( url != null ? url.hashCode() : 0 );
+        result = 29 * result + ( privateKey != null ? privateKey.hashCode() : 
0 );
+        result = 29 * result + ( passphrase != null ? passphrase.hashCode() : 
0 );
+        result = 29 * result + ( workingDirectory != null ? 
workingDirectory.hashCode() : 0 );
+        result = 29 * result + ( reactorProjects != null ? 
reactorProjects.hashCode() : 0 );
+        result = 29 * result + ( useEditMode ? 1 : 0 );
+        result = 29 * result + ( addSchema ? 1 : 0 );
+        result = 29 * result + ( generateReleasePoms ? 1 : 0 );
+        result = 29 * result + ( interactive ? 1 : 0 );
+        result = 29 * result + ( releaseVersions != null ? 
releaseVersions.hashCode() : 0 );
+        result = 29 * result + ( developmentVersions != null ? 
developmentVersions.hashCode() : 0 );
+        return result;
+    }
+
+    /**
+     * Map a given project to a specified version from when it is released.
+     *
+     * @param projectId   the project's group and artifact ID
+     * @param nextVersion the version to map to
+     */
+    public void mapReleaseVersion( String projectId, String nextVersion )
+    {
+        assert !releaseVersions.containsKey( projectId );
+
+        releaseVersions.put( projectId, nextVersion );
+    }
+
+    /**
+     * Map a given project to a specified version from when it is incremented 
and placed back into development.
+     *
+     * @param projectId   the project's group and artifact ID
+     * @param nextVersion the version to map to
+     */
+    public void mapDevelopmentVersion( String projectId, String nextVersion )
+    {
+        assert !developmentVersions.containsKey( projectId );
+
+        developmentVersions.put( projectId, nextVersion );
     }
 }

Added: 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java?rev=397148&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java
 (added)
+++ 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java
 Wed Apr 26 01:49:51 2006
@@ -0,0 +1,136 @@
+package org.apache.maven.plugins.release.phase;
+
+/*
+ * Copyright 2005-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 org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.plugins.release.ReleaseExecutionException;
+import org.apache.maven.plugins.release.config.ReleaseConfiguration;
+import org.apache.maven.plugins.release.versions.DefaultVersionInfo;
+import org.apache.maven.plugins.release.versions.VersionInfo;
+import org.apache.maven.plugins.release.versions.VersionParseException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.components.interactivity.Prompter;
+import org.codehaus.plexus.components.interactivity.PrompterException;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+import java.util.Iterator;
+
+/**
+ * Map projects to their new versions after release / into the next 
development cycle.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a>
+ */
+public class MapVersionsPhase
+    extends AbstractLogEnabled
+    implements ReleasePhase
+{
+    /**
+     * Whether to convert to a snapshot or a release.
+     */
+    private boolean convertToSnapshot;
+
+    /**
+     * Component used to prompt for input.
+     */
+    private Prompter prompter;
+
+    void setPrompter( Prompter prompter )
+    {
+        this.prompter = prompter;
+    }
+
+    public void execute( ReleaseConfiguration releaseConfiguration )
+        throws ReleaseExecutionException
+    {
+        for ( Iterator i = 
releaseConfiguration.getReactorProjects().iterator(); i.hasNext(); )
+        {
+            MavenProject project = (MavenProject) i.next();
+
+            String projectId = ArtifactUtils.versionlessKey( 
project.getGroupId(), project.getArtifactId() );
+
+            VersionInfo version = null;
+            try
+            {
+                // TODO: make sure to test inherited version
+                version = new DefaultVersionInfo( project.getVersion() );
+            }
+            catch ( VersionParseException e )
+            {
+                String msg = "Error parsing version, cannot determine next 
version: " + e.getMessage();
+                if ( releaseConfiguration.isInteractive() )
+                {
+                    getLogger().warn( msg );
+                    getLogger().debug( e.getMessage(), e );
+                }
+                else
+                {
+                    // cannot proceed without a next value in batch mode
+                    throw new ReleaseExecutionException( msg, e );
+                }
+            }
+
+            try
+            {
+                if ( convertToSnapshot )
+                {
+                    String nextVersion = null;
+                    if ( version != null )
+                    {
+                        nextVersion = 
version.getNextVersion().getSnapshotVersionString();
+                    }
+
+                    if ( releaseConfiguration.isInteractive() )
+                    {
+                        nextVersion = prompter.prompt( "What is the new 
development version for \"" +
+                            project.getName() + "\"? (" + projectId + ")", 
nextVersion );
+                    }
+
+                    releaseConfiguration.mapDevelopmentVersion( projectId, 
nextVersion );
+                }
+                else
+                {
+                    String nextVersion = null;
+                    if ( version != null )
+                    {
+                        nextVersion = version.getReleaseVersionString();
+                    }
+
+                    if ( releaseConfiguration.isInteractive() )
+                    {
+                        nextVersion = prompter.prompt(
+                            "What is the release version for \"" + 
project.getName() + "\"? (" + projectId + ")",
+                            nextVersion );
+                    }
+
+                    releaseConfiguration.mapReleaseVersion( projectId, 
nextVersion );
+                }
+            }
+            catch ( PrompterException e )
+            {
+                throw new ReleaseExecutionException( "Error reading version 
from input handler: " + e.getMessage(), e );
+            }
+        }
+    }
+
+    public void simulate( ReleaseConfiguration releaseConfiguration )
+        throws ReleaseExecutionException
+    {
+        // It makes no modifications, so simulate is the same as execute
+        execute( releaseConfiguration );
+    }
+
+}

Propchange: 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/MapVersionsPhase.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml?rev=397148&r1=397147&r2=397148&view=diff
==============================================================================
--- 
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
 Wed Apr 26 01:49:51 2006
@@ -18,6 +18,8 @@
       <configuration>
         <phases>
           <phase>check-poms</phase>
+          <phase>map-release-versions</phase>
+          <phase>map-development-versions</phase>
           <phase>scm-check-modifications</phase>
           <phase>check-dependency-snapshots</phase>
           <phase>rewrite-poms-for-release</phase>
@@ -34,6 +36,32 @@
       <role>org.apache.maven.plugins.release.phase.ReleasePhase</role>
       <role-hint>check-poms</role-hint>
       
<implementation>org.apache.maven.plugins.release.phase.CheckPomPhase</implementation>
+    </component>
+    <component>
+      <role>org.apache.maven.plugins.release.phase.ReleasePhase</role>
+      <role-hint>map-release-versions</role-hint>
+      
<implementation>org.apache.maven.plugins.release.phase.MapVersionsPhase</implementation>
+      <configuration>
+        <convertToSnapshot>false</convertToSnapshot>
+      </configuration>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.components.interactivity.Prompter</role>
+        </requirement>
+      </requirements>
+    </component>
+    <component>
+      <role>org.apache.maven.plugins.release.phase.ReleasePhase</role>
+      <role-hint>map-development-versions</role-hint>
+      
<implementation>org.apache.maven.plugins.release.phase.MapVersionsPhase</implementation>
+      <configuration>
+        <convertToSnapshot>true</convertToSnapshot>
+      </configuration>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.components.interactivity.Prompter</role>
+        </requirement>
+      </requirements>
     </component>
     <component>
       <role>org.apache.maven.plugins.release.phase.ReleasePhase</role>

Modified: 
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/config/PropertiesReleaseConfigurationStoreTest.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/config/PropertiesReleaseConfigurationStoreTest.java?rev=397148&r1=397147&r2=397148&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/config/PropertiesReleaseConfigurationStoreTest.java
 (original)
+++ 
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/config/PropertiesReleaseConfigurationStoreTest.java
 Wed Apr 26 01:49:51 2006
@@ -19,6 +19,7 @@
 import org.codehaus.plexus.PlexusTestCase;
 
 import java.io.File;
+import java.util.Map;
 
 /**
  * Test the properties store.
@@ -53,6 +54,24 @@
         assertEquals( "Expected tag base of 'tagBase'", "tagBase", 
config.getTagBase() );
         assertNull( "Expected no workingDirectory", 
config.getWorkingDirectory() );
         assertNull( "Expected no settings", config.getSettings() );
+        assertFalse( "Expected default generateReleasePoms", 
config.isGenerateReleasePoms() );
+        assertFalse( "Expected default useEditMode", config.isUseEditMode() );
+        assertTrue( "Expected default interactive", config.isInteractive() );
+        assertFalse( "Expected default addScema", config.isAddSchema() );
+
+        Map versions = config.getReleaseVersions();
+        assertEquals( "Expected 2 version mappings", 2, versions.size() );
+        assertTrue( "missing project mapping", versions.containsKey( 
"groupId:artifactId1" ) );
+        assertEquals( "Incorrect version mapping", "2.0", versions.get( 
"groupId:artifactId1" ) );
+        assertTrue( "missing project mapping", versions.containsKey( 
"groupId:artifactId2" ) );
+        assertEquals( "Incorrect version mapping", "3.0", versions.get( 
"groupId:artifactId2" ) );
+
+        versions = config.getDevelopmentVersions();
+        assertEquals( "Expected 2 version mappings", 2, versions.size() );
+        assertTrue( "missing project mapping", versions.containsKey( 
"groupId:artifactId1" ) );
+        assertEquals( "Incorrect version mapping", "2.1-SNAPSHOT", 
versions.get( "groupId:artifactId1" ) );
+        assertTrue( "missing project mapping", versions.containsKey( 
"groupId:artifactId2" ) );
+        assertEquals( "Incorrect version mapping", "3.0.1-SNAPSHOT", 
versions.get( "groupId:artifactId2" ) );
     }
 
     public void testReadFromEmptyFile()
@@ -109,14 +128,7 @@
         assertFalse( "Check file doesn't exist", file.exists() );
         store.setPropertiesFile( file );
 
-        ReleaseConfiguration config = new ReleaseConfiguration();
-        config.setCompletedPhase( "completed-phase-write" );
-        config.setUrl( "url-write" );
-        config.setUsername( "username-write" );
-        config.setPassword( "password-write" );
-        config.setPrivateKey( "private-key-write" );
-        config.setPassphrase( "passphrase-write" );
-        config.setTagBase( "tag-base" );
+        ReleaseConfiguration config = createReleaseConfigurationForWriting();
 
         store.write( config );
 
@@ -132,6 +144,17 @@
         assertTrue( "Check file already exists", file.exists() );
         store.setPropertiesFile( file );
 
+        ReleaseConfiguration config = createReleaseConfigurationForWriting();
+
+        store.write( config );
+
+        ReleaseConfiguration rereadConfiguration = store.read();
+
+        assertEquals( "compare configuration", config, rereadConfiguration );
+    }
+
+    private ReleaseConfiguration createReleaseConfigurationForWriting()
+    {
         ReleaseConfiguration config = new ReleaseConfiguration();
         config.setCompletedPhase( "completed-phase-write" );
         config.setUrl( "url-write" );
@@ -141,11 +164,10 @@
         config.setPassphrase( "passphrase-write" );
         config.setTagBase( "tag-base" );
 
-        store.write( config );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
+        config.mapDevelopmentVersion( "groupId:artifactId", "1.1-SNAPSHOT" );
 
-        ReleaseConfiguration rereadConfiguration = store.read();
-
-        assertEquals( "compare configuration", config, rereadConfiguration );
+        return config;
     }
 
     private static void assertDefaultReleaseConfiguration( 
ReleaseConfiguration config )
@@ -160,6 +182,14 @@
 
         assertNull( "Expected no workingDirectory", 
config.getWorkingDirectory() );
         assertNull( "Expected no settings", config.getSettings() );
+
+        assertFalse( "Expected no generateReleasePoms", 
config.isGenerateReleasePoms() );
+        assertFalse( "Expected no useEditMode", config.isUseEditMode() );
+        assertTrue( "Expected default interactive", config.isInteractive() );
+        assertFalse( "Expected no addScema", config.isAddSchema() );
+
+        assertTrue( "Expected no release version mappings", 
config.getReleaseVersions().isEmpty() );
+        assertTrue( "Expected no dev version mappings", 
config.getDevelopmentVersions().isEmpty() );
     }
 
     public ReleaseConfiguration createMergeConfiguration()

Added: 
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.java?rev=397148&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.java
 (added)
+++ 
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.java
 Wed Apr 26 01:49:51 2006
@@ -0,0 +1,308 @@
+package org.apache.maven.plugins.release.phase;
+
+/*
+ * Copyright 2005-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 org.apache.maven.model.Model;
+import org.apache.maven.plugins.release.ReleaseExecutionException;
+import org.apache.maven.plugins.release.config.ReleaseConfiguration;
+import org.apache.maven.plugins.release.versions.VersionParseException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.components.interactivity.Prompter;
+import org.codehaus.plexus.components.interactivity.PrompterException;
+import org.jmock.cglib.Mock;
+import org.jmock.core.constraint.IsAnything;
+import org.jmock.core.constraint.IsEqual;
+import org.jmock.core.constraint.IsNull;
+import org.jmock.core.matcher.InvokeOnceMatcher;
+import org.jmock.core.matcher.TestFailureMatcher;
+import org.jmock.core.stub.ReturnStub;
+import org.jmock.core.stub.ThrowStub;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Test the version mapping phase.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a>
+ */
+public class MapVersionsPhaseTest
+    extends PlexusTestCase
+{
+    public void testMapReleaseVersionsInteractive()
+        throws Exception
+    {
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, 
"test-map-release-versions" );
+
+        Mock mockPrompter = new Mock( Prompter.class );
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" 
).with( new IsAnything(),
+                                                                               
  new IsEqual( "1.0" ) ).will(
+            new ReturnStub( "2.0" ) );
+        phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+        List reactorProjects = Collections.singletonList( createProject( 
"artifactId", "1.0-SNAPSHOT" ) );
+
+        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+
+        phase.execute( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "2.0" ),
+                      releaseConfiguration.getReleaseVersions() );
+
+        releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+
+        mockPrompter.reset();
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" 
).with( new IsAnything(),
+                                                                               
  new IsEqual( "1.0" ) ).will(
+            new ReturnStub( "2.0" ) );
+
+        phase.simulate( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "2.0" ),
+                      releaseConfiguration.getReleaseVersions() );
+    }
+
+    public void testMapReleaseVersionsNonInteractive()
+        throws Exception
+    {
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, 
"test-map-release-versions" );
+
+        Mock mockPrompter = new Mock( Prompter.class );
+        mockPrompter.expects( new TestFailureMatcher( "prompter should not be 
called" ) ).method( "prompt" );
+        phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+        List reactorProjects = Collections.singletonList( createProject( 
"artifactId", "1.0-SNAPSHOT" ) );
+
+        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+        releaseConfiguration.setInteractive( false );
+
+        phase.execute( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "1.0" ),
+                      releaseConfiguration.getReleaseVersions() );
+
+        mockPrompter.reset();
+        mockPrompter.expects( new TestFailureMatcher( "prompter should not be 
called" ) ).method( "prompt" );
+
+        releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+        releaseConfiguration.setInteractive( false );
+
+        phase.simulate( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "1.0" ),
+                      releaseConfiguration.getReleaseVersions() );
+    }
+
+    public void testMapDevVersionsInteractive()
+        throws Exception
+    {
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, 
"test-map-development-versions" );
+
+        Mock mockPrompter = new Mock( Prompter.class );
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" 
).with( new IsAnything(),
+                                                                               
  new IsEqual( "1.1-SNAPSHOT" ) ).will(
+            new ReturnStub( "2.0-SNAPSHOT" ) );
+        phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+        List reactorProjects = Collections.singletonList( createProject( 
"artifactId", "1.0" ) );
+
+        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+
+        phase.execute( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "2.0-SNAPSHOT" ),
+                      releaseConfiguration.getDevelopmentVersions() );
+
+        releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+
+        mockPrompter.reset();
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" 
).with( new IsAnything(),
+                                                                               
  new IsEqual( "1.1-SNAPSHOT" ) ).will(
+            new ReturnStub( "2.0-SNAPSHOT" ) );
+
+        phase.simulate( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "2.0-SNAPSHOT" ),
+                      releaseConfiguration.getDevelopmentVersions() );
+    }
+
+    public void testMapDevVersionsNonInteractive()
+        throws Exception
+    {
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, 
"test-map-development-versions" );
+
+        Mock mockPrompter = new Mock( Prompter.class );
+        mockPrompter.expects( new TestFailureMatcher( "prompter should not be 
called" ) ).method( "prompt" );
+        phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+        List reactorProjects = Collections.singletonList( createProject( 
"artifactId", "1.0" ) );
+
+        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+        releaseConfiguration.setInteractive( false );
+
+        phase.execute( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "1.1-SNAPSHOT" ),
+                      releaseConfiguration.getDevelopmentVersions() );
+
+        mockPrompter.reset();
+        mockPrompter.expects( new TestFailureMatcher( "prompter should not be 
called" ) ).method( "prompt" );
+
+        releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+        releaseConfiguration.setInteractive( false );
+
+        phase.simulate( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "1.1-SNAPSHOT" ),
+                      releaseConfiguration.getDevelopmentVersions() );
+    }
+
+    public void testPrompterException()
+        throws Exception
+    {
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, 
"test-map-development-versions" );
+
+        Mock mockPrompter = new Mock( Prompter.class );
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" 
).will(
+            new ThrowStub( new PrompterException( "..." ) ) );
+        phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+        List reactorProjects = Collections.singletonList( createProject( 
"artifactId", "1.0" ) );
+
+        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+
+        try
+        {
+            phase.execute( releaseConfiguration );
+
+            fail( "Expected an exception" );
+        }
+        catch ( ReleaseExecutionException e )
+        {
+            assertEquals( "check cause", PrompterException.class, 
e.getCause().getClass() );
+        }
+
+        releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+
+        mockPrompter.reset();
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" 
).will(
+            new ThrowStub( new PrompterException( "..." ) ) );
+
+        try
+        {
+            phase.simulate( releaseConfiguration );
+
+            fail( "Expected an exception" );
+        }
+        catch ( ReleaseExecutionException e )
+        {
+            assertEquals( "check cause", PrompterException.class, 
e.getCause().getClass() );
+        }
+    }
+
+    public void testInvalidVersionInteractive()
+        throws Exception
+    {
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, 
"test-map-development-versions" );
+
+        Mock mockPrompter = new Mock( Prompter.class );
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" 
).with( new IsAnything(), new IsNull() ).will(
+            new ReturnStub( "2.0-SNAPSHOT" ) );
+        phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+        List reactorProjects = Collections.singletonList( createProject( 
"artifactId", "foo" ) );
+
+        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+
+        phase.execute( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "2.0-SNAPSHOT" ),
+                      releaseConfiguration.getDevelopmentVersions() );
+
+        mockPrompter.reset();
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" 
).with( new IsAnything(), new IsNull() ).will(
+            new ReturnStub( "2.0-SNAPSHOT" ) );
+
+        releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+
+        phase.simulate( releaseConfiguration );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( 
"groupId:artifactId", "2.0-SNAPSHOT" ),
+                      releaseConfiguration.getDevelopmentVersions() );
+    }
+
+    public void testInvalidVersionNonInteractive()
+        throws Exception
+    {
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, 
"test-map-development-versions" );
+
+        List reactorProjects = Collections.singletonList( createProject( 
"artifactId", "foo" ) );
+
+        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+        releaseConfiguration.setInteractive( false );
+
+        try
+        {
+            phase.execute( releaseConfiguration );
+
+            fail( "Expected an exception" );
+        }
+        catch ( ReleaseExecutionException e )
+        {
+            assertEquals( "check cause", VersionParseException.class, 
e.getCause().getClass() );
+        }
+
+        releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( reactorProjects );
+        releaseConfiguration.setInteractive( false );
+
+        try
+        {
+            phase.simulate( releaseConfiguration );
+
+            fail( "Expected an exception" );
+        }
+        catch ( ReleaseExecutionException e )
+        {
+            assertEquals( "check cause", VersionParseException.class, 
e.getCause().getClass() );
+        }
+    }
+
+    private static MavenProject createProject( String artifactId, String 
version )
+    {
+        Model model = new Model();
+        model.setGroupId( "groupId" );
+        model.setArtifactId( artifactId );
+        model.setVersion( version );
+        return new MavenProject( model );
+    }
+
+}

Propchange: 
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/plugins/trunk/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.xml
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.xml?rev=397148&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.xml
 (added)
+++ 
maven/plugins/trunk/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.xml
 Wed Apr 26 01:49:51 2006
@@ -0,0 +1,36 @@
+<!--
+  ~ Copyright 2005-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.
+  -->
+
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.plugins.release.phase.ReleasePhase</role>
+      <role-hint>test-map-development-versions</role-hint>
+      
<implementation>org.apache.maven.plugins.release.phase.MapVersionsPhase</implementation>
+      <configuration>
+        <convertToSnapshot>true</convertToSnapshot>
+      </configuration>
+    </component>
+    <component>
+      <role>org.apache.maven.plugins.release.phase.ReleasePhase</role>
+      <role-hint>test-map-release-versions</role-hint>
+      
<implementation>org.apache.maven.plugins.release.phase.MapVersionsPhase</implementation>
+      <configuration>
+        <convertToSnapshot>false</convertToSnapshot>
+      </configuration>
+    </component>
+  </components>
+</component-set>

Propchange: 
maven/plugins/trunk/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-release-plugin/src/test/resources/org/apache/maven/plugins/release/phase/MapVersionsPhaseTest.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
maven/plugins/trunk/maven-release-plugin/src/test/resources/release.properties
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/resources/release.properties?rev=397148&r1=397147&r2=397148&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-release-plugin/src/test/resources/release.properties 
(original)
+++ 
maven/plugins/trunk/maven-release-plugin/src/test/resources/release.properties 
Wed Apr 26 01:49:51 2006
@@ -21,3 +21,8 @@
 scm.privateKey=private-key
 scm.passphrase=passphrase
 scm.tagBase=tagBase
+
+project.rel.groupId\:artifactId1=2.0
+project.rel.groupId\:artifactId2=3.0
+project.dev.groupId\:artifactId1=2.1-SNAPSHOT
+project.dev.groupId\:artifactId2=3.0.1-SNAPSHOT


Reply via email to