From 1097d41e4fc4a8008411d0ef9532e906775da765 Mon Sep 17 00:00:00 2001 From: Justin Georgeson Date: Mon, 20 Jun 2016 23:17:35 -0500 Subject: [PATCH] Unify timestampFormat parameter between Create*Mojo - Update CreateMojo to use Utils.createTimestamp() - Check value of timestampFormat for MessageFormat style and warn/convert for backwards compatibility - Update IT projects with SimpleDateFormat style configuration for executions of create goal & add a new test to verify legacy behavior (Fixes #40 & #41) --- pom.xml | 2 +- .../org/codehaus/mojo/build/CreateMojo.java | 22 ++++++- .../java/org/codehaus/mojo/build/Utils.java | 8 ++- src/site/apt/usage.apt.vm | 2 +- .../mojo/build/it/BuildNumberMojoTest.java | 21 +++++++ src/test/projects/MBUILDNUM-83/pom.xml | 2 +- ...ecb9e8e8eabe052fe4b3156db3e83741e.svn-base | 2 +- src/test/projects/MOJO-1668/pom.xml | 2 +- .../projects/basic-it-clearcase-scm/pom.xml | 2 +- src/test/projects/basic-it-git/pom.xml | 2 +- ...4a5074b47315f9fac29b4930d2a2b7ae5.svn-base | 2 +- .../dotSvnDir/text-base/pom.xml.svn-base | 2 +- src/test/projects/basic-it-no-devscm/pom.xml | 2 +- ...8f7fb9790d8c2819c640d641d4ff2093f.svn-base | 2 +- src/test/projects/basic-it-svnjava/pom.xml | 2 +- ...83de4bd67f35fdab9bd4707604ab1c092.svn-base | 2 +- .../dotSvnDir/text-base/pom.xml.svn-base | 2 +- src/test/projects/basic-it/pom.xml | 2 +- .../git-basic-it-MBUILDNUM-66/pom.xml | 2 +- src/test/projects/legacy-timestamp-it/pom.xml | 58 +++++++++++++++++++ 20 files changed, 122 insertions(+), 19 deletions(-) create mode 100644 src/test/projects/legacy-timestamp-it/pom.xml diff --git a/pom.xml b/pom.xml index 544569c..e1cd598 100644 --- a/pom.xml +++ b/pom.xml @@ -373,7 +373,7 @@ javasvn true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/main/java/org/codehaus/mojo/build/CreateMojo.java b/src/main/java/org/codehaus/mojo/build/CreateMojo.java index 63c2c59..8295ef8 100644 --- a/src/main/java/org/codehaus/mojo/build/CreateMojo.java +++ b/src/main/java/org/codehaus/mojo/build/CreateMojo.java @@ -184,13 +184,21 @@ public class CreateMojo private String locale; /** - * Apply this java.text.MessageFormat to the timestamp only (as opposed to the format parameter). + * Apply this {@link java.text.SimpleDateFormat} to the timestamp only (as opposed to the format parameter). * * @since 1.0-beta-2 */ @Parameter( property = "maven.buildNumber.timestampFormat" ) private String timestampFormat; + /** + * The timezone of the generated timestamp. If blank will default to {@link TimeZone#getDefault()} + * + * @since 3.0.0 + */ + @Parameter( property = "maven.buildNumber.timestampTimeZone", defaultValue = "" ) + private String timezone; + /** * Selects alternative SCM provider implementations. Each map key denotes the original provider type as given in the * SCM URL like "cvs" or "svn", the map value specifies the provider type of the desired implementation to use @@ -437,7 +445,17 @@ private void buildNumberAndTimeStampForReactorProjects( Date now, String tainted String timestamp = String.valueOf( now.getTime() ); if ( timestampFormat != null ) { - timestamp = MessageFormat.format( timestampFormat, new Object[] { now } ); + if ( timestampFormat.matches( "\\{0,date,[^\\}]+\\}" ) ) + { + getLog().warn( "The timestampFormat parameter now uses java.text.SimpleDateFormat." ); + getLog().warn( "Please update your POM as support for java.text.MessageFormat may be removed." ); + timestamp = Utils.createTimestamp( timestampFormat.replaceFirst( "\\{0,date,([^\\}]+)\\}", "$1" ), + timezone, now ); + } + else + { + timestamp = Utils.createTimestamp( timestampFormat, timezone, now ); + } } getLog().info( MessageFormat.format( "Storing buildNumber: {0} at timestamp: {1}", diff --git a/src/main/java/org/codehaus/mojo/build/Utils.java b/src/main/java/org/codehaus/mojo/build/Utils.java index 1834707..874d8bc 100644 --- a/src/main/java/org/codehaus/mojo/build/Utils.java +++ b/src/main/java/org/codehaus/mojo/build/Utils.java @@ -36,7 +36,13 @@ private Utils() public static String createTimestamp( String timestampFormat, String timeZoneId ) { - Date now = Calendar.getInstance().getTime(); + return createTimestamp( timestampFormat, timeZoneId, null ); + } + + public static String createTimestamp( String timestampFormat, String timeZoneId, Date now ) + { + if ( null == now ) + now = Calendar.getInstance().getTime(); if ( StringUtils.isBlank( timestampFormat ) ) { diff --git a/src/site/apt/usage.apt.vm b/src/site/apt/usage.apt.vm index bc5f2ce..3ba1057 100644 --- a/src/site/apt/usage.apt.vm +++ b/src/site/apt/usage.apt.vm @@ -155,7 +155,7 @@ Usage +------------------------------------------+ - {0,date,yyyy-MM-dd HH:mm:ss} + yyyy-MM-dd HH:mm:ss timestamp diff --git a/src/test/java/org/codehaus/mojo/build/it/BuildNumberMojoTest.java b/src/test/java/org/codehaus/mojo/build/it/BuildNumberMojoTest.java index 45926bd..f0aff82 100644 --- a/src/test/java/org/codehaus/mojo/build/it/BuildNumberMojoTest.java +++ b/src/test/java/org/codehaus/mojo/build/it/BuildNumberMojoTest.java @@ -182,6 +182,27 @@ public void createTimestampItTest() } + @Test + public void legacyTimestampItTest() + throws Exception + { + File projDir = resources.getBasedir( "legacy-timestamp-it" ); + + MavenExecution mavenExec = maven.forProject( projDir ); + MavenExecutionResult result = mavenExec.execute( "clean", "verify" ); + result.assertLogText( "Please update your POM" ); + + File testDir = result.getBasedir(); + File artifact = new File( testDir, "target/buildnumber-maven-plugin-legacy-timestamp-it-1.0-SNAPSHOT.jar" ); + JarFile jarFile = new JarFile( artifact ); + Attributes manifest = jarFile.getManifest().getMainAttributes(); + jarFile.close(); + String timestamp = manifest.getValue( "Build-Time" ); + SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" ); + Assert.assertNotNull( format.parse( timestamp ) ); + + } + @Test public void failLocalChangeItTest() throws Exception diff --git a/src/test/projects/MBUILDNUM-83/pom.xml b/src/test/projects/MBUILDNUM-83/pom.xml index d5da579..156377c 100644 --- a/src/test/projects/MBUILDNUM-83/pom.xml +++ b/src/test/projects/MBUILDNUM-83/pom.xml @@ -54,7 +54,7 @@ javasvn true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/MOJO-1668/dotSvnDir/pristine/85/85ead35ecb9e8e8eabe052fe4b3156db3e83741e.svn-base b/src/test/projects/MOJO-1668/dotSvnDir/pristine/85/85ead35ecb9e8e8eabe052fe4b3156db3e83741e.svn-base index b9a6840..9ea6c16 100644 --- a/src/test/projects/MOJO-1668/dotSvnDir/pristine/85/85ead35ecb9e8e8eabe052fe4b3156db3e83741e.svn-base +++ b/src/test/projects/MOJO-1668/dotSvnDir/pristine/85/85ead35ecb9e8e8eabe052fe4b3156db3e83741e.svn-base @@ -49,7 +49,7 @@ foo bar - {0,date,yyyyMMdd_HHmmss} + yyyyMMdd_HHmmss diff --git a/src/test/projects/MOJO-1668/pom.xml b/src/test/projects/MOJO-1668/pom.xml index 23b32a4..a589c47 100644 --- a/src/test/projects/MOJO-1668/pom.xml +++ b/src/test/projects/MOJO-1668/pom.xml @@ -54,7 +54,7 @@ foo bar - {0,date,yyyyMMdd_HHmmss} + yyyyMMdd_HHmmss diff --git a/src/test/projects/basic-it-clearcase-scm/pom.xml b/src/test/projects/basic-it-clearcase-scm/pom.xml index 9b53c2b..11585e6 100644 --- a/src/test/projects/basic-it-clearcase-scm/pom.xml +++ b/src/test/projects/basic-it-clearcase-scm/pom.xml @@ -43,7 +43,7 @@ foo true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it-git/pom.xml b/src/test/projects/basic-it-git/pom.xml index 83a7621..f063ae0 100644 --- a/src/test/projects/basic-it-git/pom.xml +++ b/src/test/projects/basic-it-git/pom.xml @@ -42,7 +42,7 @@ true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it-no-devscm/dotSvnDir/pristine/b8/b87a2294a5074b47315f9fac29b4930d2a2b7ae5.svn-base b/src/test/projects/basic-it-no-devscm/dotSvnDir/pristine/b8/b87a2294a5074b47315f9fac29b4930d2a2b7ae5.svn-base index c048ca9..3625b0e 100644 --- a/src/test/projects/basic-it-no-devscm/dotSvnDir/pristine/b8/b87a2294a5074b47315f9fac29b4930d2a2b7ae5.svn-base +++ b/src/test/projects/basic-it-no-devscm/dotSvnDir/pristine/b8/b87a2294a5074b47315f9fac29b4930d2a2b7ae5.svn-base @@ -40,7 +40,7 @@ true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it-no-devscm/dotSvnDir/text-base/pom.xml.svn-base b/src/test/projects/basic-it-no-devscm/dotSvnDir/text-base/pom.xml.svn-base index d1f704a..1ac469c 100644 --- a/src/test/projects/basic-it-no-devscm/dotSvnDir/text-base/pom.xml.svn-base +++ b/src/test/projects/basic-it-no-devscm/dotSvnDir/text-base/pom.xml.svn-base @@ -40,7 +40,7 @@ true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it-no-devscm/pom.xml b/src/test/projects/basic-it-no-devscm/pom.xml index a24cee2..4c0a56b 100644 --- a/src/test/projects/basic-it-no-devscm/pom.xml +++ b/src/test/projects/basic-it-no-devscm/pom.xml @@ -40,7 +40,7 @@ true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it-svnjava/dotSvnDir/pristine/76/76ff7cf8f7fb9790d8c2819c640d641d4ff2093f.svn-base b/src/test/projects/basic-it-svnjava/dotSvnDir/pristine/76/76ff7cf8f7fb9790d8c2819c640d641d4ff2093f.svn-base index 5e1b30d..03607c3 100644 --- a/src/test/projects/basic-it-svnjava/dotSvnDir/pristine/76/76ff7cf8f7fb9790d8c2819c640d641d4ff2093f.svn-base +++ b/src/test/projects/basic-it-svnjava/dotSvnDir/pristine/76/76ff7cf8f7fb9790d8c2819c640d641d4ff2093f.svn-base @@ -45,7 +45,7 @@ javasvn true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it-svnjava/pom.xml b/src/test/projects/basic-it-svnjava/pom.xml index fb9c244..a44c249 100644 --- a/src/test/projects/basic-it-svnjava/pom.xml +++ b/src/test/projects/basic-it-svnjava/pom.xml @@ -52,7 +52,7 @@ javasvn true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it/dotSvnDir/pristine/be/be81b1b83de4bd67f35fdab9bd4707604ab1c092.svn-base b/src/test/projects/basic-it/dotSvnDir/pristine/be/be81b1b83de4bd67f35fdab9bd4707604ab1c092.svn-base index 1b3c0cf..ba5513c 100644 --- a/src/test/projects/basic-it/dotSvnDir/pristine/be/be81b1b83de4bd67f35fdab9bd4707604ab1c092.svn-base +++ b/src/test/projects/basic-it/dotSvnDir/pristine/be/be81b1b83de4bd67f35fdab9bd4707604ab1c092.svn-base @@ -38,7 +38,7 @@ true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it/dotSvnDir/text-base/pom.xml.svn-base b/src/test/projects/basic-it/dotSvnDir/text-base/pom.xml.svn-base index 6a05ae9..d4d4bcd 100644 --- a/src/test/projects/basic-it/dotSvnDir/text-base/pom.xml.svn-base +++ b/src/test/projects/basic-it/dotSvnDir/text-base/pom.xml.svn-base @@ -38,7 +38,7 @@ true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/basic-it/pom.xml b/src/test/projects/basic-it/pom.xml index 0852f06..ff7a2a1 100644 --- a/src/test/projects/basic-it/pom.xml +++ b/src/test/projects/basic-it/pom.xml @@ -38,7 +38,7 @@ true - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/git-basic-it-MBUILDNUM-66/pom.xml b/src/test/projects/git-basic-it-MBUILDNUM-66/pom.xml index eedd1ce..ede95c8 100644 --- a/src/test/projects/git-basic-it-MBUILDNUM-66/pom.xml +++ b/src/test/projects/git-basic-it-MBUILDNUM-66/pom.xml @@ -36,7 +36,7 @@ create - {0,date,yyyy-MM-dd} + yyyy-MM-dd diff --git a/src/test/projects/legacy-timestamp-it/pom.xml b/src/test/projects/legacy-timestamp-it/pom.xml new file mode 100644 index 0000000..7e354ef --- /dev/null +++ b/src/test/projects/legacy-timestamp-it/pom.xml @@ -0,0 +1,58 @@ + + + + 4.0.0 + + org.codehaus.mojo.it + buildnumber-maven-plugin-legacy-timestamp-it + 1.0-SNAPSHOT + + + scm:git:https://github.com/mojohaus/buildnumber-maven-plugin/test/bogus.git + + + + + package + + + + org.codehaus.mojo + buildnumber-maven-plugin + ${it-plugin.version} + + + legacyTimestampFormat + + create + + + true + {0,date,yyyy-MM-dd} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.5 + + + + true + true + true + + + ${timestamp} + + + + + + + + + \ No newline at end of file