You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by st...@apache.org on 2011/06/24 17:48:07 UTC
svn commit: r1139359 - in /maven/release/trunk: maven-release-manager/
maven-release-manager/src/main/java/org/apache/maven/shared/release/config/
maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/
maven-release-manager/src/main...
Author: stephenc
Date: Fri Jun 24 15:48:07 2011
New Revision: 1139359
URL: http://svn.apache.org/viewvc?rev=1139359&view=rev
Log:
[MRELEASE-159] Support a pattern to generate the release tag.
o I had a quick look at the suggested solutions and basing off of MessageFormat requires people to remember exactly which {0} and {1} correspond with. This solution uses plexus-interpolation to interpolate properties delimited with @{ and } so that the properties escape Maven's default interpolation which would resolve them in the -SNAPSHOT project.
o May need to double check that the site generates correctly
Added:
maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt.vm (contents, props changed)
- copied, changed from r1139308, maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt
Removed:
maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt
Modified:
maven/release/trunk/maven-release-manager/pom.xml
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
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/java/org/apache/maven/shared/release/phase/InputVariablesPhase.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/phase/InputVariablesPhaseTest.java
maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.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=1139359&r1=1139358&r2=1139359&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/pom.xml (original)
+++ maven/release/trunk/maven-release-manager/pom.xml Fri Jun 24 15:48:07 2011
@@ -66,6 +66,11 @@
</exclusion>
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ <version>1.14</version>
+ </dependency>
<dependency>
<groupId>org.sonatype.plexus</groupId>
Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java?rev=1139359&r1=1139358&r2=1139359&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java Fri Jun 24 15:48:07 2011
@@ -143,6 +143,10 @@ public class PropertiesReleaseDescriptor
{
properties.setProperty( "scm.tag", config.getScmReleaseLabel() );
}
+ if ( config.getScmTagNameFormat() != null )
+ {
+ properties.setProperty( "scm.tagNameFormat", config.getScmTagNameFormat() );
+ }
if ( config.getScmCommentPrefix() != null )
{
properties.setProperty( "scm.commentPrefix", config.getScmCommentPrefix() );
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=1139359&r1=1139358&r2=1139359&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 Fri Jun 24 15:48:07 2011
@@ -58,6 +58,7 @@ public class ReleaseUtils
mergeInto.setScmReleaseLabel(
mergeOverride( mergeInto.getScmReleaseLabel(), toBeMerged.getScmReleaseLabel() ) );
mergeInto.setScmTagBase( mergeOverride( mergeInto.getScmTagBase(), toBeMerged.getScmTagBase() ) );
+ mergeInto.setScmTagNameFormat( mergeOverride( mergeInto.getScmTagNameFormat(), toBeMerged.getScmTagNameFormat() ) );
mergeInto.setScmBranchBase( mergeOverride( mergeInto.getScmBranchBase(), toBeMerged.getScmBranchBase() ) );
mergeInto.setScmUsername( mergeOverride( mergeInto.getScmUsername(), toBeMerged.getScmUsername() ) );
mergeInto.setScmPassword( mergeOverride( mergeInto.getScmPassword(), toBeMerged.getScmPassword() ) );
@@ -140,6 +141,7 @@ public class ReleaseUtils
releaseDescriptor.setScmPrivateKey( properties.getProperty( "scm.privateKey" ) );
releaseDescriptor.setScmPrivateKeyPassPhrase( properties.getProperty( "scm.passphrase" ) );
releaseDescriptor.setScmTagBase( properties.getProperty( "scm.tagBase" ) );
+ releaseDescriptor.setScmTagNameFormat( properties.getProperty( "scm.tagNameFormat" ) );
releaseDescriptor.setScmBranchBase( properties.getProperty( "scm.branchBase" ) );
releaseDescriptor.setScmReleaseLabel( properties.getProperty( "scm.tag" ) );
releaseDescriptor.setScmCommentPrefix( properties.getProperty( "scm.commentPrefix" ) );
Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java?rev=1139359&r1=1139358&r2=1139359&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java Fri Jun 24 15:48:07 2011
@@ -34,8 +34,15 @@ import org.apache.maven.shared.release.s
import org.apache.maven.shared.release.util.ReleaseUtil;
import org.codehaus.plexus.components.interactivity.Prompter;
import org.codehaus.plexus.components.interactivity.PrompterException;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
+import org.codehaus.plexus.interpolation.PrefixedPropertiesValueSource;
+import org.codehaus.plexus.interpolation.RecursionInterceptor;
+import org.codehaus.plexus.interpolation.StringSearchInterpolator;
import java.util.List;
+import java.util.Properties;
/**
* Input any variables that were not yet configured.
@@ -105,7 +112,32 @@ public class InputVariablesPhase
throw new ReleaseExecutionException( "Project tag cannot be selected if version is not yet mapped" );
}
- String defaultTag = project.getArtifactId() + "-" + releaseVersion;
+ String defaultTag;
+ String scmTagNameFormat = releaseDescriptor.getScmTagNameFormat();
+ if ( scmTagNameFormat != null )
+ {
+ Interpolator interpolator = new StringSearchInterpolator( "@{", "}" );
+ List<String> possiblePrefixes = java.util.Arrays.asList( "project", "pom" );
+ Properties values = new Properties();
+ values.setProperty( "artifactId", project.getArtifactId() );
+ values.setProperty( "groupId", project.getGroupId() );
+ values.setProperty( "version", project.getVersion() );
+ interpolator.addValueSource( new PrefixedPropertiesValueSource( possiblePrefixes, values, true ) );
+ RecursionInterceptor recursionInterceptor = new PrefixAwareRecursionInterceptor( possiblePrefixes );
+ try
+ {
+ defaultTag = interpolator.interpolate( scmTagNameFormat, recursionInterceptor );
+ }
+ catch ( InterpolationException e )
+ {
+ throw new ReleaseExecutionException(
+ "Could not interpolate specified tag name format: " + scmTagNameFormat, e );
+ }
+ }
+ else
+ {
+ defaultTag = project.getArtifactId() + "-" + releaseVersion;
+ }
ScmProvider provider = null;
try
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=1139359&r1=1139358&r2=1139359&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 Fri Jun 24 15:48:07 2011
@@ -470,6 +470,18 @@
</description>
</field>
+ <field>
+ <name>scmTagNameFormat</name>
+ <version>2.2.0+</version>
+ <type>String</type>
+ <defaultValue>@{project.artifactId}-@{project.version}</defaultValue>
+ <description>
+ Specifies the format for generating a tag name. Property expansion is
+ used with the optional prefix of project, where properties are delimited
+ with @{ and }
+ </description>
+ </field>
+
<!-- Announcement Information
Announcement related info, this can be a second part of the process.
@@ -772,6 +784,10 @@
{
return false;
}
+ if ( !safeEquals( scmTagNameFormat, that.scmTagNameFormat ) )
+ {
+ return false;
+ }
return true;
}
Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/InputVariablesPhaseTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/InputVariablesPhaseTest.java?rev=1139359&r1=1139358&r2=1139359&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/InputVariablesPhaseTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/InputVariablesPhaseTest.java Fri Jun 24 15:48:07 2011
@@ -284,6 +284,38 @@ public class InputVariablesPhaseTest
assertEquals( "Check tag", "artifactId-1_0", releaseConfiguration.getScmReleaseLabel() );
}
+ //MRELEASE-159
+ public void testCustomTagFormat()
+ throws Exception
+ {
+ Mock mockPrompter = new Mock( Prompter.class );
+ mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" );
+ phase.setPrompter( (Prompter) mockPrompter.proxy() );
+
+ List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
+ ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
+ releaseDescriptor.setInteractive( false );
+ releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
+ releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
+
+ phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+ assertEquals( "Check tag", "artifactId-1.0", releaseDescriptor.getScmReleaseLabel() );
+
+ mockPrompter.reset();
+ mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" );
+
+ releaseDescriptor = new ReleaseDescriptor();
+ releaseDescriptor.setInteractive( false );
+ releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
+ releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
+ releaseDescriptor.setScmTagNameFormat( "simulated-@{artifactId}-@{version}" );
+
+ phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+ assertEquals( "Check tag", "simulated-artifactId-1.0", releaseDescriptor.getScmReleaseLabel() );
+ }
+
private static MavenProject createProject( String artifactId, String version )
{
Model model = new Model();
Modified: maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java?rev=1139359&r1=1139358&r2=1139359&view=diff
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java (original)
+++ maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java Fri Jun 24 15:48:07 2011
@@ -69,6 +69,21 @@ public abstract class AbstractReleaseMoj
private String tag;
/**
+ * Format to use when generating the tag name if none is specified. Property interpolation is performed on the
+ * tag, but in order to ensure that the interpolation occurs during release, you must use <code>@{...}</code>
+ * to reference the properties rather than <code>${...}</code>. The following properties are available:
+ * <ul>
+ * <li><code>groupId</code> or <code>project.groupId</code> - The groupId of the root project.
+ * <li><code>artifactId</code> or <code>project.artifactId</code> - The artifactId of the root project.
+ * <li><code>version</code> or <code>project.version</code> - The release version of the root project.
+ * </ul>
+ *
+ * @parameter expression="${tagNameFormat}" default-value="@{project.artifactId}-@{project.version}"
+ * @since 2.2.0
+ */
+ private String tagNameFormat;
+
+ /**
* The tag base directory in SVN, you must define it if you don't use the standard svn layout (trunk/tags/branches).
* For example, <code>http://svn.apache.org/repos/asf/maven/plugins/tags</code>. The URL is an SVN URL and does not
* include the SCM provider and protocol.
@@ -254,6 +269,7 @@ public abstract class AbstractReleaseMoj
descriptor.setScmPassword( password );
descriptor.setScmReleaseLabel( tag );
+ descriptor.setScmTagNameFormat( tagNameFormat );
descriptor.setScmTagBase( tagBase );
descriptor.setScmUsername( username );
descriptor.setScmCommentPrefix( scmCommentPrefix );
Copied: maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt.vm (from r1139308, maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt)
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt.vm?p2=maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt.vm&p1=maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt&r1=1139308&r2=1139359&rev=1139359&view=diff
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt (original)
+++ maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt.vm Fri Jun 24 15:48:07 2011
@@ -93,4 +93,52 @@ mvn release:prepare-with-pom
This goal is equivalent to the <<<release:prepare>>> goal, except that it requires a previous build of the project to
exist to properly populate the <<<release-pom.xml>>> files.
+* Overriding the default tag name format
+ By default, if you do not specify a tag name, a default tag name of <<<artifactId>>>-<<<version>>> will be
+ suggested (and if running non-interactively used).
+
+ You can specify the exact tag name to use from the command line by passing the <<<tag>>> property, but if you
+ want to have the tag name generated, but just change the default pattern, you can use the <<<tagNameFormat>>>
+ configuration option.
+
+ For example to have the tag name default to the version number prefixed with a <<<v>>> you could configure
+ your pom like so:
+
++-----
+<project>
+ [...]
+ <build>
+ [...]
+ <plugins>
+ [...]
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>${project.version}</version>
+ <configuration>
+ <tagNameFormat>v@{project.version}</tagNameFormat>
+ </configuration>
+ </plugin>
+ [...]
+ </plugins>
+ [...]
+ </build>
+ [...]
+</project>
++-----
+
+ The tagNameFormat uses <<<@{>>> and <<<}>>> as delimiters in order to ensure that the default Maven property
+ interpolation does not substitute the values before the version transformation has taken place.
+
+ The following properties are supported:
+
+ * <<<project.groupId>>> which corresponds to the project's groupId.
+
+ * <<<project.artifactId>>> which corresponds to the project's artifactId.
+
+ * <<<project.version>>> which corresponds to the project's release version.
+
+ []
+
+ The <<<project.>>> prefix is optional and may be omitted.
\ No newline at end of file
Propchange: maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt.vm
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/release/trunk/maven-release-plugin/src/site/apt/examples/prepare-release.apt.vm
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision