Repository: ant Updated Branches: refs/heads/1.9.x e293c7a29 -> 7c6c749c9
add magic property that override's tstamp's idea of "now" https://bz.apache.org/bugzilla/show_bug.cgi?id=61079 Project: http://git-wip-us.apache.org/repos/asf/ant/repo Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/7c6c749c Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/7c6c749c Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/7c6c749c Branch: refs/heads/1.9.x Commit: 7c6c749c952153170e82b791d97086e99fe2a3cb Parents: e293c7a Author: Stefan Bodewig <[email protected]> Authored: Mon May 8 18:44:07 2017 +0200 Committer: Stefan Bodewig <[email protected]> Committed: Mon May 8 18:44:07 2017 +0200 ---------------------------------------------------------------------- WHATSNEW | 4 +++ manual/Tasks/tstamp.html | 6 +++++ manual/running.html | 5 ++++ src/main/org/apache/tools/ant/MagicNames.java | 13 ++++++++++ .../org/apache/tools/ant/taskdefs/Tstamp.java | 19 +++++++++++++- src/tests/antunit/taskdefs/tstamp-test.xml | 27 ++++++++++++++++++++ 6 files changed, 73 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ant/blob/7c6c749c/WHATSNEW ---------------------------------------------------------------------- diff --git a/WHATSNEW b/WHATSNEW index 9dac453..aa2ad03 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -18,6 +18,10 @@ Other changes: * added "regexp" attribute to <linecontainsregexp> Bugzilla Report 60968 + * added a new magic property ant.tstamp.now that can be used to + override the current time/date used by <tstamp>. + Bugzilla Report 61079 + Changes from Ant 1.9.8 TO Ant 1.9.9 =================================== http://git-wip-us.apache.org/repos/asf/ant/blob/7c6c749c/manual/Tasks/tstamp.html ---------------------------------------------------------------------- diff --git a/manual/Tasks/tstamp.html b/manual/Tasks/tstamp.html index 82812a5..6baa0c8 100644 --- a/manual/Tasks/tstamp.html +++ b/manual/Tasks/tstamp.html @@ -40,6 +40,12 @@ time-stamped filenames, or used to replace placeholder tags inside documents to indicate, for example, the release date. The best place for this task is probably in an initialization target.</p> +<p><em>Since Ant 1.9.10</em> the magic + property <code>ant.tstamp.now</code> can be used to specify a fixed + date value in order to create reproducible builds. Its value must be + a number and is interpreted as seconds since the epoch (midnight + 1970-01-01).</p> + <h3>Parameters</h3> <table border="1" cellpadding="2" cellspacing="0"> <tr> http://git-wip-us.apache.org/repos/asf/ant/blob/7c6c749c/manual/running.html ---------------------------------------------------------------------- diff --git a/manual/running.html b/manual/running.html index 529afc7..3bfb500 100644 --- a/manual/running.html +++ b/manual/running.html @@ -485,6 +485,11 @@ org.apache.tools.ant.Executor implementation specified here. <a href="argumentprocessor.html#repository">ArgumentProcessor internal repository</a>. </td> </tr> +<tr> + <td><code>ant.tstamp.now</code></td> + <td>number, seconds since the epoch (midnight 1970-01-01)</td> + <td>The value to use as current time and date for <tstamp></td> +</tr> </table> <p> http://git-wip-us.apache.org/repos/asf/ant/blob/7c6c749c/src/main/org/apache/tools/ant/MagicNames.java ---------------------------------------------------------------------- diff --git a/src/main/org/apache/tools/ant/MagicNames.java b/src/main/org/apache/tools/ant/MagicNames.java index bc39a25..67ab8a8 100644 --- a/src/main/org/apache/tools/ant/MagicNames.java +++ b/src/main/org/apache/tools/ant/MagicNames.java @@ -289,5 +289,18 @@ public final class MagicNames { * Value {@value} */ public static final String HTTP_AGENT_PROPERTY = "ant.http.agent"; + + /** + * Magic property that can be set to contain a value for tstamp's + * "now" in order to make builds that use the task create + * reproducible results. + * + * <p>The value is expected to be a number representing the date + * as seconds since the epoch.</p> + * + * Value: {@value} + * @since Ant 1.9.10 + */ + public static final String TSTAMP_NOW = "ant.tstamp.now"; } http://git-wip-us.apache.org/repos/asf/ant/blob/7c6c749c/src/main/org/apache/tools/ant/taskdefs/Tstamp.java ---------------------------------------------------------------------- diff --git a/src/main/org/apache/tools/ant/taskdefs/Tstamp.java b/src/main/org/apache/tools/ant/taskdefs/Tstamp.java index 805427a..a6a35d7 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Tstamp.java +++ b/src/main/org/apache/tools/ant/taskdefs/Tstamp.java @@ -32,6 +32,7 @@ import java.util.Vector; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Location; +import org.apache.tools.ant.MagicNames; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.EnumeratedAttribute; @@ -68,7 +69,7 @@ public class Tstamp extends Task { */ public void execute() throws BuildException { try { - Date d = new Date(); + Date d = getNow(); Enumeration i = customFormats.elements(); while (i.hasMoreElements()) { @@ -110,6 +111,22 @@ public class Tstamp extends Task { } /** + * Return the {@link Date} instance to use as base for DSTAMP, TSTAMP and TODAY. + */ + protected Date getNow() { + String magicNow = getProject().getProperty(MagicNames.TSTAMP_NOW); + if (magicNow != null && magicNow.length() > 0) { + try { + return new Date(1000 * Long.parseLong(magicNow)); + } catch (NumberFormatException ex) { + log("magic property " + MagicNames.TSTAMP_NOW + " ignored as " + + magicNow + " is not a valid number"); + } + } + return new Date(); + } + + /** * This nested element that allows a property to be set * to the current date and time in a given format. * The date/time patterns are as defined in the http://git-wip-us.apache.org/repos/asf/ant/blob/7c6c749c/src/tests/antunit/taskdefs/tstamp-test.xml ---------------------------------------------------------------------- diff --git a/src/tests/antunit/taskdefs/tstamp-test.xml b/src/tests/antunit/taskdefs/tstamp-test.xml new file mode 100644 index 0000000..c9bebf8 --- /dev/null +++ b/src/tests/antunit/taskdefs/tstamp-test.xml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- + 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. +--> +<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit"> + <import file="../antunit-base.xml" /> + + <target name="testMagicProperty"> + <local name="ant.tstamp.now"/> + <property name="ant.tstamp.now" value="100000"/> + <tstamp/> + <au:assertPropertyEquals name="DSTAMP" value="19700102"/> + </target> +</project>
