Author: brett Date: Tue May 9 07:32:36 2006 New Revision: 405443 URL: http://svn.apache.org/viewcvs?rev=405443&view=rev Log: if using a snapshot of the release plugin, prompt if it is ok to continue (fail is the default)
Added: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/check-dependencies/snapshot-release-plugin/ maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/check-dependencies/snapshot-release-plugin/pom.xml (with props) Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java?rev=405443&r1=405442&r2=405443&view=diff ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java (original) +++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhase.java Tue May 9 07:32:36 2006 @@ -22,8 +22,11 @@ import org.apache.maven.plugins.release.ReleaseFailureException; import org.apache.maven.plugins.release.config.ReleaseConfiguration; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.components.interactivity.Prompter; +import org.codehaus.plexus.components.interactivity.PrompterException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; @@ -41,6 +44,11 @@ public class CheckDependencySnapshotsPhase extends AbstractReleasePhase { + /** + * Component used to prompt for input. + */ + private Prompter prompter; + public void execute( ReleaseConfiguration releaseConfiguration ) throws ReleaseExecutionException, ReleaseFailureException { @@ -53,12 +61,12 @@ { MavenProject project = (MavenProject) i.next(); - checkProject( project, originalVersions ); + checkProject( project, originalVersions, releaseConfiguration ); } } - private void checkProject( MavenProject project, Map originalVersions ) - throws ReleaseExecutionException, ReleaseFailureException + private void checkProject( MavenProject project, Map originalVersions, ReleaseConfiguration releaseConfiguration ) + throws ReleaseFailureException, ReleaseExecutionException { Set snapshotDependencies = new HashSet(); @@ -86,7 +94,37 @@ if ( checkArtifact( artifact, originalVersions ) ) { - snapshotDependencies.add( artifact ); + boolean addToFailures = true; + + if ( "org.apache.maven.plugins".equals( artifact.getGroupId() ) && + "maven-release-plugin".equals( artifact.getArtifactId() ) ) + { + // It's a snapshot of the release plugin. Maybe just testing - ask + // By default, we fail as for any ohter plugin + if ( releaseConfiguration.isInteractive() ) + { + try + { + prompter.showMessage( + "This project relies on a SNAPSHOT of the release plugin. This may be necessary during testing." ); + String result = prompter.prompt( "Do you want to continue with the release?", + Arrays.asList( new String[]{"yes", "no"} ), "no" ); + if ( result.toLowerCase().startsWith( "y" ) ) + { + addToFailures = false; + } + } + catch ( PrompterException e ) + { + throw new ReleaseExecutionException( e.getMessage(), e ); + } + } + } + + if ( addToFailures ) + { + snapshotDependencies.add( artifact ); + } } } @@ -152,4 +190,8 @@ execute( releaseConfiguration ); } + public void setPrompter( Prompter prompter ) + { + this.prompter = prompter; + } } Modified: maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml?rev=405443&r1=405442&r2=405443&view=diff ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml (original) +++ maven/plugins/trunk/maven-release-plugin/src/main/resources/META-INF/plexus/components.xml Tue May 9 07:32:36 2006 @@ -117,6 +117,11 @@ <role>org.apache.maven.plugins.release.phase.ReleasePhase</role> <role-hint>check-dependency-snapshots</role-hint> <implementation>org.apache.maven.plugins.release.phase.CheckDependencySnapshotsPhase</implementation> + <requirements> + <requirement> + <role>org.codehaus.plexus.components.interactivity.Prompter</role> + </requirement> + </requirements> </component> <component> <role>org.apache.maven.plugins.release.phase.ReleasePhase</role> Modified: maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java?rev=405443&r1=405442&r2=405443&view=diff ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java (original) +++ maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java Tue May 9 07:32:36 2006 @@ -16,8 +16,15 @@ * limitations under the License. */ +import org.apache.maven.plugins.release.ReleaseExecutionException; import org.apache.maven.plugins.release.ReleaseFailureException; import org.apache.maven.plugins.release.config.ReleaseConfiguration; +import org.codehaus.plexus.components.interactivity.Prompter; +import org.codehaus.plexus.components.interactivity.PrompterException; +import org.jmock.cglib.Mock; +import org.jmock.core.matcher.InvokeOnceMatcher; +import org.jmock.core.stub.ReturnStub; +import org.jmock.core.stub.ThrowStub; /** * Test the dependency snapshot check phase. @@ -59,6 +66,181 @@ // successful execution is verification enough assertTrue( true ); + } + + public void testSnapshotReleasePluginNonInteractive() + throws Exception + { + ReleaseConfiguration releaseConfiguration = createConfigurationFromProjects( "snapshot-release-plugin" ); + releaseConfiguration.setInteractive( false ); + + try + { + phase.execute( releaseConfiguration ); + + fail( "Should have failed execution" ); + } + catch ( ReleaseFailureException e ) + { + assertTrue( true ); + } + + try + { + phase.simulate( releaseConfiguration ); + + fail( "Should have failed execution" ); + } + catch ( ReleaseFailureException e ) + { + assertTrue( true ); + } + } + + public void testSnapshotReleasePluginInteractiveDeclined() + throws Exception + { + CheckDependencySnapshotsPhase phase = + (CheckDependencySnapshotsPhase) lookup( ReleasePhase.ROLE, "check-dependency-snapshots" ); + + ReleaseConfiguration releaseConfiguration = createConfigurationFromProjects( "snapshot-release-plugin" ); + + Mock mockPrompter = new Mock( Prompter.class ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "showMessage" ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).will( new ReturnStub( "no" ) ); + phase.setPrompter( (Prompter) mockPrompter.proxy() ); + + try + { + phase.execute( releaseConfiguration ); + + fail( "Should have failed execution" ); + } + catch ( ReleaseFailureException e ) + { + assertTrue( true ); + } + + mockPrompter.reset(); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "showMessage" ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).will( new ReturnStub( "no" ) ); + + try + { + phase.simulate( releaseConfiguration ); + + fail( "Should have failed execution" ); + } + catch ( ReleaseFailureException e ) + { + assertTrue( true ); + } + } + + public void testSnapshotReleasePluginInteractiveAccepted() + throws Exception + { + CheckDependencySnapshotsPhase phase = + (CheckDependencySnapshotsPhase) lookup( ReleasePhase.ROLE, "check-dependency-snapshots" ); + + ReleaseConfiguration releaseConfiguration = createConfigurationFromProjects( "snapshot-release-plugin" ); + + Mock mockPrompter = new Mock( Prompter.class ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).will( new ReturnStub( "yes" ) ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "showMessage" ); + phase.setPrompter( (Prompter) mockPrompter.proxy() ); + + phase.execute( releaseConfiguration ); + + mockPrompter.reset(); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).will( new ReturnStub( "yes" ) ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "showMessage" ); + + phase.simulate( releaseConfiguration ); + + assertTrue( true ); + } + + public void testSnapshotReleasePluginInteractiveInvalid() + throws Exception + { + CheckDependencySnapshotsPhase phase = + (CheckDependencySnapshotsPhase) lookup( ReleasePhase.ROLE, "check-dependency-snapshots" ); + + ReleaseConfiguration releaseConfiguration = createConfigurationFromProjects( "snapshot-release-plugin" ); + + Mock mockPrompter = new Mock( Prompter.class ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "showMessage" ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).will( new ReturnStub( "donkey" ) ); + phase.setPrompter( (Prompter) mockPrompter.proxy() ); + + try + { + phase.execute( releaseConfiguration ); + + fail( "Should have failed execution" ); + } + catch ( ReleaseFailureException e ) + { + assertTrue( true ); + } + + mockPrompter.reset(); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "showMessage" ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).will( new ReturnStub( "donkey" ) ); + + try + { + phase.simulate( releaseConfiguration ); + + fail( "Should have failed execution" ); + } + catch ( ReleaseFailureException e ) + { + assertTrue( true ); + } + } + + public void testSnapshotReleasePluginInteractiveException() + throws Exception + { + CheckDependencySnapshotsPhase phase = + (CheckDependencySnapshotsPhase) lookup( ReleasePhase.ROLE, "check-dependency-snapshots" ); + + ReleaseConfiguration releaseConfiguration = createConfigurationFromProjects( "snapshot-release-plugin" ); + + Mock mockPrompter = new Mock( Prompter.class ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "showMessage" ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).will( + new ThrowStub( new PrompterException( "..." ) ) ); + phase.setPrompter( (Prompter) mockPrompter.proxy() ); + + try + { + phase.execute( releaseConfiguration ); + + fail( "Should have failed execution" ); + } + catch ( ReleaseExecutionException e ) + { + assertEquals( "Check cause", PrompterException.class, e.getCause().getClass() ); + } + + mockPrompter.reset(); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "showMessage" ); + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).will( + new ThrowStub( new PrompterException( "..." ) ) ); + + try + { + phase.simulate( releaseConfiguration ); + + fail( "Should have failed execution" ); + } + catch ( ReleaseExecutionException e ) + { + assertEquals( "Check cause", PrompterException.class, e.getCause().getClass() ); + } } public void testSnapshotDependenciesInProjectOnlyMismatchedVersion() Added: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/check-dependencies/snapshot-release-plugin/pom.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/check-dependencies/snapshot-release-plugin/pom.xml?rev=405443&view=auto ============================================================================== --- maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/check-dependencies/snapshot-release-plugin/pom.xml (added) +++ maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/check-dependencies/snapshot-release-plugin/pom.xml Tue May 9 07:32:36 2006 @@ -0,0 +1,32 @@ +<!-- + ~ Copyright 2005-2006 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. + --> + +<project> + <modelVersion>4.0.0</modelVersion> + <groupId>groupId</groupId> + <artifactId>artifactId</artifactId> + <version>1.0-SNAPSHOT</version> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-release-plugin</artifactId> + <version>1.1-SNAPSHOT</version> + </plugin> + </plugins> + </build> +</project> Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/check-dependencies/snapshot-release-plugin/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/check-dependencies/snapshot-release-plugin/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision