You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2010/09/29 15:22:42 UTC
svn commit: r1002613 - in /maven/release/trunk: maven-release-manager/
maven-release-manager/src/main/
maven-release-manager/src/main/java/org/apache/maven/shared/release/config/
maven-release-manager/src/main/java/org/apache/maven/shared/release/phase...
Author: brett
Date: Wed Sep 29 13:22:42 2010
New Revision: 1002613
URL: http://svn.apache.org/viewvc?rev=1002613&view=rev
Log:
[MRELEASE-458] allow creation of a branch without making unneeded changes to the POM on trunk
Submitted by: Lars Corneliussen
Added:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java
- copied, changed from r983489, maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPhase.java
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhase.java (with props)
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhase.java (with props)
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java (with props)
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java
- copied, changed from r983489, maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPhaseTest.java
maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.xml (with props)
maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.xml
- copied unchanged from r983489, maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitPhaseTest.xml
Removed:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPhase.java
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPhaseTest.java
maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitPhaseTest.xml
Modified:
maven/release/trunk/maven-release-manager/pom.xml
maven/release/trunk/maven-release-manager/src/main/components-fragment.xml
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/mdo/release-descriptor.mdo
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java
maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
maven/release/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
Modified: maven/release/trunk/maven-release-manager/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/pom.xml?rev=1002613&r1=1002612&r2=1002613&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/pom.xml (original)
+++ maven/release/trunk/maven-release-manager/pom.xml Wed Sep 29 13:22:42 2010
@@ -239,7 +239,7 @@
</execution>
</executions>
<configuration>
- <version>2.0.0</version>
+ <version>2.1.0</version>
<packageWithVersion>false</packageWithVersion>
<models>
<model>src/main/mdo/release-descriptor.mdo</model>
Modified: maven/release/trunk/maven-release-manager/src/main/components-fragment.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/components-fragment.xml?rev=1002613&r1=1002612&r2=1002613&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/components-fragment.xml (original)
+++ maven/release/trunk/maven-release-manager/src/main/components-fragment.xml Wed Sep 29 13:22:42 2010
@@ -151,7 +151,7 @@
<component>
<role>org.apache.maven.shared.release.phase.ReleasePhase</role>
<role-hint>scm-commit-release</role-hint>
- <implementation>org.apache.maven.shared.release.phase.ScmCommitPhase</implementation>
+ <implementation>org.apache.maven.shared.release.phase.ScmCommitPreparationPhase</implementation>
<requirements>
<requirement>
<role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role>
@@ -164,7 +164,7 @@
<component>
<role>org.apache.maven.shared.release.phase.ReleasePhase</role>
<role-hint>scm-commit-development</role-hint>
- <implementation>org.apache.maven.shared.release.phase.ScmCommitPhase</implementation>
+ <implementation>org.apache.maven.shared.release.phase.ScmCommitDevelopmentPhase</implementation>
<requirements>
<requirement>
<role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role>
@@ -172,12 +172,13 @@
</requirements>
<configuration>
<messageFormat>prepare for next development iteration</messageFormat>
+ <rollbackMessageFormat>rollback changes from release preparation of {0}</rollbackMessageFormat>
</configuration>
</component>
<component>
<role>org.apache.maven.shared.release.phase.ReleasePhase</role>
<role-hint>scm-commit-branch</role-hint>
- <implementation>org.apache.maven.shared.release.phase.ScmCommitPhase</implementation>
+ <implementation>org.apache.maven.shared.release.phase.ScmCommitPreparationPhase</implementation>
<requirements>
<requirement>
<role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role>
@@ -220,7 +221,7 @@
<component>
<role>org.apache.maven.shared.release.phase.ReleasePhase</role>
<role-hint>scm-commit-rollback</role-hint>
- <implementation>org.apache.maven.shared.release.phase.ScmCommitPhase</implementation>
+ <implementation>org.apache.maven.shared.release.phase.ScmCommitPreparationPhase</implementation>
<requirements>
<requirement>
<role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role>
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?rev=1002613&r1=1002612&r2=1002613&view=diff
==============================================================================
--- 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 Wed Sep 29 13:22:42 2010
@@ -82,6 +82,7 @@ public class ReleaseUtils
mergeInto.setBranchCreation( toBeMerged.isBranchCreation() );
mergeInto.setUpdateBranchVersions( toBeMerged.isUpdateBranchVersions() );
mergeInto.setUpdateWorkingCopyVersions( toBeMerged.isUpdateWorkingCopyVersions() );
+ mergeInto.setSuppressCommitBeforeTagOrBranch( toBeMerged.isSuppressCommitBeforeTagOrBranch() );
mergeInto.setUpdateVersionsToSnapshot( toBeMerged.isUpdateVersionsToSnapshot() );
mergeInto.setAllowTimestampedSnapshots( toBeMerged.isAllowTimestampedSnapshots() );
mergeInto.setSnapshotReleasePluginAllowed( toBeMerged.isSnapshotReleasePluginAllowed() );
Copied: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java (from r983489, maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPhase.java)
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java?p2=maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java&p1=maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPhase.java&r1=983489&r2=1002613&rev=1002613&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java Wed Sep 29 13:22:42 2010
@@ -46,40 +46,77 @@ import java.util.Iterator;
import java.util.List;
/**
- * Commit the project to the SCM.
+ * Holds the basic concept of committing changes to the current working copy.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author <a href="mailto:me@lcorneliussen.de">Lars Corneliussen</a>
*/
-public class ScmCommitPhase
+public abstract class AbstractScmCommitPhase
extends AbstractReleasePhase
{
+ protected boolean beforeBranchOrTag = false;
+
+ protected boolean afterBranchOrTag = false;
+
/**
* Tool that gets a configured SCM repository from release configuration.
*/
- private ScmRepositoryConfigurator scmRepositoryConfigurator;
+ protected ScmRepositoryConfigurator scmRepositoryConfigurator;
/**
* The format for the commit message.
*/
- private String messageFormat;
+ protected String messageFormat;
- public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List reactorProjects )
+ public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+ List reactorProjects )
throws ReleaseExecutionException, ReleaseFailureException
{
ReleaseResult relResult = new ReleaseResult();
validateConfiguration( releaseDescriptor );
+ runLogic( releaseDescriptor, releaseEnvironment, reactorProjects, relResult, false );
+
+ relResult.setResultCode( ReleaseResult.SUCCESS );
+
+ return relResult;
+ }
+
+ public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+ List reactorProjects )
+ throws ReleaseExecutionException, ReleaseFailureException
+ {
+ ReleaseResult result = new ReleaseResult();
+
+ validateConfiguration( releaseDescriptor );
+
+ runLogic( releaseDescriptor, releaseEnvironment, reactorProjects, result, true );
+
+ result.setResultCode( ReleaseResult.SUCCESS );
+ return result;
+ }
+
+ protected abstract void runLogic( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+ List reactorProjects, ReleaseResult result, boolean simulating )
+ throws ReleaseScmCommandException, ReleaseExecutionException, ReleaseScmRepositoryException;
+
+ protected void performCheckins( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+ List reactorProjects, String message )
+ throws ReleaseScmRepositoryException, ReleaseExecutionException, ReleaseScmCommandException
+ {
+
getLogger().info( "Checking in modified POMs..." );
ScmRepository repository;
ScmProvider provider;
try
{
- repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );
+ repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor,
+ releaseEnvironment.getSettings() );
repository.getProviderRepository().setPushChanges( releaseDescriptor.isPushChanges() );
-
+
provider = scmRepositoryConfigurator.getRepositoryProvider( repository );
}
catch ( ScmRepositoryException e )
@@ -100,7 +137,7 @@ public class ScmCommitPhase
List pomFiles = createPomFiles( releaseDescriptor, project );
ScmFileSet fileSet = new ScmFileSet( project.getFile().getParentFile(), pomFiles );
- checkin( provider, repository, fileSet, releaseDescriptor );
+ checkin( provider, repository, fileSet, releaseDescriptor, message );
}
}
else
@@ -108,19 +145,15 @@ public class ScmCommitPhase
List pomFiles = createPomFiles( releaseDescriptor, reactorProjects );
ScmFileSet fileSet = new ScmFileSet( new File( releaseDescriptor.getWorkingDirectory() ), pomFiles );
- checkin( provider, repository, fileSet, releaseDescriptor );
+ checkin( provider, repository, fileSet, releaseDescriptor, message );
}
-
- relResult.setResultCode( ReleaseResult.SUCCESS );
-
- return relResult;
}
- private void checkin( ScmProvider provider, ScmRepository repository, ScmFileSet fileSet, ReleaseDescriptor releaseDescriptor )
+ private void checkin( ScmProvider provider, ScmRepository repository, ScmFileSet fileSet,
+ ReleaseDescriptor releaseDescriptor, String message )
throws ReleaseExecutionException, ReleaseScmCommandException
{
CheckInScmResult result;
- String message = createMessage( releaseDescriptor );
try
{
result = provider.checkIn( repository, fileSet, (ScmVersion) null, message );
@@ -140,23 +173,14 @@ public class ScmCommitPhase
}
}
- public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List reactorProjects )
- throws ReleaseExecutionException, ReleaseFailureException
+ protected void simulateCheckins( ReleaseDescriptor releaseDescriptor, List reactorProjects, ReleaseResult result,
+ String message )
{
- ReleaseResult result = new ReleaseResult();
-
- validateConfiguration( releaseDescriptor );
-
Collection pomFiles = createPomFiles( releaseDescriptor, reactorProjects );
- logInfo( result, "Full run would be checking in " + pomFiles.size() + " files with message: '" +
- createMessage( releaseDescriptor ) + "'" );
-
- result.setResultCode( ReleaseResult.SUCCESS );
-
- return result;
+ logInfo( result, "Full run would be commit " + pomFiles.size() + " files with message: '" + message + "'" );
}
- private static void validateConfiguration( ReleaseDescriptor releaseDescriptor )
+ protected void validateConfiguration( ReleaseDescriptor releaseDescriptor )
throws ReleaseFailureException
{
if ( releaseDescriptor.getScmReleaseLabel() == null )
@@ -165,13 +189,13 @@ public class ScmCommitPhase
}
}
- private String createMessage( ReleaseDescriptor releaseDescriptor )
+ protected String createMessage( ReleaseDescriptor releaseDescriptor )
{
return MessageFormat.format( releaseDescriptor.getScmCommentPrefix() + messageFormat,
new Object[]{releaseDescriptor.getScmReleaseLabel()} );
}
- private static List createPomFiles( ReleaseDescriptor releaseDescriptor, MavenProject project )
+ protected static List createPomFiles( ReleaseDescriptor releaseDescriptor, MavenProject project )
{
List pomFiles = new ArrayList();
@@ -185,7 +209,7 @@ public class ScmCommitPhase
return pomFiles;
}
- private static List createPomFiles( ReleaseDescriptor releaseDescriptor, List reactorProjects )
+ protected static List createPomFiles( ReleaseDescriptor releaseDescriptor, List reactorProjects )
{
List pomFiles = new ArrayList();
for ( Iterator i = reactorProjects.iterator(); i.hasNext(); )
Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhase.java?rev=1002613&view=auto
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhase.java (added)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhase.java Wed Sep 29 13:22:42 2010
@@ -0,0 +1,100 @@
+package org.apache.maven.shared.release.phase;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.shared.release.ReleaseExecutionException;
+import org.apache.maven.shared.release.ReleaseResult;
+import org.apache.maven.shared.release.config.ReleaseDescriptor;
+import org.apache.maven.shared.release.env.ReleaseEnvironment;
+import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
+import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
+
+import java.text.MessageFormat;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Commit the changes that were done to prepare the branch or tag to the SCM.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ScmCommitDevelopmentPhase
+ extends AbstractScmCommitPhase
+{
+
+ /**
+ * The format for the
+ */
+ private String rollbackMessageFormat;
+
+ protected void runLogic( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+ List reactorProjects, ReleaseResult result, boolean simulating )
+ throws ReleaseScmCommandException, ReleaseExecutionException, ReleaseScmRepositoryException
+ {
+ // no rollback required
+ if (
+ // was there no commit that has to be rolled back by a new one
+ releaseDescriptor.isSuppressCommitBeforeTagOrBranch()
+ // and working copy should not be touched
+ && !releaseDescriptor.isUpdateWorkingCopyVersions() )
+ {
+ if ( simulating )
+ {
+ logInfo( result, "Full run would not commit changes, because updateWorkingCopyVersions is false." );
+ }
+ else
+ {
+ logInfo( result, "Modified POMs are not committed because updateWorkingCopyVersions is set to false." );
+ }
+ }
+ // rollback or commit development versions required
+ else
+ {
+ String message;
+ if ( !releaseDescriptor.isUpdateWorkingCopyVersions() )
+ {
+ // the commit is a rollback
+ message = createRollbackMessage( releaseDescriptor );
+ }
+ else
+ {
+ // a normal commit
+ message = createMessage( releaseDescriptor );
+ }
+ if ( simulating )
+ {
+ Collection pomFiles = createPomFiles( releaseDescriptor, reactorProjects );
+ logInfo( result,
+ "Full run would be commit " + pomFiles.size() + " files with message: '" + message + "'" );
+ }
+ else
+ {
+ performCheckins( releaseDescriptor, releaseEnvironment, reactorProjects, message );
+ }
+ }
+ }
+
+ private String createRollbackMessage( ReleaseDescriptor releaseDescriptor )
+ {
+ return MessageFormat.format( releaseDescriptor.getScmCommentPrefix() + rollbackMessageFormat,
+ new Object[]{releaseDescriptor.getScmReleaseLabel()} );
+ }
+
+}
\ No newline at end of file
Propchange: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhase.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhase.java?rev=1002613&view=auto
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhase.java (added)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhase.java Wed Sep 29 13:22:42 2010
@@ -0,0 +1,97 @@
+package org.apache.maven.shared.release.phase;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.shared.release.ReleaseExecutionException;
+import org.apache.maven.shared.release.ReleaseFailureException;
+import org.apache.maven.shared.release.ReleaseResult;
+import org.apache.maven.shared.release.config.ReleaseDescriptor;
+import org.apache.maven.shared.release.env.ReleaseEnvironment;
+import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
+import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
+
+import java.text.MessageFormat;
+import java.util.List;
+
+/**
+ * Commit the changes that were done to prepare the branch or tag to the SCM.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ScmCommitPreparationPhase
+ extends AbstractScmCommitPhase
+{
+
+ /**
+ * The format for the
+ */
+ private String rollbackMessageFormat;
+
+ protected void runLogic( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+ List reactorProjects, ReleaseResult result, boolean simulating )
+ throws ReleaseScmCommandException, ReleaseExecutionException, ReleaseScmRepositoryException
+ {
+ // no prepare-commit required
+ if ( releaseDescriptor.isSuppressCommitBeforeTagOrBranch() )
+ {
+ if ( simulating )
+ {
+ logInfo( result, "Full run would not commit changes, because suppressCommitBeforeTagOrBranch is set." );
+ }
+ else
+ {
+ logInfo( result,
+ "Modified POMs are not committed because suppressCommitBeforeTagOrBranch is set to false." );
+ }
+ }
+ // commit development versions required
+ else
+ {
+ String message = createMessage( releaseDescriptor );
+
+ if ( simulating )
+ {
+ simulateCheckins( releaseDescriptor, reactorProjects, result, message );
+ }
+ else
+ {
+ performCheckins( releaseDescriptor, releaseEnvironment, reactorProjects, message );
+ }
+ }
+ }
+
+ private String createRollbackMessage( ReleaseDescriptor releaseDescriptor )
+ {
+ return MessageFormat.format( releaseDescriptor.getScmCommentPrefix() + rollbackMessageFormat,
+ new Object[]{releaseDescriptor.getScmReleaseLabel()} );
+ }
+
+ protected void validateConfiguration( ReleaseDescriptor releaseDescriptor )
+ throws ReleaseFailureException
+ {
+ super.validateConfiguration( releaseDescriptor );
+
+ if ( releaseDescriptor.isSuppressCommitBeforeTagOrBranch() && releaseDescriptor.isRemoteTagging() )
+ {
+ throw new ReleaseFailureException(
+ "Cannot perform a remote tag or branch without committing the working copy first." );
+ }
+ }
+}
Propchange: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhase.java
------------------------------------------------------------------------------
svn:eol-style = native
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?rev=1002613&r1=1002612&r2=1002613&view=diff
==============================================================================
--- 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 Wed Sep 29 13:22:42 2010
@@ -349,6 +349,7 @@
<name>updateWorkingCopyVersions</name>
<version>1.0.0+</version>
<type>boolean</type>
+ <defaultValue>true</defaultValue>
<description>
Whether to update working copy POM versions.
</description>
@@ -362,6 +363,14 @@
</description>
</field>
<field>
+ <name>suppressCommitBeforeTagOrBranch</name>
+ <version>2.1.0+</version>
+ <type>boolean</type>
+ <description>
+ Whether to suppress a commit of changes to the working copy before a tag or branch is created.
+ </description>
+ </field>
+ <field>
<name>allowTimestampedSnapshots</name>
<version>1.0.0+</version>
<type>boolean</type>
@@ -602,6 +611,7 @@
branchCreation != that.branchCreation ||
updateBranchVersions != that.updateBranchVersions ||
updateWorkingCopyVersions != that.updateWorkingCopyVersions||
+ suppressCommitBeforeTagOrBranch != that.suppressCommitBeforeTagOrBranch ||
updateVersionsToSnapshot != that.updateVersionsToSnapshot ||
allowTimestampedSnapshots != that.allowTimestampedSnapshots||
remoteTagging != that.remoteTagging ||
@@ -811,6 +821,7 @@
result = 29 * result + ( branchCreation ? 1 : 0 );
result = 29 * result + ( updateBranchVersions ? 1 : 0 );
result = 29 * result + ( updateWorkingCopyVersions ? 1 : 0 );
+ result = 29 * result + ( suppressCommitBeforeTagOrBranch ? 1 : 0 );
result = 29 * result + ( updateVersionsToSnapshot ? 1 : 0 );
result = 29 * result + ( allowTimestampedSnapshots ? 1 : 0 );
result = 29 * result + ( remoteTagging ? 1 : 0 );
Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java?rev=1002613&r1=1002612&r2=1002613&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java Wed Sep 29 13:22:42 2010
@@ -42,6 +42,17 @@ public class ReleaseUtilsTest
assertEquals( "Check merge", mergedReleaseDescriptor, mergedMergeDescriptor );
}
+ public void testMergeEqualsWithUpdateWorkingCopyTrue()
+ {
+ ReleaseDescriptor mergeDescriptor = createReleaseDescriptor();
+ ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
+
+ ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
+ ReleaseDescriptor mergedMergeDescriptor = ReleaseUtils.merge( mergeDescriptor, releaseDescriptor );
+
+ assertEquals( "Check merge", mergedReleaseDescriptor, mergedMergeDescriptor );
+ }
+
public void testMergeConfigurationDestEmpty()
{
ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
Added: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java?rev=1002613&view=auto
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java (added)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java Wed Sep 29 13:22:42 2010
@@ -0,0 +1,160 @@
+package org.apache.maven.shared.release.phase;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.project.MavenProject;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.manager.ScmManagerStub;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.shared.release.config.ReleaseDescriptor;
+import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
+import org.apache.maven.shared.release.util.ReleaseUtil;
+import org.jmock.Mock;
+import org.jmock.core.Constraint;
+import org.jmock.core.constraint.IsAnything;
+import org.jmock.core.constraint.IsEqual;
+import org.jmock.core.constraint.IsNull;
+import org.jmock.core.matcher.InvokeOnceMatcher;
+import org.jmock.core.matcher.TestFailureMatcher;
+import org.jmock.core.stub.ReturnStub;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Test the SCM development commit phase.
+ *
+ * @author <a href="mailto:me@lcorneliussen.de">Lars Corneliussen</a>
+ */
+public class ScmCommitDevelopmentPhaseTest
+ extends AbstractReleaseTestCase
+{
+ private static final String COMMIT_MESSAGE = "[maven-release-manager] prepare for next development iteration";
+
+ private static final String ROLLBACK_PREFIX =
+ "[maven-release-manager] rollback changes from release preparation of ";
+
+ private List reactorProjects;
+
+ private MavenProject rootProject;
+
+ private ReleaseDescriptor descriptor;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ phase = (ReleasePhase) lookup( ReleasePhase.ROLE, "scm-commit-development" );
+
+ reactorProjects = createReactorProjects();
+ rootProject = ReleaseUtil.getRootProject( reactorProjects );
+ descriptor = createReleaseDescriptor( rootProject );
+
+ }
+
+ public void testIsCorrectImplementation()
+ {
+ assertEquals( ScmCommitDevelopmentPhase.class, phase.getClass() );
+ }
+
+ public void testNoCommitOrRollbackRequired()
+ throws Exception
+ {
+ ReleaseDescriptor descriptor = createReleaseDescriptor( rootProject );
+ List reactorProjects = createReactorProjects();
+
+ descriptor.setRemoteTagging( false );
+ descriptor.setSuppressCommitBeforeTagOrBranch( true );
+ descriptor.setUpdateWorkingCopyVersions( false );
+
+ validateNoCheckin();
+
+ phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+ assertTrue( true );
+ }
+
+ public void testCommitsNextVersions()
+ throws Exception
+ {
+ descriptor.setUpdateWorkingCopyVersions( true );
+
+ validateCheckin( COMMIT_MESSAGE );
+
+ phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+ assertTrue( true );
+ }
+
+ public void testCommitsRollbackPrepare()
+ throws Exception
+ {
+ descriptor.setUpdateWorkingCopyVersions( false );
+
+ validateCheckin( ROLLBACK_PREFIX + descriptor.getScmReleaseLabel() );
+
+ phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+ assertTrue( true );
+ }
+
+ private void validateCheckin( String message )
+ throws Exception
+ {
+ ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), rootProject.getFile() );
+ Mock scmProviderMock = new Mock( ScmProvider.class );
+ Constraint[] arguments = new Constraint[]{new IsAnything(), new IsScmFileSetEquals( fileSet ), new IsNull(),
+ new IsEqual( message )};
+ scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will( new ReturnStub(
+ new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
+
+ ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+ stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
+ }
+
+ private void validateNoCheckin()
+ throws Exception
+ {
+ Mock scmProviderMock = new Mock( ScmProvider.class );
+ scmProviderMock.expects( new TestFailureMatcher( "Shouldn't have called checkIn" ) ).method( "checkIn" );
+
+ ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+ stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
+ }
+
+ private List createReactorProjects()
+ throws Exception
+ {
+ return createReactorProjects( "scm-commit/", "single-pom" );
+ }
+
+ private static ReleaseDescriptor createReleaseDescriptor( MavenProject rootProject )
+ {
+ ReleaseDescriptor descriptor = new ReleaseDescriptor();
+ descriptor.setScmSourceUrl( "scm-url" );
+ descriptor.setScmReleaseLabel( "release-label" );
+ descriptor.setWorkingDirectory( rootProject.getFile().getParentFile().getAbsolutePath() );
+ return descriptor;
+ }
+
+}
\ No newline at end of file
Propchange: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java (from r983489, maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPhaseTest.java)
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java?p2=maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java&p1=maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPhaseTest.java&r1=983489&r2=1002613&rev=1002613&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPhaseTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java Wed Sep 29 13:22:42 2010
@@ -55,11 +55,11 @@ import java.util.Iterator;
import java.util.List;
/**
- * Test the SCM commit phase.
+ * Test the release or branch preparation SCM commit phase.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
*/
-public class ScmCommitPhaseTest
+public class ScmCommitPreparationPhaseTest
extends AbstractReleaseTestCase
{
private static final String PREFIX = "[maven-release-manager] prepare release ";
@@ -74,6 +74,17 @@ public class ScmCommitPhaseTest
phase = (ReleasePhase) lookup( ReleasePhase.ROLE, "scm-commit-release" );
}
+ public void testIsCorrectImplementation()
+ {
+ assertEquals( ScmCommitPreparationPhase.class, phase.getClass() );
+ }
+
+ public void testResolvesCorrectBranchImplementation()
+ throws Exception
+ {
+ assertEquals( ScmCommitPreparationPhase.class, lookup( ReleasePhase.ROLE, "scm-commit-branch" ).getClass() );
+ }
+
public void testCommit()
throws Exception
{
@@ -89,8 +100,8 @@ public class ScmCommitPhaseTest
Mock scmProviderMock = new Mock( ScmProvider.class );
Constraint[] arguments = new Constraint[]{new IsAnything(), new IsScmFileSetEquals( fileSet ), new IsNull(),
new IsEqual( PREFIX + "release-label" )};
- scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will(
- new ReturnStub( new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
+ scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will( new ReturnStub(
+ new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
@@ -104,7 +115,7 @@ public class ScmCommitPhaseTest
throws Exception
{
ReleaseDescriptor descriptor = new ReleaseDescriptor();
- List reactorProjects = createReactorProjects( "scm-commit/", "multiple-poms", false );
+ List reactorProjects = createReactorProjects( "scm-commit/", "multiple-poms" );
descriptor.setScmSourceUrl( "scm-url" );
MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects );
descriptor.setWorkingDirectory( rootProject.getFile().getParentFile().getAbsolutePath() );
@@ -116,14 +127,14 @@ public class ScmCommitPhaseTest
MavenProject project = (MavenProject) i.next();
poms.add( project.getFile() );
}
- ScmFileSet fileSet =
- new ScmFileSet( rootProject.getFile().getParentFile(), (File[]) poms.toArray( EMPTY_FILE_ARRAY ) );
+ ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), (File[]) poms.toArray(
+ EMPTY_FILE_ARRAY ) );
Mock scmProviderMock = new Mock( ScmProvider.class );
Constraint[] arguments = new Constraint[]{new IsAnything(), new IsScmFileSetEquals( fileSet ), new IsNull(),
new IsEqual( PREFIX + "release-label" )};
- scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will(
- new ReturnStub( new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
+ scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will( new ReturnStub(
+ new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
@@ -150,8 +161,8 @@ public class ScmCommitPhaseTest
Mock scmProviderMock = new Mock( ScmProvider.class );
Constraint[] arguments = new Constraint[]{new IsAnything(), new IsScmFileSetEquals( fileSet ), new IsNull(),
new IsEqual( "[maven-release-manager] prepare for next development iteration" )};
- scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will(
- new ReturnStub( new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
+ scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will( new ReturnStub(
+ new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
@@ -195,10 +206,10 @@ public class ScmCommitPhaseTest
ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), files );
Mock scmProviderMock = new Mock( ScmProvider.class );
- Constraint[] arguments = new Constraint[] { new IsAnything(), new IsScmFileSetEquals( fileSet ), new IsNull(),
- new IsEqual( PREFIX + "release-label" ) };
- scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will(
- new ReturnStub( new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
+ Constraint[] arguments = new Constraint[]{new IsAnything(), new IsScmFileSetEquals( fileSet ), new IsNull(),
+ new IsEqual( PREFIX + "release-label" )};
+ scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).with( arguments ).will( new ReturnStub(
+ new CheckInScmResult( "...", Collections.singletonList( rootProject.getFile() ) ) ) );
ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
@@ -218,11 +229,7 @@ public class ScmCommitPhaseTest
descriptor.setWorkingDirectory( rootProject.getFile().getParentFile().getAbsolutePath() );
descriptor.setScmReleaseLabel( "release-label" );
- Mock scmProviderMock = new Mock( ScmProvider.class );
- scmProviderMock.expects( new TestFailureMatcher( "Shouldn't have called checkIn" ) ).method( "checkIn" );
-
- ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
- stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
+ validateNoCheckin();
phase.simulate( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
@@ -253,12 +260,12 @@ public class ScmCommitPhaseTest
ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
Mock scmManagerMock = new Mock( ScmManager.class );
- scmManagerMock.expects( new InvokeOnceMatcher() ).method( "makeScmRepository" ).with(
- new IsEqual( "scm-url" ) ).will( new ThrowStub( new NoSuchScmProviderException( "..." ) ) );
+ scmManagerMock.expects( new InvokeOnceMatcher() ).method( "makeScmRepository" ).with( new IsEqual(
+ "scm-url" ) ).will( new ThrowStub( new NoSuchScmProviderException( "..." ) ) );
ScmManager scmManager = (ScmManager) scmManagerMock.proxy();
- DefaultScmRepositoryConfigurator configurator =
- (DefaultScmRepositoryConfigurator) lookup( ScmRepositoryConfigurator.ROLE );
+ DefaultScmRepositoryConfigurator configurator = (DefaultScmRepositoryConfigurator) lookup(
+ ScmRepositoryConfigurator.ROLE );
configurator.setScmManager( scmManager );
try
@@ -280,12 +287,12 @@ public class ScmCommitPhaseTest
ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
Mock scmManagerMock = new Mock( ScmManager.class );
- scmManagerMock.expects( new InvokeOnceMatcher() ).method( "makeScmRepository" ).with(
- new IsEqual( "scm-url" ) ).will( new ThrowStub( new ScmRepositoryException( "..." ) ) );
+ scmManagerMock.expects( new InvokeOnceMatcher() ).method( "makeScmRepository" ).with( new IsEqual(
+ "scm-url" ) ).will( new ThrowStub( new ScmRepositoryException( "..." ) ) );
ScmManager scmManager = (ScmManager) scmManagerMock.proxy();
- DefaultScmRepositoryConfigurator configurator =
- (DefaultScmRepositoryConfigurator) lookup( ScmRepositoryConfigurator.ROLE );
+ DefaultScmRepositoryConfigurator configurator = (DefaultScmRepositoryConfigurator) lookup(
+ ScmRepositoryConfigurator.ROLE );
configurator.setScmManager( scmManager );
try
@@ -307,8 +314,8 @@ public class ScmCommitPhaseTest
ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
Mock scmProviderMock = new Mock( ScmProvider.class );
- scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).will(
- new ThrowStub( new ScmException( "..." ) ) );
+ scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkIn" ).will( new ThrowStub( new ScmException(
+ "..." ) ) );
ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
@@ -332,8 +339,8 @@ public class ScmCommitPhaseTest
ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
ScmManager scmManager = (ScmManager) lookup( ScmManager.ROLE );
- ScmProviderStub providerStub =
- (ScmProviderStub) scmManager.getProviderByUrl( releaseDescriptor.getScmSourceUrl() );
+ ScmProviderStub providerStub = (ScmProviderStub) scmManager.getProviderByUrl(
+ releaseDescriptor.getScmSourceUrl() );
providerStub.setCheckInScmResult( new CheckInScmResult( "", "", "", false ) );
@@ -349,10 +356,62 @@ public class ScmCommitPhaseTest
}
}
+ public void testSuppressCommitWithRemoteTaggingFails()
+ throws Exception
+ {
+ ReleaseDescriptor descriptor = createReleaseDescriptor();
+ List reactorProjects = createReactorProjects();
+
+ descriptor.setRemoteTagging( true );
+ descriptor.setSuppressCommitBeforeTagOrBranch( true );
+
+ validateNoCheckin();
+
+ try
+ {
+ phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+ fail( "Commit should have failed with ReleaseFailureException" );
+ }
+ catch ( ReleaseFailureException e )
+ {
+ assertNull( "check no other cause", e.getCause() );
+ }
+
+ assertTrue( true );
+ }
+
+ public void testSuppressCommitAfterBranch()
+ throws Exception
+ {
+ ReleaseDescriptor descriptor = createReleaseDescriptor();
+ List reactorProjects = createReactorProjects();
+
+ descriptor.setBranchCreation( true );
+ descriptor.setRemoteTagging( false );
+ descriptor.setSuppressCommitBeforeTagOrBranch( true );
+
+ validateNoCheckin();
+
+ phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+ assertTrue( true );
+ }
+
+ private void validateNoCheckin()
+ throws Exception
+ {
+ Mock scmProviderMock = new Mock( ScmProvider.class );
+ scmProviderMock.expects( new TestFailureMatcher( "Shouldn't have called checkIn" ) ).method( "checkIn" );
+
+ ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+ stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
+ }
+
private List createReactorProjects()
throws Exception
{
- return createReactorProjects( "scm-commit/", "single-pom", false );
+ return createReactorProjects( "scm-commit/", "single-pom" );
}
private static ReleaseDescriptor createReleaseDescriptor()
@@ -364,4 +423,5 @@ public class ScmCommitPhaseTest
return descriptor;
}
+
}
Added: maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.xml?rev=1002613&view=auto
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.xml (added)
+++ maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.xml Wed Sep 29 13:22:42 2010
@@ -0,0 +1,36 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.scm.manager.ScmManager</role>
+ <implementation>org.apache.maven.scm.manager.ScmManagerStub</implementation>
+ </component>
+ <!-- Turn off info messages -->
+ <component>
+ <role>org.codehaus.plexus.logging.LoggerManager</role>
+ <implementation>org.codehaus.plexus.logging.console.ConsoleLoggerManager</implementation>
+ <lifecycle-handler>basic</lifecycle-handler>
+ <configuration>
+ <threshold>ERROR</threshold>
+ </configuration>
+ </component>
+ </components>
+</component-set>
Propchange: maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java?rev=1002613&r1=1002612&r2=1002613&view=diff
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java (original)
+++ maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java Wed Sep 29 13:22:42 2010
@@ -75,6 +75,21 @@ public class BranchReleaseMojo
private boolean updateWorkingCopyVersions;
/**
+ * Whether to suppress a commit of changes to the working copy
+ * before the tag is created.
+ * <br/>
+ * <br/>This requires <code>remoteTagging</code> to be set to false.
+ * <br/>
+ * <br/><code>suppressCommitBeforeBranch</code> is useful when you want
+ * to avoid poms with released versions in all revisions of your
+ * trunk or development branch.
+ *
+ * @parameter expression="${suppressCommitBeforeBranch}" default-value="false"
+ * @since 2.1
+ */
+ private boolean suppressCommitBeforeBranch;
+
+ /**
* Whether to update versions to SNAPSHOT in the branch.
*
* @parameter expression="${updateVersionsToSnapshot}" default-value="true"
@@ -174,12 +189,13 @@ public class BranchReleaseMojo
config.setRemoteTagging( remoteTagging );
config.setDefaultReleaseVersion( releaseVersion );
config.setDefaultDevelopmentVersion( developmentVersion );
+ config.setSuppressCommitBeforeTagOrBranch( suppressCommitBeforeBranch );
// Create a config containing values from the session properties (ie command line properties with cli).
ReleaseDescriptor sysPropertiesConfig
= ReleaseUtils.copyPropertiesToReleaseDescriptor( session.getExecutionProperties() );
- mergeCommandLineConfig( config, sysPropertiesConfig );
-
+ mergeCommandLineConfig( config, sysPropertiesConfig );
+
try
{
releaseManager.branch( config, getReleaseEnvironment(), reactorProjects, dryRun );
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?rev=1002613&r1=1002612&r2=1002613&view=diff
==============================================================================
--- 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 Wed Sep 29 13:22:42 2010
@@ -151,9 +151,17 @@ public class PrepareReleaseMojo
private String developmentVersion;
/**
- * currently only implemented with svn scm. Enable a workaround to prevent issue
- * due to svn client > 1.5.0 (http://jira.codehaus.org/browse/SCM-406)
+ * Currently only implemented with svn scm.
*
+ * <ul>
+ * <li>Enables a workaround to prevent issue
+ * due to svn client > 1.5.0 (fixed in 1.6.5)
+ * (http://jira.codehaus.org/browse/SCM-406)</li>
+ * <li>You may not want to use this in conjunction
+ * with <code>suppressCommitBeforeTag</code>, such that no poms with
+ * released versions are committed to the working
+ * copy ever.</li>
+ * </ul>
*
* @parameter expression="${remoteTagging}" default-value="true"
* @since 2.0-beta-9
@@ -161,6 +169,37 @@ public class PrepareReleaseMojo
private boolean remoteTagging;
/**
+ * Whether to bump the working copy versions to <code>developmentVersion</code>.
+ *
+ * @parameter expression="${updateWorkingCopyVersions}" default-value="true"
+ * @since 2.1
+ */
+ private boolean updateWorkingCopyVersions;
+
+ /**
+ * Whether to suppress a commit of changes to the working copy
+ * before the tag is created.
+ * <br/>
+ * <br/>This requires <code>remoteTagging</code> to be set to false.
+ * <br/>
+ * <br/><code>suppressCommitBeforeTag</code> is useful when you want
+ * to avoid poms with released versions in all revisions of your
+ * trunk or development branch.
+ *
+ * @parameter expression="${suppressCommitBeforeTag}" default-value="false"
+ * @since 2.1
+ */
+ private boolean suppressCommitBeforeTag;
+
+ /**
+ * @parameter expression="${session}"
+ * @readonly
+ * @required
+ * @since 2.0
+ */
+ protected MavenSession session;
+
+ /**
* {@inheritDoc}
*/
public void execute()
@@ -194,6 +233,8 @@ public class PrepareReleaseMojo
config.setDefaultReleaseVersion( releaseVersion );
config.setDefaultDevelopmentVersion( developmentVersion );
config.setRemoteTagging( remoteTagging );
+ config.setUpdateWorkingCopyVersions( updateWorkingCopyVersions );
+ config.setSuppressCommitBeforeTagOrBranch( suppressCommitBeforeTag );
// Create a config containing values from the session properties (ie command line properties with cli).
ReleaseDescriptor sysPropertiesConfig
Modified: maven/release/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java?rev=1002613&r1=1002612&r2=1002613&view=diff
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java (original)
+++ maven/release/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java Wed Sep 29 13:22:42 2010
@@ -47,11 +47,18 @@ import org.jmock.core.stub.ThrowStub;
public class PrepareReleaseMojoTest
extends AbstractMojoTestCase
{
+ private void setDefaults( PrepareReleaseMojo mojo )
+ throws IllegalAccessException
+ {
+ setVariableValueToObject( mojo, "updateWorkingCopyVersions", Boolean.TRUE );
+ }
+
public void testPrepare()
throws Exception
{
File testFile = getTestFile( "target/test-classes/mojos/prepare/prepare.xml" );
PrepareReleaseMojo mojo = (PrepareReleaseMojo) lookupMojo( "prepare", testFile );
+ setDefaults( mojo );
mojo.setBasedir( testFile.getParentFile() );
mojo.session = new MavenSession( null, null, null, null, null, null, null, null, null )
{
@@ -87,6 +94,7 @@ public class PrepareReleaseMojoTest
{
File testFile = getTestFile( "target/test-classes/mojos/prepare/prepare.xml" );
PrepareReleaseMojo mojo = (PrepareReleaseMojo) lookupMojo( "prepare", testFile );
+ setDefaults( mojo );
mojo.setBasedir( testFile.getParentFile() );
mojo.session = new MavenSession( null, null, null, null, null, null, null, null, null )
{
@@ -129,6 +137,7 @@ public class PrepareReleaseMojoTest
{
File testFile = getTestFile( "target/test-classes/mojos/prepare/prepare.xml" );
PrepareReleaseMojo mojo = (PrepareReleaseMojo) lookupMojo( "prepare", testFile );
+ setDefaults( mojo );
mojo.setBasedir( testFile.getParentFile() );
mojo.session = new MavenSession( null, null, null, null, null, null, null, null, null )
{