Author: brett Date: Tue Jul 19 18:27:41 2005 New Revision: 219827 URL: http://svn.apache.org/viewcvs?rev=219827&view=rev Log: set eol style
Modified: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java (contents, props changed) Modified: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java?rev=219827&r1=219826&r2=219827&view=diff ============================================================================== --- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java (original) +++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java Tue Jul 19 18:27:41 2005 @@ -1,588 +1,588 @@ -package org.apache.maven.plugin.release; - -/* - * Copyright 2001-2005 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.Artifact; -import org.apache.maven.model.Dependency; -import org.apache.maven.model.Model; -import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.scm.ScmBean; -import org.apache.maven.plugin.transformer.PomTransformer; -import org.apache.maven.plugin.transformer.VersionTransformer; -import org.apache.maven.project.MavenProject; -import org.apache.maven.scm.ScmException; -import org.apache.maven.scm.ScmFile; -import org.codehaus.plexus.components.inputhandler.InputHandler; -import org.codehaus.plexus.util.StringUtils; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; - -/** - * Prepare for a release in SCM - * - * @author <a href="mailto:[EMAIL PROTECTED]">Emmanuel Venisse</a> - * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> - * @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $ - * @goal prepare - * @requiresDependencyResolution test - * @todo check how this works with version ranges - */ -public class PrepareReleaseMojo - extends AbstractReleaseMojo -{ - /** - * @parameter expression="${basedir}" - * @required - * @readonly - */ - private String basedir; - - /** - * @parameter expression="${settings.interactiveMode}" - * @readonly - */ - private boolean interactive = true; - - private static final String SNAPSHOT = "-SNAPSHOT"; - - private String projectVersion; - - private Model model; - - private String userTag; - - private String currentTag; - - private String currentScmConnection; - - private String currentScmDeveloperConnection; - - protected void executeTask() - throws MojoExecutionException - { - model = project.getModel(); - - checkForLocalModifications(); - - checkForPresenceOfSnapshots(); - - transformPomToReleaseVersionPom(); - - checkInReleaseVersionPom(); - - tagRelease(); - - transformPomToSnapshotVersionPom(); - - checkInSnapshotVersionPom(); - } - - private boolean isSnapshot( String version ) - { - return version.endsWith( SNAPSHOT ); - } - - private void checkForLocalModifications() - throws MojoExecutionException - { - getLog().info( "Verifying there are no local modifications ..." ); - - List changedFiles; - - try - { - ScmBean scm = getScm(); - - scm.setWorkingDirectory( basedir ); - - changedFiles = scm.getStatus(); - } - catch ( ScmException e ) - { - throw new MojoExecutionException( "An error is occurred in the status process.", e ); - } - - for ( Iterator i = changedFiles.iterator(); i.hasNext(); ) - { - ScmFile f = (ScmFile) i.next(); - if ( f.getPath().equals( "pom.xml.backup" ) || f.getPath().equals( RELEASE_PROPS ) ) - { - i.remove(); - } - } - - if ( !changedFiles.isEmpty() ) - { - StringBuffer message = new StringBuffer(); - - for ( Iterator i = changedFiles.iterator(); i.hasNext(); ) - { - ScmFile file = (ScmFile) i.next(); - - message.append( file.toString() ); - - message.append( "\n" ); - } - - throw new MojoExecutionException( - "Cannot prepare the release because you have local modifications : \n" + message.toString() ); - } - } - - /** - * Check the POM in an attempt to remove all instances of SNAPSHOTs in preparation for a release. The goal - * is to make the build reproducable so the removal of SNAPSHOTs is a necessary one. - * - * A check is made to ensure any parents in the lineage are released, that all the dependencies are - * released and that any plugins utilized by this project are released. - * - * @throws MojoExecutionException - */ - private void checkForPresenceOfSnapshots() - throws MojoExecutionException - { - MavenProject currentProject = project; - - getLog().info( "Checking lineage for snapshots ..." ); - - while ( currentProject.hasParent() ) - { - Artifact parentArtifact = currentProject.getParentArtifact(); - - if ( isSnapshot( parentArtifact.getVersion() ) ) - { - throw new MojoExecutionException( "Can't release project due to non released parent." ); - } - - currentProject = currentProject.getParent(); - } - - getLog().info( "Checking dependencies for snapshots ..." ); - - List snapshotDependencies = new ArrayList(); - - for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); ) - { - Artifact artifact = (Artifact) i.next(); - - if ( isSnapshot( artifact.getVersion() ) ) - { - snapshotDependencies.add( artifact ); - } - } - - getLog().info( "Checking plugins for snapshots ..." ); - - for ( Iterator i = project.getPluginArtifacts().iterator(); i.hasNext(); ) - { - Artifact artifact = (Artifact) i.next(); - - if ( isSnapshot( artifact.getVersion() ) ) - { - snapshotDependencies.add( artifact ); - } - } - - if ( !snapshotDependencies.isEmpty() ) - { - Collections.sort( snapshotDependencies ); - - StringBuffer message = new StringBuffer(); - - for ( Iterator i = snapshotDependencies.iterator(); i.hasNext(); ) - { - Artifact artifact = (Artifact) i.next(); - - message.append( " " ); - - message.append( artifact.getGroupId() ); - - message.append( ":" ); - - message.append( artifact.getArtifactId() ); - - message.append( ":" ); - - message.append( artifact.getVersion() ); - - message.append( "\n" ); - } - - throw new MojoExecutionException( - "Can't release project due to non released dependencies :\n" + message.toString() ); - } - } - - private void transformPomToReleaseVersionPom() - throws MojoExecutionException - { - if ( !isSnapshot( model.getVersion() ) ) - { - throw new MojoExecutionException( "This project isn't a snapshot (" + model.getVersion() + ")." ); - } - - //Rewrite project version - projectVersion = model.getVersion().substring( 0, model.getVersion().length() - SNAPSHOT.length() ); - - try - { - getLog().info( "What is the new version? [" + projectVersion + "]" ); - - InputHandler handler = (InputHandler) getContainer().lookup( InputHandler.ROLE ); - - String inputVersion = handler.readLine(); - - if ( !StringUtils.isEmpty( inputVersion ) ) - { - projectVersion = inputVersion; - } - } - catch ( Exception e ) - { - throw new MojoExecutionException( "Can't read user input.", e ); - } - - model.setVersion( projectVersion ); - - currentTag = model.getScm().getTag(); - - currentScmConnection = model.getScm().getConnection(); - - currentScmDeveloperConnection = model.getScm().getDeveloperConnection(); - - if ( model.getScm() != null ) - { - model.getScm().setTag( getTagLabel() ); - - model.getScm().setConnection( rewriteScmConnection( model.getScm().getConnection(), getTagLabel() ) ); - - model.getScm().setDeveloperConnection( - rewriteScmConnection( model.getScm().getDeveloperConnection(), getTagLabel() ) ); - } - - try - { - Properties releaseProperties = new Properties(); - - releaseProperties.setProperty( "version", projectVersion ); - - releaseProperties.setProperty( USERNAME, username ); - - releaseProperties.setProperty( TAG, getTagLabel() ); - - releaseProperties.setProperty( SCM_URL, urlScm ); - - FileOutputStream os = new FileOutputStream( new File( project.getFile().getParentFile(), RELEASE_PROPS ) ); - - releaseProperties.store( os, "maven release plugin info" ); - - os.close(); - } - catch ( IOException e ) - { - throw new MojoExecutionException( "Cannote write release-version file.", e ); - } - - //Rewrite parent version - if ( project.hasParent() ) - { - if ( isSnapshot( project.getParentArtifact().getBaseVersion() ) ) - { - model.getParent().setVersion( project.getParentArtifact().getVersion() ); - } - } - - //Rewrite dependencies version - for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); ) - { - Artifact artifact = (Artifact) i.next(); - if ( isSnapshot( artifact.getBaseVersion() ) ) - { - for ( Iterator j = model.getDependencies().iterator(); j.hasNext(); ) - { - Dependency dependency = (Dependency) j.next(); - if ( artifact.getGroupId().equals( dependency.getGroupId() ) && - artifact.getArtifactId().equals( dependency.getArtifactId() ) && - artifact.getBaseVersion().equals( dependency.getVersion() ) && - artifact.getType().equals( dependency.getType() ) ) - { - dependency.setVersion( artifact.getVersion() ); - } - } - } - } - - //Rewrite plugins version - for ( Iterator i = project.getPluginArtifacts().iterator(); i.hasNext(); ) - { - Artifact artifact = (Artifact) i.next(); - if ( isSnapshot( artifact.getBaseVersion() ) ) - { - for ( Iterator j = model.getBuild().getPlugins().iterator(); j.hasNext(); ) - { - Plugin plugin = (Plugin) j.next(); - if ( artifact.getGroupId().equals( plugin.getGroupId() ) && - artifact.getArtifactId().equals( plugin.getArtifactId() ) ) - { - plugin.setGroupId( artifact.getGroupId() ); - plugin.setVersion( artifact.getVersion() ); - } - } - } - } - - try - { - PomTransformer transformer = new VersionTransformer(); - - transformer.setOutputFile( project.getFile() ); - - transformer.setProject( project.getFile() ); - - transformer.setUpdatedModel( model ); - - transformer.transformNodes(); - - transformer.write(); - } - catch ( Exception e ) - { - throw new MojoExecutionException( "Can't transform pom to its release version form.", e ); - } - } - - private void transformPomToSnapshotVersionPom() - throws MojoExecutionException - { - // TODO: we will need to incorporate versioning strategies here because it is unlikely - // that everyone will be able to agree on a standard. This is extremely limited right - // now and really only works for the way maven is versioned. - - // releaseVersion = 1.0-beta-4 - // snapshotVersion = 1.0-beta-5-SNAPSHOT - - String nextVersionString = projectVersion.substring( projectVersion.lastIndexOf( "-" ) + 1 ); - - try - { - nextVersionString = Integer.toString( Integer.parseInt( nextVersionString ) + 1 ); - - projectVersion = projectVersion.substring( 0, projectVersion.lastIndexOf( "-" ) + 1 ) + nextVersionString + - SNAPSHOT; - } - catch ( NumberFormatException e ) - { - projectVersion = ""; - } - - try - { - getLog().info( "What is the new version? [" + projectVersion + "]" ); - - InputHandler handler = (InputHandler) getContainer().lookup( InputHandler.ROLE ); - - String inputVersion = handler.readLine(); - - if ( !StringUtils.isEmpty( inputVersion ) ) - { - projectVersion = inputVersion; - } - - model.setVersion( projectVersion ); - - if ( model.getScm() != null ) - { - model.getScm().setTag( currentTag ); - - model.getScm().setConnection( currentScmConnection ); - - model.getScm().setDeveloperConnection( currentScmDeveloperConnection ); - } - - PomTransformer transformer = new VersionTransformer(); - - transformer.setOutputFile( project.getFile() ); - - transformer.setProject( project.getFile() ); - - transformer.setUpdatedModel( model ); - - transformer.transformNodes(); - - transformer.write(); - } - catch ( Exception e ) - { - throw new MojoExecutionException( "Can't transform pom to its snapshot version form.", e ); - } - } - - - /** - * Check in the POM to SCM after it has been transformed where the version has been - * set to the release version. - * - * @throws MojoExecutionException - */ - private void checkInReleaseVersionPom() - throws MojoExecutionException - { - checkInPom( "[maven-release-plugin] prepare release " + projectVersion ); - } - - private void checkInSnapshotVersionPom() - throws MojoExecutionException - { - checkInPom( "[maven-release-plugin] prepare for development " + projectVersion ); - } - - private void checkInPom( String message ) - throws MojoExecutionException - { - try - { - ScmBean scm = getScm(); - - scm.setWorkingDirectory( basedir ); - - String tag = scm.getTag(); - - // No tag here - we suppose user works on correct branch - scm.setTag( null ); - - scm.checkin( message, "pom.xml", null ); - - scm.setTag( tag ); - } - catch ( Exception e ) - { - throw new MojoExecutionException( "An error is occurred in the checkin process.", e ); - } - } - - private String getDefaultTagLabel() - { - String tag = project.getArtifactId().toUpperCase() + "_" + projectVersion.toUpperCase(); - - tag = tag.replace( '-', '_' ); - - tag = tag.replace( '.', '_' ); - - return tag; - } - - private String getTagLabel() - throws MojoExecutionException - { - if ( userTag == null ) - { - userTag = getDefaultTagLabel(); - - try - { - ScmBean scm = getScm(); - - if ( scm.getTag() == null && interactive ) - { - getLog().info( "What tag name should be used? [ " + tag + " ]" ); - - InputHandler handler = (InputHandler) getContainer().lookup( InputHandler.ROLE ); - - String inputTag = handler.readLine(); - - if ( !StringUtils.isEmpty( inputTag ) ) - { - userTag = inputTag; - } - } - else - { - userTag = scm.getTag(); - } - } - catch ( Exception e ) - { - throw new MojoExecutionException( "An error is occurred in the tag process.", e ); - } - } - - return userTag; - } - - /** - * Tag the release in preparation for performing the release. - * - * We will provide the user with a default tag name based on the artifact id - * and the version of the project being released. - * - * where artifactId is <code>plexus-action</code> and the version is <code>1.0-beta-4</code>, the - * the suggested tag will be <code>PLEXUS_ACTION_1_0_BETA_4</code>. - * - * @throws MojoExecutionException - */ - private void tagRelease() - throws MojoExecutionException - { - String tag = getTagLabel(); - - try - { - ScmBean scm = getScm(); - - scm.setWorkingDirectory( basedir ); - - scm.setTag( tag ); - - getLog().info( "Tagging release with the label " + tag + "." ); - - scm.tag(); - } - catch ( Exception e ) - { - throw new MojoExecutionException( "An error is occurred in the tag process.", e ); - } - } - - private String rewriteScmConnection( String scmConnection, String tag ) - { - if ( scmConnection != null ) - { - if ( scmConnection.startsWith( "svn" ) ) - { - if ( scmConnection.endsWith( "trunk/" ) ) - { - scmConnection = scmConnection.substring( 0, scmConnection.length() - "trunk/".length() ); - } - if ( scmConnection.endsWith( "branches/" ) ) - { - scmConnection = scmConnection.substring( 0, scmConnection.length() - "branches/".length() ); - } - scmConnection += "tags/" + tag; - } - } - - return scmConnection; - } -} +package org.apache.maven.plugin.release; + +/* + * Copyright 2001-2005 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.Artifact; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Model; +import org.apache.maven.model.Plugin; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.scm.ScmBean; +import org.apache.maven.plugin.transformer.PomTransformer; +import org.apache.maven.plugin.transformer.VersionTransformer; +import org.apache.maven.project.MavenProject; +import org.apache.maven.scm.ScmException; +import org.apache.maven.scm.ScmFile; +import org.codehaus.plexus.components.inputhandler.InputHandler; +import org.codehaus.plexus.util.StringUtils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; + +/** + * Prepare for a release in SCM + * + * @author <a href="mailto:[EMAIL PROTECTED]">Emmanuel Venisse</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> + * @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $ + * @goal prepare + * @requiresDependencyResolution test + * @todo check how this works with version ranges + */ +public class PrepareReleaseMojo + extends AbstractReleaseMojo +{ + /** + * @parameter expression="${basedir}" + * @required + * @readonly + */ + private String basedir; + + /** + * @parameter expression="${settings.interactiveMode}" + * @readonly + */ + private boolean interactive = true; + + private static final String SNAPSHOT = "-SNAPSHOT"; + + private String projectVersion; + + private Model model; + + private String userTag; + + private String currentTag; + + private String currentScmConnection; + + private String currentScmDeveloperConnection; + + protected void executeTask() + throws MojoExecutionException + { + model = project.getModel(); + + checkForLocalModifications(); + + checkForPresenceOfSnapshots(); + + transformPomToReleaseVersionPom(); + + checkInReleaseVersionPom(); + + tagRelease(); + + transformPomToSnapshotVersionPom(); + + checkInSnapshotVersionPom(); + } + + private boolean isSnapshot( String version ) + { + return version.endsWith( SNAPSHOT ); + } + + private void checkForLocalModifications() + throws MojoExecutionException + { + getLog().info( "Verifying there are no local modifications ..." ); + + List changedFiles; + + try + { + ScmBean scm = getScm(); + + scm.setWorkingDirectory( basedir ); + + changedFiles = scm.getStatus(); + } + catch ( ScmException e ) + { + throw new MojoExecutionException( "An error is occurred in the status process.", e ); + } + + for ( Iterator i = changedFiles.iterator(); i.hasNext(); ) + { + ScmFile f = (ScmFile) i.next(); + if ( f.getPath().equals( "pom.xml.backup" ) || f.getPath().equals( RELEASE_PROPS ) ) + { + i.remove(); + } + } + + if ( !changedFiles.isEmpty() ) + { + StringBuffer message = new StringBuffer(); + + for ( Iterator i = changedFiles.iterator(); i.hasNext(); ) + { + ScmFile file = (ScmFile) i.next(); + + message.append( file.toString() ); + + message.append( "\n" ); + } + + throw new MojoExecutionException( + "Cannot prepare the release because you have local modifications : \n" + message.toString() ); + } + } + + /** + * Check the POM in an attempt to remove all instances of SNAPSHOTs in preparation for a release. The goal + * is to make the build reproducable so the removal of SNAPSHOTs is a necessary one. + * + * A check is made to ensure any parents in the lineage are released, that all the dependencies are + * released and that any plugins utilized by this project are released. + * + * @throws MojoExecutionException + */ + private void checkForPresenceOfSnapshots() + throws MojoExecutionException + { + MavenProject currentProject = project; + + getLog().info( "Checking lineage for snapshots ..." ); + + while ( currentProject.hasParent() ) + { + Artifact parentArtifact = currentProject.getParentArtifact(); + + if ( isSnapshot( parentArtifact.getVersion() ) ) + { + throw new MojoExecutionException( "Can't release project due to non released parent." ); + } + + currentProject = currentProject.getParent(); + } + + getLog().info( "Checking dependencies for snapshots ..." ); + + List snapshotDependencies = new ArrayList(); + + for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); ) + { + Artifact artifact = (Artifact) i.next(); + + if ( isSnapshot( artifact.getVersion() ) ) + { + snapshotDependencies.add( artifact ); + } + } + + getLog().info( "Checking plugins for snapshots ..." ); + + for ( Iterator i = project.getPluginArtifacts().iterator(); i.hasNext(); ) + { + Artifact artifact = (Artifact) i.next(); + + if ( isSnapshot( artifact.getVersion() ) ) + { + snapshotDependencies.add( artifact ); + } + } + + if ( !snapshotDependencies.isEmpty() ) + { + Collections.sort( snapshotDependencies ); + + StringBuffer message = new StringBuffer(); + + for ( Iterator i = snapshotDependencies.iterator(); i.hasNext(); ) + { + Artifact artifact = (Artifact) i.next(); + + message.append( " " ); + + message.append( artifact.getGroupId() ); + + message.append( ":" ); + + message.append( artifact.getArtifactId() ); + + message.append( ":" ); + + message.append( artifact.getVersion() ); + + message.append( "\n" ); + } + + throw new MojoExecutionException( + "Can't release project due to non released dependencies :\n" + message.toString() ); + } + } + + private void transformPomToReleaseVersionPom() + throws MojoExecutionException + { + if ( !isSnapshot( model.getVersion() ) ) + { + throw new MojoExecutionException( "This project isn't a snapshot (" + model.getVersion() + ")." ); + } + + //Rewrite project version + projectVersion = model.getVersion().substring( 0, model.getVersion().length() - SNAPSHOT.length() ); + + try + { + getLog().info( "What is the new version? [" + projectVersion + "]" ); + + InputHandler handler = (InputHandler) getContainer().lookup( InputHandler.ROLE ); + + String inputVersion = handler.readLine(); + + if ( !StringUtils.isEmpty( inputVersion ) ) + { + projectVersion = inputVersion; + } + } + catch ( Exception e ) + { + throw new MojoExecutionException( "Can't read user input.", e ); + } + + model.setVersion( projectVersion ); + + currentTag = model.getScm().getTag(); + + currentScmConnection = model.getScm().getConnection(); + + currentScmDeveloperConnection = model.getScm().getDeveloperConnection(); + + if ( model.getScm() != null ) + { + model.getScm().setTag( getTagLabel() ); + + model.getScm().setConnection( rewriteScmConnection( model.getScm().getConnection(), getTagLabel() ) ); + + model.getScm().setDeveloperConnection( + rewriteScmConnection( model.getScm().getDeveloperConnection(), getTagLabel() ) ); + } + + try + { + Properties releaseProperties = new Properties(); + + releaseProperties.setProperty( "version", projectVersion ); + + releaseProperties.setProperty( USERNAME, username ); + + releaseProperties.setProperty( TAG, getTagLabel() ); + + releaseProperties.setProperty( SCM_URL, urlScm ); + + FileOutputStream os = new FileOutputStream( new File( project.getFile().getParentFile(), RELEASE_PROPS ) ); + + releaseProperties.store( os, "maven release plugin info" ); + + os.close(); + } + catch ( IOException e ) + { + throw new MojoExecutionException( "Cannote write release-version file.", e ); + } + + //Rewrite parent version + if ( project.hasParent() ) + { + if ( isSnapshot( project.getParentArtifact().getBaseVersion() ) ) + { + model.getParent().setVersion( project.getParentArtifact().getVersion() ); + } + } + + //Rewrite dependencies version + for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); ) + { + Artifact artifact = (Artifact) i.next(); + if ( isSnapshot( artifact.getBaseVersion() ) ) + { + for ( Iterator j = model.getDependencies().iterator(); j.hasNext(); ) + { + Dependency dependency = (Dependency) j.next(); + if ( artifact.getGroupId().equals( dependency.getGroupId() ) && + artifact.getArtifactId().equals( dependency.getArtifactId() ) && + artifact.getBaseVersion().equals( dependency.getVersion() ) && + artifact.getType().equals( dependency.getType() ) ) + { + dependency.setVersion( artifact.getVersion() ); + } + } + } + } + + //Rewrite plugins version + for ( Iterator i = project.getPluginArtifacts().iterator(); i.hasNext(); ) + { + Artifact artifact = (Artifact) i.next(); + if ( isSnapshot( artifact.getBaseVersion() ) ) + { + for ( Iterator j = model.getBuild().getPlugins().iterator(); j.hasNext(); ) + { + Plugin plugin = (Plugin) j.next(); + if ( artifact.getGroupId().equals( plugin.getGroupId() ) && + artifact.getArtifactId().equals( plugin.getArtifactId() ) ) + { + plugin.setGroupId( artifact.getGroupId() ); + plugin.setVersion( artifact.getVersion() ); + } + } + } + } + + try + { + PomTransformer transformer = new VersionTransformer(); + + transformer.setOutputFile( project.getFile() ); + + transformer.setProject( project.getFile() ); + + transformer.setUpdatedModel( model ); + + transformer.transformNodes(); + + transformer.write(); + } + catch ( Exception e ) + { + throw new MojoExecutionException( "Can't transform pom to its release version form.", e ); + } + } + + private void transformPomToSnapshotVersionPom() + throws MojoExecutionException + { + // TODO: we will need to incorporate versioning strategies here because it is unlikely + // that everyone will be able to agree on a standard. This is extremely limited right + // now and really only works for the way maven is versioned. + + // releaseVersion = 1.0-beta-4 + // snapshotVersion = 1.0-beta-5-SNAPSHOT + + String nextVersionString = projectVersion.substring( projectVersion.lastIndexOf( "-" ) + 1 ); + + try + { + nextVersionString = Integer.toString( Integer.parseInt( nextVersionString ) + 1 ); + + projectVersion = projectVersion.substring( 0, projectVersion.lastIndexOf( "-" ) + 1 ) + nextVersionString + + SNAPSHOT; + } + catch ( NumberFormatException e ) + { + projectVersion = ""; + } + + try + { + getLog().info( "What is the new version? [" + projectVersion + "]" ); + + InputHandler handler = (InputHandler) getContainer().lookup( InputHandler.ROLE ); + + String inputVersion = handler.readLine(); + + if ( !StringUtils.isEmpty( inputVersion ) ) + { + projectVersion = inputVersion; + } + + model.setVersion( projectVersion ); + + if ( model.getScm() != null ) + { + model.getScm().setTag( currentTag ); + + model.getScm().setConnection( currentScmConnection ); + + model.getScm().setDeveloperConnection( currentScmDeveloperConnection ); + } + + PomTransformer transformer = new VersionTransformer(); + + transformer.setOutputFile( project.getFile() ); + + transformer.setProject( project.getFile() ); + + transformer.setUpdatedModel( model ); + + transformer.transformNodes(); + + transformer.write(); + } + catch ( Exception e ) + { + throw new MojoExecutionException( "Can't transform pom to its snapshot version form.", e ); + } + } + + + /** + * Check in the POM to SCM after it has been transformed where the version has been + * set to the release version. + * + * @throws MojoExecutionException + */ + private void checkInReleaseVersionPom() + throws MojoExecutionException + { + checkInPom( "[maven-release-plugin] prepare release " + projectVersion ); + } + + private void checkInSnapshotVersionPom() + throws MojoExecutionException + { + checkInPom( "[maven-release-plugin] prepare for development " + projectVersion ); + } + + private void checkInPom( String message ) + throws MojoExecutionException + { + try + { + ScmBean scm = getScm(); + + scm.setWorkingDirectory( basedir ); + + String tag = scm.getTag(); + + // No tag here - we suppose user works on correct branch + scm.setTag( null ); + + scm.checkin( message, "pom.xml", null ); + + scm.setTag( tag ); + } + catch ( Exception e ) + { + throw new MojoExecutionException( "An error is occurred in the checkin process.", e ); + } + } + + private String getDefaultTagLabel() + { + String tag = project.getArtifactId().toUpperCase() + "_" + projectVersion.toUpperCase(); + + tag = tag.replace( '-', '_' ); + + tag = tag.replace( '.', '_' ); + + return tag; + } + + private String getTagLabel() + throws MojoExecutionException + { + if ( userTag == null ) + { + userTag = getDefaultTagLabel(); + + try + { + ScmBean scm = getScm(); + + if ( scm.getTag() == null && interactive ) + { + getLog().info( "What tag name should be used? [ " + tag + " ]" ); + + InputHandler handler = (InputHandler) getContainer().lookup( InputHandler.ROLE ); + + String inputTag = handler.readLine(); + + if ( !StringUtils.isEmpty( inputTag ) ) + { + userTag = inputTag; + } + } + else + { + userTag = scm.getTag(); + } + } + catch ( Exception e ) + { + throw new MojoExecutionException( "An error is occurred in the tag process.", e ); + } + } + + return userTag; + } + + /** + * Tag the release in preparation for performing the release. + * + * We will provide the user with a default tag name based on the artifact id + * and the version of the project being released. + * + * where artifactId is <code>plexus-action</code> and the version is <code>1.0-beta-4</code>, the + * the suggested tag will be <code>PLEXUS_ACTION_1_0_BETA_4</code>. + * + * @throws MojoExecutionException + */ + private void tagRelease() + throws MojoExecutionException + { + String tag = getTagLabel(); + + try + { + ScmBean scm = getScm(); + + scm.setWorkingDirectory( basedir ); + + scm.setTag( tag ); + + getLog().info( "Tagging release with the label " + tag + "." ); + + scm.tag(); + } + catch ( Exception e ) + { + throw new MojoExecutionException( "An error is occurred in the tag process.", e ); + } + } + + private String rewriteScmConnection( String scmConnection, String tag ) + { + if ( scmConnection != null ) + { + if ( scmConnection.startsWith( "svn" ) ) + { + if ( scmConnection.endsWith( "trunk/" ) ) + { + scmConnection = scmConnection.substring( 0, scmConnection.length() - "trunk/".length() ); + } + if ( scmConnection.endsWith( "branches/" ) ) + { + scmConnection = scmConnection.substring( 0, scmConnection.length() - "branches/".length() ); + } + scmConnection += "tags/" + tag; + } + } + + return scmConnection; + } +} Propchange: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]