Author: jvanzyl Date: Mon Jan 23 18:59:09 2006 New Revision: 371784 URL: http://svn.apache.org/viewcvs?rev=371784&view=rev Log: o adding a little IT so that I can work through the issues in the release plugin
Added: maven/plugins/trunk/maven-release-plugin/src/it/ maven/plugins/trunk/maven-release-plugin/src/it/project/ maven/plugins/trunk/maven-release-plugin/src/it/project/pom.xml (with props) maven/plugins/trunk/maven-release-plugin/src/it/project/src/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/it/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/it/App.java (with props) maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/it/ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/it/AppTest.java (with props) maven/plugins/trunk/maven-release-plugin/src/it/test.sh (with props) Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/helpers/ReleaseProgressTracker.java Added: maven/plugins/trunk/maven-release-plugin/src/it/project/pom.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/it/project/pom.xml?rev=371784&view=auto ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/it/project/pom.xml (added) +++ maven/plugins/trunk/maven-release-plugin/src/it/project/pom.xml Mon Jan 23 18:59:09 2006 @@ -0,0 +1,41 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.maven.plugin.release.it</groupId> + <artifactId>test-project-one</artifactId> + <packaging>jar</packaging> + <version>1.0-SNAPSHOT</version> + <name>Maven Quick Start Archetype</name> + <url>http://maven.apache.org</url> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> + <scm> + <connection>scm:svn:file://${project.file.parentFile.parentFile}/target/svnroot/trunk/project</connection> + <developerConnection>scm:svn:file://${project.file.parentFile.parentFile}/target/svnroot/trunk/project</developerConnection> + </scm> + <build> + <pluginManagement> + <plugins> + <plugin> + <artifactId>maven-release-plugin</artifactId> + <configuration> + <tagBase>file://${project.file.parentFile.parentFile}/target/svnroot/tags</tagBase> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> + <distributionManagement> + <repository> + <id>repo1</id> + <name>Maven Central Repository</name> + <url>file://${project.file.parentFile.parentFile}/target/repository</url> + </repository> + </distributionManagement> +</project> Propchange: maven/plugins/trunk/maven-release-plugin/src/it/project/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-release-plugin/src/it/project/pom.xml ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/it/App.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/it/App.java?rev=371784&view=auto ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/it/App.java (added) +++ maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/it/App.java Mon Jan 23 18:59:09 2006 @@ -0,0 +1,13 @@ +package org.apache.maven.plugin.release.it; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} Propchange: maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/it/App.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-release-plugin/src/it/project/src/main/java/org/apache/maven/plugin/release/it/App.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/it/AppTest.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/it/AppTest.java?rev=371784&view=auto ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/it/AppTest.java (added) +++ maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/it/AppTest.java Mon Jan 23 18:59:09 2006 @@ -0,0 +1,38 @@ +package org.apache.maven.plugin.release.it; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} Propchange: maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/it/AppTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-release-plugin/src/it/project/src/test/java/org/apache/maven/plugin/release/it/AppTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/plugins/trunk/maven-release-plugin/src/it/test.sh URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/it/test.sh?rev=371784&view=auto ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/it/test.sh (added) +++ maven/plugins/trunk/maven-release-plugin/src/it/test.sh Mon Jan 23 18:59:09 2006 @@ -0,0 +1,40 @@ +#!/bin/bash + +rm -rf target + +mkdir target + +svnadmin create --fs-type fsfs target/svnroot + +dir=`readlink -f ${PWD}` + +if [ "$1" == "windows" ]; then + dir=`cygpath -m $dir` + echo setting dir to $dir +fi + +name=project + +svn import $name file://${dir}/target/svnroot/trunk/$name -m "import." +svn mkdir file://${dir}/target/svnroot/tags -m "Creating tags dir." + +svn co file://${dir}/target/svnroot/trunk/$name target/project.checkout + +cd target/project.checkout + +cat pom.xml | sed "s#\${project.file.parentFile.parentFile}#$dir#g" >tmp +mv tmp pom.xml + +svn ci -m 'update scm' pom.xml + +rm -rf target + +mvn clean install +ret=$?; if [ $ret != 0 ]; then exit $ret; fi + +mvn -e release:prepare -Denv=test +ret=$?; if [ $ret != 0 ]; then exit $ret; fi + +mvn -e release:perform -Denv=test +ret=$?; if [ $ret != 0 ]; then exit $ret; fi + Propchange: maven/plugins/trunk/maven-release-plugin/src/it/test.sh ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-release-plugin/src/it/test.sh ------------------------------------------------------------------------------ svn:executable = * Propchange: maven/plugins/trunk/maven-release-plugin/src/it/test.sh ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java?rev=371784&r1=371783&r2=371784&view=diff ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java (original) +++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java Mon Jan 23 18:59:09 2006 @@ -27,6 +27,8 @@ import org.apache.maven.settings.Settings; import org.codehaus.plexus.components.interactivity.InputHandler; +import java.io.File; + /** * @author <a href="mailto:[EMAIL PROTECTED]">John Casey</a> * @author <a href="mailto:[EMAIL PROTECTED]">Emmanuel Venisse</a> @@ -36,6 +38,13 @@ extends AbstractMojo { /** + * @parameter expression="${basedir}" + * @required + * @readonly + */ + protected File basedir; + + /** * @component */ private ScmManager scmManager; @@ -52,12 +61,12 @@ */ private Settings settings; - + private ScmHelper scmHelper; protected abstract ReleaseProgressTracker getReleaseProgress() throws MojoExecutionException; - + protected InputHandler getInputHandler() { return inputHandler; @@ -67,7 +76,7 @@ { return settings; } - + protected ScmHelper getScm( String directory ) throws MojoExecutionException { @@ -91,19 +100,20 @@ } scmHelper.setWorkingDirectory( directory ); - + loadStarteamUsernamePassword( scmHelper ); return scmHelper; } - + private ScmManager getScmManager() { return this.scmManager; } - + /** * Load starteam username/password from settings if needed + * * @param scmHelper * @throws MojoExecutionException */ @@ -113,45 +123,60 @@ if ( scmHelper.getUsername() == null || scmHelper.getPassword() == null ) { ScmRepository repository = null; - + try { repository = getScmManager().makeScmRepository( scmHelper.getUrl() ); } catch ( Exception e ) { - throw new MojoExecutionException ( "Can't load the scm provider.", e ); + throw new MojoExecutionException( "Can't load the scm provider.", e ); } if ( repository.getProvider().equals( "starteam" ) ) { StarteamScmProviderRepository starteamRepo = (StarteamScmProviderRepository) repository.getProviderRepository(); - + String starteamAddress = starteamRepo.getHost(); - + int starteamPort = starteamRepo.getPort(); - + if ( starteamPort != 0 ) { starteamAddress += ":" + starteamPort; } - + Server server = this.settings.getServer( starteamAddress ); - + if ( server != null ) { if ( scmHelper.getUsername() == null ) { scmHelper.setUsername( server.getUsername() ); } - + if ( scmHelper.getPassword() == null ) { scmHelper.setPassword( server.getPassword() ); } - } - } + } + } } - + } + + // ---------------------------------------------------------------------- + // Utility methods + // ---------------------------------------------------------------------- + + protected void removeReleaseProperties() + { + File releaseProperties = new File( basedir, ReleaseProgressTracker.RELEASE_PROPERTIES ); + + if ( releaseProperties.exists() ) + { + releaseProperties.delete(); + } + } + } Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java?rev=371784&r1=371783&r2=371784&view=diff ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java (original) +++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java Mon Jan 23 18:59:09 2006 @@ -23,6 +23,7 @@ import org.apache.maven.plugins.release.helpers.ScmHelper; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.cli.CommandLineException; import org.codehaus.plexus.util.cli.CommandLineUtils; import org.codehaus.plexus.util.cli.Commandline; @@ -49,13 +50,6 @@ extends AbstractReleaseMojo { /** - * @parameter expression="${basedir}" - * @required - * @readonly - */ - private File basedir; - - /** * Comma or space separated goals * @parameter expression="${goals}" */ @@ -96,6 +90,8 @@ checkout(); runGoals(); + + cleanup(); } private void checkout() @@ -246,6 +242,16 @@ throw new MojoExecutionException( "Can't run goal " + goals, e ); } } + + private void cleanup() + { + removeReleaseProperties(); + } + + // ---------------------------------------------------------------------- + // + // ---------------------------------------------------------------------- + protected ReleaseProgressTracker getReleaseProgress() throws MojoExecutionException Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java?rev=371784&r1=371783&r2=371784&view=diff ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java (original) +++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java Mon Jan 23 18:59:09 2006 @@ -85,13 +85,6 @@ private static final String POM = "pom.xml"; /** - * @parameter expression="${basedir}" - * @required - * @readonly - */ - private File basedir; - - /** * @parameter expression="${settings.interactiveMode}" * @required * @readonly @@ -178,58 +171,22 @@ private List pomFiles; - private void validateConfiguration() - throws MojoExecutionException - { - if ( StringUtils.isEmpty( urlScm ) ) - { - Model model = ( (MavenProject) reactorProjects.get( 0 ) ).getModel(); - if ( model.getScm() != null ) - { - urlScm = model.getScm().getConnection(); - if ( StringUtils.isEmpty( urlScm ) ) - { - throw new MojoExecutionException( - "Missing required setting: scm connection or developerConnection must be specified." ); - } - } - } - } - - private void checkpoint( String pointName ) - throws MojoExecutionException - { - try - { - getReleaseProgress().checkpoint( pointName ); - } - catch ( IOException e ) - { - getLog().warn( "Error writing checkpoint.", e ); - } - } - - private Set createReactorProjectSet( List reactorProjects ) - { - Set reactorProjectSet = new HashSet(); - - for ( Iterator it = reactorProjects.iterator(); it.hasNext(); ) - { - MavenProject project = (MavenProject) it.next(); - - String versionlessArtifactKey = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ); - - reactorProjectSet.add( versionlessArtifactKey ); - } - - return reactorProjectSet; - } - public void execute() throws MojoExecutionException, MojoFailureException { + // ---------------------------------------------------------------------- + // Path of clarity + // + // You should be able to easily see what the path is that this will follow + // in order to release a plugin. + // ---------------------------------------------------------------------- + validateConfiguration(); + // checkForInitialization() + + // checkForReleasedPrepared() + checkpoint( ReleaseProgressTracker.CP_INITIALIZED ); if ( !getReleaseProgress().verifyCheckpoint( ReleaseProgressTracker.CP_PREPARED_RELEASE ) ) @@ -282,8 +239,11 @@ for ( Iterator it = reactorProjects.iterator(); it.hasNext(); ) { MavenProject project = (MavenProject) it.next(); + String projectId = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ); + Model model = (Model) releasedProjects.get( projectId ); + updateDependencyManagement( model, project.getFile(), "release" ); } @@ -328,6 +288,57 @@ checkpoint( ReleaseProgressTracker.CP_PREPARED_RELEASE ); } + } + + // ---------------------------------------------------------------------- + // + // ---------------------------------------------------------------------- + + private void validateConfiguration() + throws MojoExecutionException + { + if ( StringUtils.isEmpty( urlScm ) ) + { + Model model = ( (MavenProject) reactorProjects.get( 0 ) ).getModel(); + if ( model.getScm() != null ) + { + urlScm = model.getScm().getConnection(); + if ( StringUtils.isEmpty( urlScm ) ) + { + throw new MojoExecutionException( + "Missing required setting: scm connection or developerConnection must be specified." ); + } + } + } + } + + private void checkpoint( String pointName ) + throws MojoExecutionException + { + try + { + getReleaseProgress().checkpoint( pointName ); + } + catch ( IOException e ) + { + getLog().warn( "Error writing checkpoint.", e ); + } + } + + private Set createReactorProjectSet( List reactorProjects ) + { + Set reactorProjectSet = new HashSet(); + + for ( Iterator it = reactorProjects.iterator(); it.hasNext(); ) + { + MavenProject project = (MavenProject) it.next(); + + String versionlessArtifactKey = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ); + + reactorProjectSet.add( versionlessArtifactKey ); + } + + return reactorProjectSet; } private void updateDependencyManagement( Model model, File file, String type ) Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/helpers/ReleaseProgressTracker.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/helpers/ReleaseProgressTracker.java?rev=371784&r1=371783&r2=371784&view=diff ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/helpers/ReleaseProgressTracker.java (original) +++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/helpers/ReleaseProgressTracker.java Mon Jan 23 18:59:09 2006 @@ -14,8 +14,7 @@ public class ReleaseProgressTracker { - - private static final String RELEASE_PROPERTIES = "release.properties"; + public static final String RELEASE_PROPERTIES = "release.properties"; private static final String USERNAME = "maven.username";