You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2012/08/26 23:19:53 UTC

svn commit: r1377520 - in /maven/release/trunk/maven-release-manager/src: main/java/org/apache/maven/shared/release/phase/ test/java/org/apache/maven/shared/release/phase/

Author: rfscholte
Date: Sun Aug 26 21:19:53 2012
New Revision: 1377520

URL: http://svn.apache.org/viewvc?rev=1377520&view=rev
Log:
Refactoring for MRELEASE-511: release:prepare "Error parsing version, cannot determine next version: Unable to parse the version string" when running in batch mode. 

Modified:
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePhase.java
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
    maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePhase.java?rev=1377520&r1=1377519&r2=1377520&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePhase.java Sun Aug 26 21:19:53 2012
@@ -29,6 +29,8 @@ import org.apache.maven.shared.release.e
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
 import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
 
 /**
  * Base class for all phases.
@@ -39,6 +41,11 @@ public abstract class AbstractReleasePha
     extends AbstractLogEnabled
     implements ReleasePhase
 {
+    protected ResourceBundle getResourceBundle( Locale locale )
+    {
+        return ResourceBundle.getBundle( "release-messages", locale, this.getClass().getClassLoader() );
+    }
+    
     public ReleaseResult clean( List<MavenProject> reactorProjects )
     {
         // nothing to do by default

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java?rev=1377520&r1=1377519&r2=1377520&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java Sun Aug 26 21:19:53 2012
@@ -21,7 +21,6 @@ package org.apache.maven.shared.release.
 
 import java.text.MessageFormat;
 import java.util.List;
-import java.util.Locale;
 import java.util.ResourceBundle;
 
 import org.apache.maven.artifact.ArtifactUtils;
@@ -32,20 +31,40 @@ import org.apache.maven.shared.release.c
 import org.apache.maven.shared.release.env.ReleaseEnvironment;
 import org.apache.maven.shared.release.util.ReleaseUtil;
 import org.apache.maven.shared.release.versions.DefaultVersionInfo;
-import org.apache.maven.shared.release.versions.VersionInfo;
 import org.apache.maven.shared.release.versions.VersionParseException;
 import org.codehaus.plexus.components.interactivity.Prompter;
 import org.codehaus.plexus.components.interactivity.PrompterException;
 
 /**
  * Map projects to their new versions after release / into the next development cycle.
+ * 
+ * The map-phases per goal are:
+ * <dl>
+ *  <dt>release:prepare</dt><dd>map-release-versions + map-development-versions; RD.isBranchCreation() = false</dd>
+ *  <dt>release:branch</dt><dd>map-branch-versions + map-development-versions; RD.isBranchCreation() = true</dd>
+ *  <dt>release:update-versions</dt><dd>map-development-versions; RD.isBranchCreation() = false</dd>
+ * </dl>
+ * 
+ * <p>
+ * <table>
+ *   <tr>
+ *     <th>MapVersionsPhase field</th><th>map-release-versions</th><th>map-branch-versions</th><th>map-development-versions</th>
+ *   </tr>
+ *   <tr>
+ *     <td>convertToSnapshot</td>     <td>false</td>               <td>true</td>               <td>true</td>
+ *   </tr>
+ *   <tr>
+ *     <td>convertToBranch</td>       <td>false</td>               <td>true</td>               <td>false</td>
+ *   </tr>
+ * </table>
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author Robert Scholte
  */
 public class MapVersionsPhase
     extends AbstractReleasePhase
 {
-    private ResourceBundle resourceBundle = ResourceBundle.getBundle( "release-messages", Locale.ENGLISH, MapVersionsPhase.class.getClassLoader() );
+    private ResourceBundle resourceBundle;
     
     /**
      * Whether to convert to a snapshot or a release.
@@ -72,6 +91,8 @@ public class MapVersionsPhase
         throws ReleaseExecutionException
     {
         ReleaseResult result = new ReleaseResult();
+        
+        resourceBundle = getResourceBundle( releaseEnvironment.getLocale() );
 
         MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects );
 
@@ -82,7 +103,7 @@ public class MapVersionsPhase
 
             String projectId = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
 
-            String nextVersion = getNextVersion( project, projectId, releaseDescriptor, result );
+            String nextVersion = resolveNextVersion( project, projectId, releaseDescriptor, result );
 
             if ( convertToSnapshot )
             {
@@ -138,7 +159,7 @@ public class MapVersionsPhase
             {
                 String projectId = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
 
-                String nextVersion = getNextVersion( project, projectId, releaseDescriptor, result );
+                String nextVersion = resolveNextVersion( project, projectId, releaseDescriptor, result );
 
                 if ( convertToSnapshot )
                 {
@@ -163,197 +184,119 @@ public class MapVersionsPhase
         return result;
     }
 
-    private String getNextVersion( MavenProject project, 
+    private String resolveNextVersion( MavenProject project, 
                                    String projectId, 
                                    ReleaseDescriptor releaseDescriptor,
                                    ReleaseResult result )
         throws ReleaseExecutionException
     {
-        String nextVersion = null;
-
-        VersionInfo currentVersionInfo = null;
-        VersionInfo releaseVersionInfo = null;
-        boolean releaseVersionIsExplicit = false;
-
-        VersionInfo nextSnapshotVersionInfo = null;
-        boolean nextSnapshotVersionIsExplicit = false;
-
-        try
+        String nextVersion;
+        if ( convertToBranch )
         {
-            currentVersionInfo = new DefaultVersionInfo( project.getVersion() );
-
-            // The release/branch version defaults to currentVersionInfo (snapshot for branch, and release for tag)
-            releaseVersionInfo = currentVersionInfo;
-
-            // Check if the user specified a release version
-            if ( releaseDescriptor.getDefaultReleaseVersion() != null )
+            // no branch modification
+            if( !( releaseDescriptor.isUpdateBranchVersions()
+                          && ( ArtifactUtils.isSnapshot( project.getVersion() ) || releaseDescriptor.isUpdateVersionsToSnapshot() ) ) )
             {
-                releaseVersionInfo = new DefaultVersionInfo( releaseDescriptor.getDefaultReleaseVersion() );
-                releaseVersionIsExplicit = true;
+                return project.getVersion();
             }
-
-            String releaseVersion = ( String ) releaseDescriptor.getReleaseVersions().get( projectId );
-            if ( releaseVersion != null )
-            {
-                releaseVersionInfo = new DefaultVersionInfo( releaseVersion );
-                releaseVersionIsExplicit = true;
-            }
-
-            // The next snapshot version defaults to the next version after the release version
-            nextSnapshotVersionInfo = releaseVersionInfo.getNextVersion();
-
-            // Check if the user specified a new snapshot version
-            if ( releaseDescriptor.getDefaultDevelopmentVersion() != null )
+            
+            nextVersion = getReleaseVersion( projectId, releaseDescriptor );
+        }
+        else if ( !convertToSnapshot ) // map-release-version
+        {
+            nextVersion = getReleaseVersion( projectId, releaseDescriptor );
+        }
+        else if ( releaseDescriptor.isBranchCreation() )
+        {
+            // no working copy modification
+            if( !( ArtifactUtils.isSnapshot( project.getVersion() )
+                          && releaseDescriptor.isUpdateWorkingCopyVersions() ) )
             {
-                nextSnapshotVersionInfo = new DefaultVersionInfo( releaseDescriptor.getDefaultDevelopmentVersion() );
-                nextSnapshotVersionIsExplicit = true;
+                return project.getVersion();
             }
-
-            String nextDevVersion = ( String ) releaseDescriptor.getDevelopmentVersions().get( projectId );
-            if ( nextDevVersion != null )
+            
+            nextVersion = releaseDescriptor.getDefaultDevelopmentVersion();
+            if ( nextVersion == null )
             {
-                nextSnapshotVersionInfo = new DefaultVersionInfo( nextDevVersion );
-                nextSnapshotVersionIsExplicit = true;
+                nextVersion = ( String ) releaseDescriptor.getDevelopmentVersions().get( projectId );
             }
-
         }
-        catch ( VersionParseException e )
+        else
         {
-            String msg = "Error parsing version, cannot determine next version: " + e.getMessage();
-            if ( releaseDescriptor.isInteractive() )
+            // no working copy modification
+            if( !( releaseDescriptor.isUpdateWorkingCopyVersions() ) )
             {
-                logWarn( result, msg );
-                logDebug( result, e.getMessage(), e );
-
-                // set defaults for resume in interactive mode
-                if ( releaseVersionInfo == null )
-                {
-                    try
-                    {
-                        releaseVersionInfo = new DefaultVersionInfo( "1.0" );
-                    }
-                    catch ( VersionParseException e1 )
-                    {
-                        // if that happens we are in serious trouble!
-                        throw new ReleaseExecutionException( "Version 1.0 could not be parsed!", e1 );
-                    }
-                }
-
-                if ( nextSnapshotVersionInfo == null )
-                {
-                    nextSnapshotVersionInfo = releaseVersionInfo.getNextVersion();
-                }
+                return project.getVersion();
             }
-            else
+            
+            nextVersion = releaseDescriptor.getDefaultDevelopmentVersion();
+            if ( nextVersion == null )
             {
-                // cannot proceed without a next value in batch mode
-                throw new ReleaseExecutionException( msg, e );
+                nextVersion = ( String ) releaseDescriptor.getDevelopmentVersions().get( projectId );
             }
         }
-
+        
+        String suggestedVersion = null;
+        String messageKey = null;
         try
         {
-            if ( convertToSnapshot )
+            while( nextVersion == null || ArtifactUtils.isSnapshot( nextVersion ) != convertToSnapshot )
             {
-                if ( releaseDescriptor.isBranchCreation() )
+                if ( suggestedVersion == null )
                 {
-                    if ( convertToBranch )
+                    DefaultVersionInfo versionInfo;
+                    try
                     {
-                        // branch modification
-                        if ( releaseDescriptor.isUpdateBranchVersions()
-                            && ( ArtifactUtils.isSnapshot( project.getVersion() ) || releaseDescriptor.isUpdateVersionsToSnapshot() ) )
+                        String baseVersion = null;
+                        if( convertToSnapshot )
                         {
-                            String suggestedVersion = releaseVersionInfo.getSnapshotVersionString();
-                            
-                            if ( !releaseVersionIsExplicit && releaseDescriptor.isInteractive() )
-                            {
-                                String message =
-                                    MessageFormat.format( resourceBundle.getString( "mapversion.prompt.branch" ),
-                                                          project.getName(), projectId );
-                                nextVersion = prompter.prompt( message, suggestedVersion );
-                            }
-                            else
-                            {
-                                nextVersion = suggestedVersion;
-                            }
+                            baseVersion = getReleaseVersion( projectId, releaseDescriptor );
                         }
-                        else
+                        // unspecified and unmapped version, so use project version 
+                        if( baseVersion == null )
                         {
-                            nextVersion = project.getVersion();
+                            baseVersion = project.getVersion();
                         }
-
+                        versionInfo = new DefaultVersionInfo( baseVersion );
                     }
-                    else
+                    catch ( VersionParseException e )
                     {
-                        // working copy modification
-                        if ( ArtifactUtils.isSnapshot( project.getVersion() )
-                            && releaseDescriptor.isUpdateWorkingCopyVersions() )
+                        if( releaseDescriptor.isInteractive() )
                         {
-                            String suggestedVersion = nextSnapshotVersionInfo.getSnapshotVersionString();
-                            
-                            if ( releaseDescriptor.isInteractive() && !nextSnapshotVersionIsExplicit )
+                            try
                             {
-                                String message =
-                                    MessageFormat.format( resourceBundle.getString( "mapversion.prompt.workingcopy" ),
-                                                          project.getName(), projectId );
-                                nextVersion = prompter.prompt( message, suggestedVersion );
+                                versionInfo = new DefaultVersionInfo( "1.0" );
                             }
-                            else
+                            catch ( VersionParseException e1 )
                             {
-                                nextVersion = suggestedVersion;
+                                // if that happens we are in serious trouble!
+                                throw new ReleaseExecutionException( "Version 1.0 could not be parsed!", e1 );
                             }
                         }
                         else
                         {
-                            nextVersion = project.getVersion();
+                            throw new ReleaseExecutionException( "Error parsing version, cannot determine next version: " + e.getMessage(), e );
                         }
                     }
+                    suggestedVersion =
+                        convertToSnapshot ? versionInfo.getNextVersion().getSnapshotVersionString()
+                                        : versionInfo.getReleaseVersionString(); 
                 }
-                else
+                
+                if( releaseDescriptor.isInteractive() )
                 {
-                    if( releaseDescriptor.isUpdateWorkingCopyVersions() )
+                    if( messageKey == null )
                     {
-                        String suggestedVersion = nextSnapshotVersionInfo.getSnapshotVersionString();
-                        
-                        if ( releaseDescriptor.isInteractive()  && !nextSnapshotVersionIsExplicit )
-                        {
-                            String message =
-                                MessageFormat.format( resourceBundle.getString( "mapversion.prompt.development" ),
-                                                      project.getName(), projectId );
-                            nextVersion = prompter.prompt( message, suggestedVersion );
-                        }
-                        else
-                        {
-                            nextVersion = suggestedVersion;
-                        }
-                    }
-                    else
-                    {
-                        nextVersion = project.getVersion();
-                    }
-                }
-            }
-            else
-            {
-                if ( ArtifactUtils.isSnapshot( project.getVersion() ) )
-                {
-                    String suggestedVersion = releaseVersionInfo.getReleaseVersionString();
-
-                    if ( releaseDescriptor.isInteractive() && !releaseVersionIsExplicit )
-                    {
-                        String message =
-                            MessageFormat.format( resourceBundle.getString( "mapversion.prompt.release" ),
-                                                  project.getName(), projectId );
-                        nextVersion = prompter.prompt( message, suggestedVersion );
-                    }
-                    else
-                    {
-                        nextVersion = suggestedVersion;
+                        messageKey = getMapversionPromptKey( releaseDescriptor );
                     }
+                    String message =
+                        MessageFormat.format( resourceBundle.getString( messageKey ),
+                                              project.getName(), projectId );
+                    nextVersion = prompter.prompt( message, suggestedVersion );
                 }
                 else
                 {
-                    nextVersion = project.getVersion();
+                    nextVersion = suggestedVersion;
                 }
             }
         }
@@ -361,9 +304,44 @@ public class MapVersionsPhase
         {
             throw new ReleaseExecutionException( "Error reading version from input handler: " + e.getMessage(), e );
         }
+        return nextVersion;
+    }
 
+    private String getReleaseVersion( String projectId, ReleaseDescriptor releaseDescriptor )
+    {
+        String nextVersion = releaseDescriptor.getDefaultReleaseVersion();
+        if ( nextVersion == null )
+        {
+            nextVersion = ( String ) releaseDescriptor.getReleaseVersions().get( projectId );
+        }
         return nextVersion;
     }
+    
+
+    private String getMapversionPromptKey( ReleaseDescriptor releaseDescriptor )
+    {
+        String messageKey;
+        if ( convertToBranch )
+        {
+            messageKey = "mapversion.prompt.branch";
+        }
+        else if ( convertToSnapshot )
+        {
+            if ( releaseDescriptor.isBranchCreation() )
+            {
+                messageKey = "mapversion.prompt.workingcopy";
+            }
+            else
+            {
+                messageKey = "mapversion.prompt.development";
+            }
+        }
+        else
+        {
+            messageKey = "mapversion.prompt.release";
+        }
+        return messageKey;
+    }
 
     public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
                                    List<MavenProject> reactorProjects )

Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java?rev=1377520&r1=1377519&r2=1377520&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java Sun Aug 26 21:19:53 2012
@@ -1150,7 +1150,10 @@ public class MapVersionsPhaseTest
         phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2-SNAPSHOT" ),
+        // updateBranchVersions is set to true, so suggest the next snapshot version
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
                       releaseDescriptor.getReleaseVersions() );
         assertNull( "Check development versions", releaseDescriptor.getDevelopmentVersions().get( "groupId:artifactId" ) );
     }
@@ -1172,7 +1175,10 @@ public class MapVersionsPhaseTest
         phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2-SNAPSHOT" ),
+        // updateBranchVersions is set to true, so suggest the next snapshot version
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
                       releaseDescriptor.getReleaseVersions() );
         assertNull( "Check development versions", releaseDescriptor.getDevelopmentVersions().get( "groupId:artifactId" ) );
     }
@@ -1279,14 +1285,19 @@ public class MapVersionsPhaseTest
         releaseDescriptor.setBranchCreation( true );
         releaseDescriptor.setUpdateBranchVersions( true );
 
-        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
+		// updateBranchVersions is set to true, so suggest the next snapshot version
+		// org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+		// org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
         phase.setPrompter( mockPrompter );
 
         // test
         phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) );
+		// org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+		// org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) );
     }
 
     public void testSimulateSnapshotBranchCreation_UpdateBranchVersions_MapBranch()
@@ -1301,14 +1312,19 @@ public class MapVersionsPhaseTest
         releaseDescriptor.setBranchCreation( true );
         releaseDescriptor.setUpdateBranchVersions( true );
 
-        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
+		// updateBranchVersions is set to true, so suggest the next snapshot version
+		// org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+		// org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
         phase.setPrompter( mockPrompter );
 
         // test
         phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) );
+		// org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+		// org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) );
     }
     
     public void testExecuteReleaseBranchCreation_UpdateBranchVersions_UpdateVersionsToSnapshot_MapBranch()
@@ -1324,15 +1340,19 @@ public class MapVersionsPhaseTest
         releaseDescriptor.setUpdateBranchVersions( true );
         releaseDescriptor.setUpdateVersionsToSnapshot( true );
 
-        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) ) ).thenReturn( "2.1-SNAPSHOT" );
+		// updateBranchVersions is set to true, so suggest the next snapshot version
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT (yes, one step back!)
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.1-SNAPSHOT" );
         phase.setPrompter( mockPrompter );
 
         // test
         phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        // @TODO FIX: this should have been 1.3-SNAPSHOT, not a step back
-        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) );
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT (yes, one step back!)
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) );
         assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "2.1-SNAPSHOT" ),
                       releaseDescriptor.getReleaseVersions() );
         assertNull( "Check development versions", releaseDescriptor.getDevelopmentVersions().get( "groupId:artifactId" ) );
@@ -1351,15 +1371,19 @@ public class MapVersionsPhaseTest
         releaseDescriptor.setUpdateBranchVersions( true );
         releaseDescriptor.setUpdateVersionsToSnapshot( true );
 
-        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) ) ).thenReturn( "2.1-SNAPSHOT" );
+		// updateBranchVersions is set to true, so suggest the next snapshot version
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT (yes, one step back!)
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.1-SNAPSHOT" );
         phase.setPrompter( mockPrompter );
 
         // test
         phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        // @TODO FIX: this should have been 1.3-SNAPSHOT, not a step back
-        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) );
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT (yes, one step back!)
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) );
         assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "2.1-SNAPSHOT" ),
                       releaseDescriptor.getReleaseVersions() );
         assertNull( "Check development versions", releaseDescriptor.getDevelopmentVersions().get( "groupId:artifactId" ) );
@@ -1378,14 +1402,19 @@ public class MapVersionsPhaseTest
         releaseDescriptor.setUpdateBranchVersions( true );
         releaseDescriptor.setUpdateVersionsToSnapshot( true );
 
-        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
+		// updateBranchVersions is set to true, so suggest the next snapshot version
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
         phase.setPrompter( mockPrompter );
 
         // test
         phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) );
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) );
     }
 
     public void testSimulateSnapshotBranchCreation_UpdateBranchVersions_UpdateVersionsToSnapshot_MapBranch()
@@ -1401,14 +1430,19 @@ public class MapVersionsPhaseTest
         releaseDescriptor.setUpdateBranchVersions( true );
         releaseDescriptor.setUpdateVersionsToSnapshot( true );
 
-        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
+		// updateBranchVersions is set to true, so suggest the next snapshot version
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        when( mockPrompter.prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
         phase.setPrompter( mockPrompter );
 
         // test
         phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.2-SNAPSHOT" ) );
+        // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
+        // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
+        verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) );
     }
     
     public void testExecuteReleaseBranchCreation_MapBranch()
@@ -1511,10 +1545,12 @@ public class MapVersionsPhaseTest
 
         ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
         releaseDescriptor.setBranchCreation( true );
-
-        // test
+        // org.apache.maven.release:maven-release-manager:(,2.4) > true
+        // org.apache.maven.release:maven-release-manager:[2.4,) > false
+        releaseDescriptor.setInteractive( false );
         phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
+        
         // verify
         assertNull( "Check release versions", releaseDescriptor.getReleaseVersions().get( "groupId:artifactId" ) );
         assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2" ), releaseDescriptor.getDevelopmentVersions() );
@@ -1530,6 +1566,9 @@ public class MapVersionsPhaseTest
 
         ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
         releaseDescriptor.setBranchCreation( true );
+        // org.apache.maven.release:maven-release-manager:(,2.4) > true
+        // org.apache.maven.release:maven-release-manager:[2.4,) > false
+        releaseDescriptor.setInteractive( false );
 
         // test
         phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
@@ -1630,16 +1669,14 @@ public class MapVersionsPhaseTest
         ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
         releaseDescriptor.setBranchCreation( true );
         releaseDescriptor.setUpdateBranchVersions( true );
-
+        // org.apache.maven.release:maven-release-manager:(,2.4) > true
+        // org.apache.maven.release:maven-release-manager:[2.4,) > false
+        releaseDescriptor.setInteractive( false );
+        
         // test
         phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        /*
-         * "By default, the POM in the new branch keeps the same version as the local working copy, and the local POM is incremented to the next revision."
-         * This is true for trunk, but when branching from a tag I would expect the next SNAPSHOT version. For now keep
-         * '1.2' instead of '1.3-SNAPSHOT' until further investigation.
-         */
         assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
                       releaseDescriptor.getReleaseVersions() );
         assertNull( "Check development versions", releaseDescriptor.getDevelopmentVersions().get( "groupId:artifactId" ) );
@@ -1656,16 +1693,14 @@ public class MapVersionsPhaseTest
         ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
         releaseDescriptor.setBranchCreation( true );
         releaseDescriptor.setUpdateBranchVersions( true );
-
+        // org.apache.maven.release:maven-release-manager:(,2.4) > true
+        // org.apache.maven.release:maven-release-manager:[2.4,) > false
+        releaseDescriptor.setInteractive( false );
+        
         // test
         phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        /*
-         * "By default, the POM in the new branch keeps the same version as the local working copy, and the local POM is incremented to the next revision."
-         * This is true for trunk, but when branching from a tag I would expect the next SNAPSHOT version. For now keep
-         * '1.2' instead of '1.3-SNAPSHOT' until further investigation.
-         */
         assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
                       releaseDescriptor.getReleaseVersions() );
         assertNull( "Check development versions", releaseDescriptor.getDevelopmentVersions().get( "groupId:artifactId" ) );