Repository: maven
Updated Branches:
refs/heads/master f1dcec88a -> 2a4d17260
MNG-5452: ${maven.build.timestamp} should use UTC instead of local timezone (or
be configurable)
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/2a4d1726
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/2a4d1726
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/2a4d1726
Branch: refs/heads/master
Commit: 2a4d172600a6252da662edb450e9513067d6ef9e
Parents: f1dcec8
Author: Jason van Zyl <[email protected]>
Authored: Thu Jun 12 14:09:19 2014 -0400
Committer: Jason van Zyl <[email protected]>
Committed: Fri Jun 13 10:25:37 2014 -0400
----------------------------------------------------------------------
.../java/org/apache/maven/DefaultMaven.java | 10 +--
.../AbstractStringBasedModelInterpolator.java | 42 ++++--------
.../BuildTimestampValueSource.java | 26 ++------
.../interpolation/MavenBuildTimestamp.java | 69 ++++++++++++++++++++
.../AbstractModelInterpolatorTest.java | 2 +-
.../interpolation/MavenBuildTimestampTest.java | 38 +++++++++++
6 files changed, 128 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/2a4d1726/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index d8425b5..06d61aa 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -35,6 +35,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.TimeZone;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
@@ -54,6 +55,7 @@ import org.apache.maven.model.building.ModelProblem;
import org.apache.maven.model.building.ModelProblemUtils;
import org.apache.maven.model.building.ModelSource;
import org.apache.maven.model.building.UrlModelSource;
+import org.apache.maven.model.interpolation.MavenBuildTimestamp;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
@@ -206,14 +208,8 @@ public class DefaultMaven
//
private MavenExecutionResult doExecute( MavenExecutionRequest request )
{
- if ( request.getStartTime() != null )
- {
- request.getSystemProperties().put( "${build.timestamp}",
- new SimpleDateFormat(
"yyyyMMdd-hhmm" ).format( request.getStartTime() ) );
- }
-
request.setStartTime( new Date() );
-
+
MavenExecutionResult result = new DefaultMavenExecutionResult();
try
http://git-wip-us.apache.org/repos/asf/maven/blob/2a4d1726/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
----------------------------------------------------------------------
diff --git
a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
index 863eb44..3ad2348 100644
---
a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
+++
b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
@@ -19,10 +19,20 @@ package org.apache.maven.model.interpolation;
* under the License.
*/
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Properties;
+
import org.apache.maven.model.Model;
import org.apache.maven.model.building.ModelBuildingRequest;
-import org.apache.maven.model.building.ModelProblemCollector;
import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
import org.apache.maven.model.path.PathTranslator;
import org.apache.maven.model.path.UrlNormalizer;
import org.codehaus.plexus.component.annotations.Requirement;
@@ -38,16 +48,6 @@ import
org.codehaus.plexus.interpolation.PrefixedValueSourceWrapper;
import org.codehaus.plexus.interpolation.RecursionInterceptor;
import org.codehaus.plexus.interpolation.ValueSource;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import org.apache.maven.model.building.ModelProblem.Version;
-import org.apache.maven.model.building.ModelProblemCollectorRequest;
-
/**
* Use a regular expression search to find and resolve expressions within the
POM.
*
@@ -56,18 +56,6 @@ import
org.apache.maven.model.building.ModelProblemCollectorRequest;
public abstract class AbstractStringBasedModelInterpolator
implements ModelInterpolator
{
-
- /**
- * The default format used for build timestamps.
- */
- static final String DEFAULT_BUILD_TIMESTAMP_FORMAT = "yyyyMMdd-HHmm";
-
- /**
- * The name of a property that if present in the model's {@code
<properties>} section specifies a custom format for
- * build timestamps. See {@link java.text.SimpleDateFormat} for details on
the format.
- */
- private static final String BUILD_TIMESTAMP_FORMAT_PROPERTY =
"maven.build.timestamp.format";
-
private static final List<String> PROJECT_PREFIXES = Arrays.asList(
"pom.", "project." );
private static final Collection<String> TRANSLATED_PATH_EXPRESSIONS;
@@ -168,13 +156,7 @@ public abstract class AbstractStringBasedModelInterpolator
}
}, PROJECT_PREFIXES, false );
valueSources.add( baseUriValueSource );
-
- String timestampFormat = DEFAULT_BUILD_TIMESTAMP_FORMAT;
- if ( modelProperties != null )
- {
- timestampFormat = modelProperties.getProperty(
BUILD_TIMESTAMP_FORMAT_PROPERTY, timestampFormat );
- }
- valueSources.add( new BuildTimestampValueSource(
config.getBuildStartTime(), timestampFormat ) );
+ valueSources.add( new BuildTimestampValueSource(
config.getBuildStartTime(), modelProperties ) );
}
valueSources.add( modelValueSource1 );
http://git-wip-us.apache.org/repos/asf/maven/blob/2a4d1726/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java
----------------------------------------------------------------------
diff --git
a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java
b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java
index 07787eb..4542a3f 100644
---
a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java
+++
b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java
@@ -19,44 +19,28 @@ package org.apache.maven.model.interpolation;
* under the License.
*/
-import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Properties;
import org.codehaus.plexus.interpolation.AbstractValueSource;
-/**
- *
- */
class BuildTimestampValueSource
extends AbstractValueSource
{
-
- private final Date startTime;
-
- private final String format;
+ private final MavenBuildTimestamp mavenBuildTimestamp;
- private String formattedDate;
-
- public BuildTimestampValueSource( Date startTime, String format )
+ public BuildTimestampValueSource( Date startTime, Properties properties )
{
super( false );
- this.startTime = startTime;
- this.format = format;
+ this.mavenBuildTimestamp = new MavenBuildTimestamp( startTime,
properties );
}
public Object getValue( String expression )
{
if ( "build.timestamp".equals( expression ) ||
"maven.build.timestamp".equals( expression ) )
{
- if ( formattedDate == null && startTime != null )
- {
- formattedDate = new SimpleDateFormat( format ).format(
startTime );
- }
-
- return formattedDate;
+ return mavenBuildTimestamp.formattedTimestamp();
}
-
return null;
}
-
}
http://git-wip-us.apache.org/repos/asf/maven/blob/2a4d1726/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java
----------------------------------------------------------------------
diff --git
a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java
b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java
new file mode 100644
index 0000000..d342566
--- /dev/null
+++
b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java
@@ -0,0 +1,69 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * 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 java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import java.util.TimeZone;
+
+public class MavenBuildTimestamp
+{
+ public static final String DEFAULT_BUILD_TIMESTAMP_FORMAT =
"yyyyMMdd-HHmm";
+
+ public static final String BUILD_TIMESTAMP_FORMAT_PROPERTY =
"maven.build.timestamp.format";
+
+ private String formattedTimestamp;
+
+ public MavenBuildTimestamp()
+ {
+ this( new Date() );
+ }
+
+ public MavenBuildTimestamp( Date time )
+ {
+ this( time, DEFAULT_BUILD_TIMESTAMP_FORMAT );
+ }
+
+ public MavenBuildTimestamp( Date time, Properties properties )
+ {
+ this( time, properties != null ? properties.getProperty(
BUILD_TIMESTAMP_FORMAT_PROPERTY ) : null );
+ }
+
+ public MavenBuildTimestamp( Date time, String timestampFormat )
+ {
+ if ( timestampFormat == null )
+ {
+ timestampFormat = DEFAULT_BUILD_TIMESTAMP_FORMAT;
+ }
+ if ( time == null )
+ {
+ time = new Date();
+ }
+ SimpleDateFormat dateFormat = new SimpleDateFormat( timestampFormat );
+ dateFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
+ formattedTimestamp = dateFormat.format( time );
+ }
+
+ public String formattedTimestamp()
+ {
+ return formattedTimestamp;
+ }
+}
http://git-wip-us.apache.org/repos/asf/maven/blob/2a4d1726/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
----------------------------------------------------------------------
diff --git
a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
index cb34ddf..97c0715 100644
---
a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
+++
b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
@@ -108,7 +108,7 @@ public abstract class AbstractModelInterpolatorTest
Date secondTestDate = cal.getTime();
SimpleDateFormat format =
- new SimpleDateFormat(
AbstractStringBasedModelInterpolator.DEFAULT_BUILD_TIMESTAMP_FORMAT );
+ new SimpleDateFormat(
MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT );
assertEquals( "19761111-0016", format.format( firstTestDate ) );
assertEquals( "19761111-2316", format.format( secondTestDate ) );
}
http://git-wip-us.apache.org/repos/asf/maven/blob/2a4d1726/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java
----------------------------------------------------------------------
diff --git
a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java
b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java
new file mode 100644
index 0000000..83038b8
--- /dev/null
+++
b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java
@@ -0,0 +1,38 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * 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 java.util.Date;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+public class MavenBuildTimestampTest
+ extends TestCase
+{
+ public void testMavenBuildTimestampUsesUTC()
+ {
+ Properties interpolationProperties = new Properties();
+ interpolationProperties.setProperty( "maven.build.timestamp.format",
"yyyyMMdd-HHmm:z" );
+ MavenBuildTimestamp timestamp = new MavenBuildTimestamp( new Date(),
interpolationProperties );
+ String formattedTimestamp = timestamp.formattedTimestamp();
+ assertTrue( "We expect the UTC marker at the end of the timestamp.",
formattedTimestamp.endsWith( "UTC" ) );
+ }
+}