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 );