Author: jvanzyl Date: Sat May 21 17:33:55 2005 New Revision: 171270 URL: http://svn.apache.org/viewcvs?rev=171270&view=rev Log: o still a work in progress but i can release using the plugin, have released several components now and have worked out most of the kinks. there some debugging info but by the time i go through the continuum release i'll know what's what.
Modified: maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java Modified: maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml?rev=171270&r1=171269&r2=171270&view=diff ============================================================================== --- maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml (original) +++ maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml Sat May 21 17:33:55 2005 @@ -18,17 +18,17 @@ <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-api</artifactId> - <version>1.0-alpha-1-SNAPSHOT</version> + <version>1.0-alpha-1</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-provider-cvs</artifactId> - <version>1.0-alpha-1-SNAPSHOT</version> + <version>1.0-alpha-1</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-provider-svn</artifactId> - <version>1.0-alpha-1-SNAPSHOT</version> + <version>1.0-alpha-1</version> </dependency> <dependency> <groupId>dom4j</groupId> Modified: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java?rev=171270&r1=171269&r2=171270&view=diff ============================================================================== --- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java (original) +++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java Sat May 21 17:33:55 2005 @@ -27,6 +27,11 @@ import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; +import java.util.Properties; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.File; + /** * @author <a href="mailto:[EMAIL PROTECTED]">Emmanuel Venisse</a> * @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $ @@ -35,69 +40,58 @@ extends AbstractMojo implements Contextualizable { + public static final String RELEASE_PROPS = "release.properties"; + + public static final String USERNAME = "maven.username"; + + public static final String TAG = "tag"; + + public static final String SCM_URL = "scm.url"; + /** * @parameter expression="${project.build.directory}/checkout" * @required */ - private String workingDirectory; + protected String workingDirectory; /** * @parameter expression="${project.scm.developerConnection}" * @required */ - private String urlScm; + protected String urlScm; /** * @parameter expression="${maven.username}" - * @required */ - private String username; + protected String username; /** * @parameter expression="${password}" */ - private String password; + protected String password; /** * @parameter expression="${tagBase}" */ - private String tagBase = "../tags"; + protected String tagBase = "../tags"; /** * @parameter expression="${tag}" */ - private String tag; + protected String tag; /** * @parameter expression="${project}" * @required * @readonly */ - private MavenProject project; + protected MavenProject project; private PlexusContainer container; - private ScmManager scmManager; - - public MavenProject getProject() - { - return project; - } - - public String getWorkingDirectory() - { - return workingDirectory; - } + protected ScmManager scmManager; - protected ScmManager getScmManager() - { - return scmManager; - } - - public String getTag() - { - return tag; - } + private Properties releaseProperties; protected ScmBean getScm() { @@ -105,12 +99,31 @@ scm.setScmManager( scmManager ); + if ( releaseProperties != null ) + { + urlScm = releaseProperties.getProperty( SCM_URL ); + } + scm.setUrl( urlScm ); + System.out.println( "urlScm = " + urlScm ); + + if ( releaseProperties != null ) + { + tag = releaseProperties.getProperty( TAG ); + } + scm.setTag( tag ); scm.setTagBase( tagBase ); + if ( releaseProperties != null ) + { + username = releaseProperties.getProperty( USERNAME ); + } + + System.out.println( "username = " + username ); + scm.setUsername( username ); scm.setPassword( password ); @@ -131,6 +144,23 @@ try { initScmManager(); + + // ---------------------------------------------------------------------- + // The release properties file has been created by the prepare phase and + // wants to be shared with the perform. + // ---------------------------------------------------------------------- + + File releasePropertiesFile = new File( project.getFile().getParentFile(), RELEASE_PROPS ); + + if ( releasePropertiesFile.exists() ) + { + + releaseProperties = new Properties(); + + InputStream is = new FileInputStream( releasePropertiesFile ); + + releaseProperties.load( is ); + } } catch ( Exception e ) { Modified: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java?rev=171270&r1=171269&r2=171270&view=diff ============================================================================== --- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java (original) +++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java Sat May 21 17:33:55 2005 @@ -72,7 +72,7 @@ cl.setExecutable( "m2" ); - cl.setWorkingDirectory( getWorkingDirectory() ); + cl.setWorkingDirectory( workingDirectory ); cl.createArgument().setLine( goals ); 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=171270&r1=171269&r2=171270&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 Sat May 21 17:33:55 2005 @@ -20,7 +20,6 @@ import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; import org.apache.maven.model.Plugin; -import org.apache.maven.model.io.xpp3.MavenXpp3Writer; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.scm.ScmBean; import org.apache.maven.plugin.transformer.PomTransformer; @@ -31,10 +30,14 @@ 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 @@ -56,29 +59,30 @@ */ private String basedir; - /** - * @parameter expression="${project}" - * @required - * @readonly - */ - private MavenProject project; - private static final String SNAPSHOT = "-SNAPSHOT"; private String projectVersion; + private Model model; + protected void executeTask() throws MojoExecutionException { + model = project.getModel(); + checkForLocalModifications(); checkForPresenceOfSnapshots(); - transformPom(); + transformPomToReleaseVersionPom(); checkInReleaseVersionPom(); tagRelease(); + + transformPomToSnapshotVersionPom(); + + checkInSnapshotVersionPom(); } private boolean isSnapshot( String version ) @@ -207,11 +211,9 @@ } } - private void transformPom() + private void transformPomToReleaseVersionPom() throws MojoExecutionException { - Model model = project.getModel(); - if ( !isSnapshot( model.getVersion() ) ) { throw new MojoExecutionException( "This project isn't a snapshot (" + model.getVersion() + ")." ); @@ -240,6 +242,29 @@ model.setVersion( projectVersion ); + 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() ) { @@ -304,10 +329,70 @@ } catch ( Exception e ) { - throw new MojoExecutionException( "Can't update pom.", 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. + + // releaseVersion = 1.0-beta-4 + // snapshotVersion = 1.0-beta-5-SNAPSHOT + + String nextVersionString = projectVersion.substring( projectVersion.lastIndexOf( "-" ) + 1 ); + + try + { + System.out.println( "nextVersionString = " + nextVersionString ); + + nextVersionString = Integer.toString( Integer.parseInt( nextVersionString ) + 1 ); + + System.out.println( "nextVersionString = " + nextVersionString ); + + 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 ); + + 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. @@ -317,13 +402,25 @@ private void checkInReleaseVersionPom() throws MojoExecutionException { + checkInPom( "[maven-release-plugin] prepare release " + projectVersion ); + } + + private void checkInSnapshotVersionPom() + throws MojoExecutionException + { + checkInPom( "[maven-release-plugin] prepare release " + projectVersion ); + } + + private void checkInPom( String message ) + throws MojoExecutionException + { try { ScmBean scm = getScm(); scm.setWorkingDirectory( basedir ); - scm.checkin( "[maven-release-plugin] prepare release " + projectVersion, "pom.xml", null ); + scm.checkin( message, "pom.xml", null ); } catch ( Exception e ) { @@ -331,6 +428,17 @@ } } + private String getTagLabel() + { + String tag = project.getArtifactId().toUpperCase() + "_" + projectVersion.toUpperCase(); + + tag = tag.replace( '-', '_' ); + + tag = tag.replace( '.', '_' ); + + return tag; + } + /** * Tag the release in preparation for performing the release. * @@ -345,12 +453,7 @@ private void tagRelease() throws MojoExecutionException { - - String tag = project.getArtifactId().toUpperCase() + "_" + projectVersion.toUpperCase(); - - tag = tag.replace( '-', '_' ); - - tag = tag.replace( '.', '_' ); + String tag = getTagLabel(); try { Modified: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java?rev=171270&r1=171269&r2=171270&view=diff ============================================================================== --- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java (original) +++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java Sat May 21 17:33:55 2005 @@ -1,6 +1,6 @@ package org.apache.maven.plugin.scm; -/* ==================================================================== +/* =========7=========================================================== * Copyright 2001-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -113,9 +113,13 @@ { // TODO: improve error handling System.err.println( "Provider message:" ); + System.err.println( result.getProviderMessage() ); + System.err.println( "Command output:" ); + System.err.println( result.getCommandOutput() ); + throw new ScmException( "Error!" ); } } @@ -126,12 +130,19 @@ ScmRepository repository = getScmRepository(); checkoutDirectory = new File( workingDirectory ); - if ( checkoutDirectory.exists() ) + + System.out.println( "workingDirectory = " + workingDirectory ); + + System.out.println( "tag = " + tag ); + + // TODO: sanity check that it is not . or .. or lower + + if ( FileUtils.fileExists( workingDirectory ) ) { - // TODO: sanity check that it is not . or .. or lower - FileUtils.deleteDirectory( checkoutDirectory ); + FileUtils.deleteDirectory( workingDirectory ); + + FileUtils.mkdir( workingDirectory ); } - checkoutDirectory.mkdirs(); CheckOutScmResult result = getScmManager().checkOut( repository, new ScmFileSet( checkoutDirectory ), tag ); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]