333f87be39
- Version bump to 1.9.9: * Read WHATSNEW file for full changelist - Add reproducible.patch to allow reproducible builds of ant itself and packages built with ant like jcodings OBS-URL: https://build.opensuse.org/request/show/493610 OBS-URL: https://build.opensuse.org/package/show/Java:packages/ant?expand=0&rev=79
142 lines
5.2 KiB
Diff
142 lines
5.2 KiB
Diff
commit 7c6c749c952153170e82b791d97086e99fe2a3cb
|
|
Author: Stefan Bodewig <bodewig@apache.org>
|
|
Date: Mon May 8 18:44:07 2017 +0200
|
|
|
|
add magic property that override's tstamp's idea of "now"
|
|
|
|
https://bz.apache.org/bugzilla/show_bug.cgi?id=61079
|
|
|
|
diff --git a/manual/Tasks/tstamp.html b/manual/Tasks/tstamp.html
|
|
index 82812a579..6baa0c882 100644
|
|
--- a/manual/Tasks/tstamp.html
|
|
+++ b/manual/Tasks/tstamp.html
|
|
@@ -40,6 +40,12 @@
|
|
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>
|
|
diff --git a/manual/running.html b/manual/running.html
|
|
index 529afc7dc..3bfb500c8 100644
|
|
--- a/manual/running.html
|
|
+++ b/manual/running.html
|
|
@@ -485,6 +485,11 @@
|
|
<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>
|
|
diff --git a/src/main/org/apache/tools/ant/MagicNames.java b/src/main/org/apache/tools/ant/MagicNames.java
|
|
index bc39a2578..67ab8a810 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";
|
|
}
|
|
|
|
diff --git a/src/main/org/apache/tools/ant/taskdefs/Tstamp.java b/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
|
|
index 805427aba..a6a35d7b4 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
|
|
diff --git a/src/tests/antunit/taskdefs/tstamp-test.xml b/src/tests/antunit/taskdefs/tstamp-test.xml
|
|
new file mode 100644
|
|
index 000000000..c9bebf866
|
|
--- /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>
|