Author: evenisse
Date: Thu Apr 26 03:01:32 2007
New Revision: 532690

URL: http://svn.apache.org/viewvc?view=rev&rev=532690
Log:
[MRELEASE-157] Allow to share version for multi-module releases
Submitted by: Tom Schneider

Modified:
    
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.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/main/mdo/release-descriptor.mdo
    
maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java

Modified: 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java?view=diff&rev=532690&r1=532689&r2=532690
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
 (original)
+++ 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
 Thu Apr 26 03:01:32 2007
@@ -44,6 +44,7 @@
     {
         // Overridden if configured from the caller
         mergeInto.setScmSourceUrl( mergeOverride( mergeInto.getScmSourceUrl(), 
toBeMerged.getScmSourceUrl() ) );
+        mergeInto.setScmCommentPrefix( mergeOverride( 
mergeInto.getScmCommentPrefix(), toBeMerged.getScmCommentPrefix()));
         mergeInto.setScmReleaseLabel(
             mergeOverride( mergeInto.getScmReleaseLabel(), 
toBeMerged.getScmReleaseLabel() ) );
         mergeInto.setScmTagBase( mergeOverride( mergeInto.getScmTagBase(), 
toBeMerged.getScmTagBase() ) );
@@ -63,6 +64,10 @@
         mergeInto.setAddSchema( toBeMerged.isAddSchema() );
         mergeInto.setGenerateReleasePoms( toBeMerged.isGenerateReleasePoms() );
         mergeInto.setInteractive( toBeMerged.isInteractive() );
+        mergeInto.setUpdateDependencies( toBeMerged.isUpdateDependencies());
+        mergeInto.setCommitByProject( toBeMerged.isCommitByProject());
+
+        mergeInto.setAutoVersionSubmodules( 
toBeMerged.isAutoVersionSubmodules() );
 
         // These must be overridden, as they are not stored
         mergeInto.setWorkingDirectory(

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?view=diff&rev=532690&r1=532689&r2=532690
==============================================================================
--- 
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
 Thu Apr 26 03:01:32 2007
@@ -25,6 +25,7 @@
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseResult;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
+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;
@@ -63,108 +64,168 @@
     {
         ReleaseResult result = new ReleaseResult();
 
-        for ( Iterator i = reactorProjects.iterator(); i.hasNext(); )
+        MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects 
);
+
+        if ( releaseDescriptor.isAutoVersionSubmodules() && 
ArtifactUtils.isSnapshot( rootProject.getVersion() ) )
         {
-            MavenProject project = (MavenProject) i.next();
+            // get the root project
+            MavenProject project = rootProject;
 
             String projectId = ArtifactUtils.versionlessKey( 
project.getGroupId(), project.getArtifactId() );
 
-            VersionInfo version = null;
-            try
+            String nextVersion = getNextVersion( project, projectId, 
releaseDescriptor, result );
+
+            if ( convertToSnapshot )
             {
-                version = new DefaultVersionInfo( project.getVersion() );
+                releaseDescriptor.mapDevelopmentVersion( projectId, 
nextVersion );
             }
-            catch ( VersionParseException e )
+            else
             {
-                String msg = "Error parsing version, cannot determine next 
version: " + e.getMessage();
-                if ( releaseDescriptor.isInteractive() )
+                releaseDescriptor.mapReleaseVersion( projectId, nextVersion );
+            }
+
+            for ( Iterator i = reactorProjects.iterator(); i.hasNext(); )
+            {
+                MavenProject subProject = (MavenProject) i.next();
+                String subProjectId =
+                    ArtifactUtils.versionlessKey( subProject.getGroupId(), 
subProject.getArtifactId() );
+                if ( convertToSnapshot )
                 {
-                    logWarn( result, msg );
-                    logDebug( result, e.getMessage(), e );
+                    releaseDescriptor.mapDevelopmentVersion( subProjectId, 
nextVersion );
                 }
                 else
                 {
-                    // cannot proceed without a next value in batch mode
-                    throw new ReleaseExecutionException( msg, e );
+                    releaseDescriptor.mapReleaseVersion( subProjectId, 
nextVersion );
                 }
             }
-
-            try
+        }
+        else
+        {
+            for ( Iterator i = reactorProjects.iterator(); i.hasNext(); )
             {
+                MavenProject project = (MavenProject) i.next();
+
+                String projectId = ArtifactUtils.versionlessKey( 
project.getGroupId(), project.getArtifactId() );
+
+                String nextVersion = getNextVersion( project, projectId, 
releaseDescriptor, result );
+
                 if ( convertToSnapshot )
                 {
-                    String nextVersion = null;
-                    if ( version != null )
+                    releaseDescriptor.mapDevelopmentVersion( projectId, 
nextVersion );
+                }
+                else
+                {
+                    if ( ArtifactUtils.isSnapshot( project.getVersion() ) )
                     {
-                        VersionInfo versionInfo = version.getNextVersion();
-                        if ( versionInfo != null )
-                        {
-                            nextVersion = 
versionInfo.getSnapshotVersionString();
-                        }
-                        else
-                        {
-                            nextVersion = "1.0-SNAPSHOT";
-                        }
+                        releaseDescriptor.mapReleaseVersion( projectId, 
nextVersion );
+                    }
+                    else
+                    {
+                        releaseDescriptor.mapReleaseVersion( projectId, 
project.getVersion() );
                     }
+                }
+            }
+        }
 
-                    if ( releaseDescriptor.isInteractive() )
+        result.setResultCode( ReleaseResult.SUCCESS );
+
+        return result;
+    }
+
+    private String getNextVersion( MavenProject project, String projectId, 
ReleaseDescriptor releaseDescriptor,
+                                   ReleaseResult result )
+        throws ReleaseExecutionException
+    {
+        String nextVersion = null;
+
+        VersionInfo version = null;
+        try
+        {
+            version = new DefaultVersionInfo( project.getVersion() );
+        }
+        catch ( VersionParseException e )
+        {
+            String msg = "Error parsing version, cannot determine next 
version: " + e.getMessage();
+            if ( releaseDescriptor.isInteractive() )
+            {
+                logWarn( result, msg );
+                logDebug( result, e.getMessage(), e );
+            }
+            else
+            {
+                // cannot proceed without a next value in batch mode
+                throw new ReleaseExecutionException( msg, e );
+            }
+        }
+
+        try
+        {
+            if ( convertToSnapshot )
+            {
+                if ( version != null )
+                {
+                    VersionInfo versionInfo = version.getNextVersion();
+                    if ( versionInfo != null )
                     {
-                        nextVersion = prompter.prompt( "What is the new 
development version for \"" +
-                            project.getName() + "\"? (" + projectId + ")", 
nextVersion );
+                        nextVersion = versionInfo.getSnapshotVersionString();
                     }
                     else
                     {
-                        Map devVersions = 
releaseDescriptor.getDevelopmentVersions();
-                        if ( devVersions.containsKey( projectId ) )
-                        {
-                            nextVersion = devVersions.remove( projectId 
).toString();
-                        }
+                        nextVersion = "1.0-SNAPSHOT";
                     }
+                }
 
-                    releaseDescriptor.mapDevelopmentVersion( projectId, 
nextVersion );
+                if ( releaseDescriptor.isInteractive() )
+                {
+                    nextVersion = prompter.prompt(
+                        "What is the new development version for \"" + 
project.getName() + "\"? (" + projectId + ")",
+                        nextVersion );
                 }
                 else
                 {
-                    if ( ArtifactUtils.isSnapshot( project.getVersion() ) )
+                    Map devVersions = 
releaseDescriptor.getDevelopmentVersions();
+                    if ( devVersions.containsKey( projectId ) )
                     {
-                        String nextVersion = null;
-                        if ( version != null )
-                        {
-                            nextVersion = version.getReleaseVersionString();
-                        }
-
-                        if ( releaseDescriptor.isInteractive() )
-                        {
-                            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();
-                            }
-                        }
+                        nextVersion = devVersions.remove( projectId 
).toString();
+                    }
+                }
+            }
+            else
+            {
+                if ( ArtifactUtils.isSnapshot( project.getVersion() ) )
+                {
+                    if ( version != null )
+                    {
+                        nextVersion = version.getReleaseVersionString();
+                    }
 
-                        releaseDescriptor.mapReleaseVersion( projectId, 
nextVersion );
+                    if ( releaseDescriptor.isInteractive() )
+                    {
+                        nextVersion = prompter.prompt(
+                            "What is the release version for \"" + 
project.getName() + "\"? (" + projectId + ")",
+                            nextVersion );
                     }
                     else
                     {
-                        releaseDescriptor.mapReleaseVersion( projectId, 
project.getVersion() );
+                        Map relVersions = 
releaseDescriptor.getReleaseVersions();
+                        if ( relVersions.containsKey( projectId ) )
+                        {
+                            nextVersion = relVersions.remove( projectId 
).toString();
+                        }
                     }
                 }
-            }
-            catch ( PrompterException e )
-            {
-                throw new ReleaseExecutionException( "Error reading version 
from input handler: " + e.getMessage(), e );
+                else
+                {
+                    nextVersion = project.getVersion();
+                }
             }
         }
+        catch ( PrompterException e )
+        {
+            throw new ReleaseExecutionException( "Error reading version from 
input handler: " + e.getMessage(), e );
+        }
 
-        result.setResultCode( ReleaseResult.SUCCESS );
-
-        return result;
+        return nextVersion;
     }
 
     public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, 
Settings settings, List reactorProjects )
@@ -179,5 +240,4 @@
 
         return result;
     }
-
 }

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?view=diff&rev=532690&r1=532689&r2=532690
==============================================================================
--- 
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 
Thu Apr 26 03:01:32 2007
@@ -227,6 +227,14 @@
           </description>
         </field>
         <field>
+          <name>autoVersionSubmodules</name>
+          <version>1.0.0</version>
+          <type>boolean</type>
+          <description>
+            Whether to use the parent pom version for submodule verstions.
+          </description>
+        </field>
+        <field>
           <name>interactive</name>
           <version>1.0.0</version>
           <type>boolean</type>

Modified: 
maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java?view=diff&rev=532690&r1=532689&r2=532690
==============================================================================
--- 
maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
 (original)
+++ 
maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
 Thu Apr 26 03:01:32 2007
@@ -70,6 +70,14 @@
     private boolean updateDependencies;
 
     /**
+     * Whether to automatically assign submodules the parent version.  If set 
to false,
+     * the user will be prompted for the version of each submodules. 
+     *
+     * @parameter expression="${autoVersionSubmodules}" default-value="false"
+     */
+    private boolean autoVersionSubmodules;
+
+    /**
      * Dry run: don't checkin or tag anything in the scm repository, or modify 
the checkout.
      * Running <code>mvn -DdryRun=true release:prepare</code> is useful in 
order to check that modifications to
      * poms and scm operations (only listed on the console) are working as 
expected.
@@ -111,7 +119,7 @@
         config.setPreparationGoals( preparationGoals );
         config.setCommitByProject( commitByProject );
         config.setUpdateDependencies( updateDependencies );
-
+        config.setAutoVersionSubmodules( autoVersionSubmodules );
         try
         {
             releaseManager.prepare( config, settings, reactorProjects, resume, 
dryRun );


Reply via email to