You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2010/09/29 10:01:00 UTC

svn commit: r1002505 - in /maven/release/trunk/maven-release-manager/src: main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java main/mdo/release-descriptor.mdo test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java

Author: brett
Date: Wed Sep 29 08:00:59 2010
New Revision: 1002505

URL: http://svn.apache.org/viewvc?rev=1002505&view=rev
Log:
[MRELEASE-524] command line versions don't seem to work on release:branch for specific format
- In interactive mode, the user was allways asked. Now he is only asked when the user did not specify versions explicitely. The fallback-suggestions on errors now are 1.0 for release, and 1.1-SNAPSHOT for development version. 
- removed two runtime assertions that overeagerly tried to protect the ReleaseDescriptor
- Added test cases
Submitted by: Lars Corneliussen

Modified:
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
    maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo
    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/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=1002505&r1=1002504&r2=1002505&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 Wed Sep 29 08:00:59 2010
@@ -170,19 +170,23 @@ public class MapVersionsPhase
 
         VersionInfo currentVersionInfo = null;
         VersionInfo releaseVersionInfo = null;
+        boolean releaseVersionIsExplicit = false;
+
         VersionInfo nextSnapshotVersionInfo = null;
+        boolean nextSnapshotVersionIsExplicit = false;
 
         try
         {
             currentVersionInfo = new DefaultVersionInfo( project.getVersion() );
 
-            // The release version defaults to currentVersionInfo.getReleaseVersionString()
+            // 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 )
             {
                 releaseVersionInfo = new DefaultVersionInfo( releaseDescriptor.getDefaultReleaseVersion() );
+                releaseVersionIsExplicit = true;
             }
             if ( releaseDescriptor.getReleaseVersions() != null )
             {
@@ -190,18 +194,18 @@ public class MapVersionsPhase
                 if ( releaseVersion != null )
                 {
                     releaseVersionInfo = new DefaultVersionInfo( releaseVersion );
+                    releaseVersionIsExplicit = true;
                 }
             }
 
-            if ( releaseVersionInfo != null )
-            {
-                nextSnapshotVersionInfo = releaseVersionInfo.getNextVersion();
-            }
+            // 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 )
             {
                 nextSnapshotVersionInfo = new DefaultVersionInfo( releaseDescriptor.getDefaultDevelopmentVersion() );
+                nextSnapshotVersionIsExplicit = true;
             }
             if ( releaseDescriptor.getDevelopmentVersions() != null )
             {
@@ -209,6 +213,7 @@ public class MapVersionsPhase
                 if ( nextDevVersion != null )
                 {
                     nextSnapshotVersionInfo = new DefaultVersionInfo( nextDevVersion );
+                    nextSnapshotVersionIsExplicit = true;
                 }
             }
 
@@ -220,6 +225,25 @@ public class MapVersionsPhase
             {
                 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();
+                }
             }
             else
             {
@@ -241,25 +265,13 @@ public class MapVersionsPhase
                             ArtifactUtils.isSnapshot( project.getVersion() ) ||
                                 releaseDescriptor.isUpdateVersionsToSnapshot() ) )
                         {
-                            if ( releaseVersionInfo != null )
-                            {
-                                nextVersion = releaseVersionInfo.getSnapshotVersionString();
-                            }
-
-                            if ( releaseDescriptor.isInteractive() )
+                            nextVersion = releaseVersionInfo.getSnapshotVersionString();
+                            if ( !releaseVersionIsExplicit && releaseDescriptor.isInteractive() )
                             {
                                 nextVersion = prompter.prompt(
                                     "What is the branch version for \"" + project.getName() + "\"? (" + projectId + ")",
                                     nextVersion );
                             }
-                            else
-                            {
-                                Map relVersions = releaseDescriptor.getDevelopmentVersions();
-                                if ( relVersions.containsKey( projectId ) )
-                                {
-                                    nextVersion = relVersions.remove( projectId ).toString();
-                                }
-                            }
                         }
                         else
                         {
@@ -273,31 +285,12 @@ public class MapVersionsPhase
                         if ( ArtifactUtils.isSnapshot( project.getVersion() ) &&
                             releaseDescriptor.isUpdateWorkingCopyVersions() )
                         {
-                            if ( currentVersionInfo != null )
-                            {
-                                if ( nextSnapshotVersionInfo != null )
-                                {
-                                    nextVersion = nextSnapshotVersionInfo.getSnapshotVersionString();
-                                }
-                                else
-                                {
-                                    nextVersion = "1.0-SNAPSHOT";
-                                }
-                            }
-
-                            if ( releaseDescriptor.isInteractive() )
+                            nextVersion = nextSnapshotVersionInfo.getSnapshotVersionString();
+                            if ( releaseDescriptor.isInteractive() && !nextSnapshotVersionIsExplicit )
                             {
                                 nextVersion = prompter.prompt( "What is the new working copy version for \"" +
                                     project.getName() + "\"? (" + projectId + ")", nextVersion );
                             }
-                            else
-                            {
-                                Map devVersions = releaseDescriptor.getDevelopmentVersions();
-                                if ( devVersions.containsKey( projectId ) )
-                                {
-                                    nextVersion = devVersions.remove( projectId ).toString();
-                                }
-                            }
                         }
                         else
                         {
@@ -307,56 +300,26 @@ public class MapVersionsPhase
                 }
                 else
                 {
-                    if ( currentVersionInfo != null )
-                    {
-                        if ( nextSnapshotVersionInfo != null )
-                        {
-                            nextVersion = nextSnapshotVersionInfo.getSnapshotVersionString();
-                        }
-                        else
-                        {
-                            nextVersion = "1.0-SNAPSHOT";
-                        }
-                    }
-
-                    if ( releaseDescriptor.isInteractive() )
+                    nextVersion = nextSnapshotVersionInfo.getSnapshotVersionString();
+                    if ( releaseDescriptor.isInteractive()  && !nextSnapshotVersionIsExplicit )
                     {
                         nextVersion = prompter.prompt( "What is the new development version for \"" +
                             project.getName() + "\"? (" + projectId + ")", nextVersion );
                     }
-                    else
-                    {
-                        Map devVersions = releaseDescriptor.getDevelopmentVersions();
-                        if ( devVersions.containsKey( projectId ) )
-                        {
-                            nextVersion = devVersions.remove( projectId ).toString();
-                        }
-                    }
                 }
             }
             else
             {
                 if ( ArtifactUtils.isSnapshot( project.getVersion() ) )
                 {
-                    if ( releaseVersionInfo != null )
-                    {
-                        nextVersion = releaseVersionInfo.getReleaseVersionString();
-                    }
+                    nextVersion = releaseVersionInfo.getReleaseVersionString();
 
-                    if ( releaseDescriptor.isInteractive() )
+                    if ( releaseDescriptor.isInteractive() && !releaseVersionIsExplicit )
                     {
                         nextVersion = prompter.prompt(
                             "What is the release version for \"" + project.getName() + "\"? (" + projectId + ")",
                             nextVersion );
                     }
-                    else
-                    {
-                        Map relVersions = releaseDescriptor.getReleaseVersions();
-                        if ( relVersions.containsKey( projectId ) )
-                        {
-                            nextVersion = relVersions.remove( projectId ).toString();
-                        }
-                    }
                 }
                 else
                 {

Modified: maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo?rev=1002505&r1=1002504&r2=1002505&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo (original)
+++ maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo Wed Sep 29 08:00:59 2010
@@ -484,8 +484,6 @@
     {
         if (releaseVersions == null) {
             releaseVersions = new java.util.HashMap();
-        } else {
-            assert !releaseVersions.containsKey( projectId );
         }
 
         releaseVersions.put( projectId, nextVersion );
@@ -501,8 +499,6 @@
     {
         if (developmentVersions == null) {
             developmentVersions = new java.util.HashMap();
-        } else {
-            assert !developmentVersions.containsKey( projectId );
         }
 
         developmentVersions.put( projectId, nextVersion );

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=1002505&r1=1002504&r2=1002505&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 Wed Sep 29 08:00:59 2010
@@ -118,6 +118,42 @@ public class MapVersionsPhaseTest
                       releaseDescriptor.getReleaseVersions() );
     }
 
+    /**
+     * MRELEASE-524: ignores commandline versions in batch mode
+     */
+    public void testMapReleaseVersionsNonInteractiveWithExplicitVersion()
+        throws Exception
+    {
+        List reactorProjects = Collections.singletonList( createProject( "artifactId", "SNAPSHOT" ) );
+
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, "test-map-release-versions" );
+
+        // execute
+        ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
+        releaseDescriptor.addReleaseVersion( "groupId:artifactId", "2.0" );
+
+        Mock mockPrompter = new Mock( Prompter.class );
+        mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" );
+        phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+        phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ),
+                      releaseDescriptor.getReleaseVersions() );
+
+        // simulate
+        releaseDescriptor = new ReleaseDescriptor();
+        releaseDescriptor.addReleaseVersion( "groupId:artifactId", "2.0" );
+
+        mockPrompter.reset();
+        mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" );
+
+        phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ),
+                      releaseDescriptor.getReleaseVersions() );
+    }
+
     public void testMapReleaseVersionsNonInteractive()
         throws Exception
     {
@@ -213,6 +249,43 @@ public class MapVersionsPhaseTest
                       releaseDescriptor.getDevelopmentVersions() );
     }
 
+     /**
+     * MRELEASE-524: ignores commandline versions in batch mode
+     */
+    public void testMapDevVersionsNonInteractiveWithExplicitVersion()
+        throws Exception
+    {
+        MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, "test-map-development-versions" );
+        List reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
+
+        // execute
+        Mock mockPrompter = new Mock( Prompter.class );
+        mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" );
+        phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+        ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
+        releaseDescriptor.setInteractive( false );
+        releaseDescriptor.addDevelopmentVersion( "groupId:artifactId", "2-SNAPSHOT" );
+
+        phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2-SNAPSHOT" ),
+                      releaseDescriptor.getDevelopmentVersions() );
+
+        // simulate
+        mockPrompter.reset();
+        mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" );
+
+        releaseDescriptor = new ReleaseDescriptor();
+        releaseDescriptor.setInteractive( false );
+        releaseDescriptor.addDevelopmentVersion( "groupId:artifactId", "2-SNAPSHOT" );
+
+        phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2-SNAPSHOT" ),
+                      releaseDescriptor.getDevelopmentVersions() );
+    }
+
     public void testPrompterException()
         throws Exception
     {
@@ -262,7 +335,8 @@ public class MapVersionsPhaseTest
         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(
+        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() );
 
@@ -276,7 +350,8 @@ public class MapVersionsPhaseTest
                       releaseDescriptor.getDevelopmentVersions() );
 
         mockPrompter.reset();
-        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).with( new IsAnything(), new IsNull() ).will(
+        mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).with( new IsAnything(),
+                                                                                 new IsEqual( "1.1-SNAPSHOT" ) ).will(
             new ReturnStub( "2.0-SNAPSHOT" ) );
 
         releaseDescriptor = new ReleaseDescriptor();