From 7617c7398abf6c57e4030a5f36783194755cb863 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Fri, 27 Feb 2004 14:17:41 +0000 Subject: [PATCH] A new roundup attribute on and related task can be used to control whether the file modification times inside the archive will be rounded up or down (since zips only store modification times with a granularity of two seconds). The default remains to round up. PR: 17934 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276167 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 5 +++ docs/manual/CoreTasks/ear.html | 14 ++++++++ docs/manual/CoreTasks/jar.html | 14 ++++++++ docs/manual/CoreTasks/war.html | 14 ++++++++ docs/manual/CoreTasks/zip.html | 14 ++++++++ .../org/apache/tools/ant/taskdefs/Zip.java | 34 +++++++++++++++++-- 6 files changed, 92 insertions(+), 3 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 428697723..21a7bc29d 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -35,6 +35,11 @@ Other changes: * has filelist support. +* A new roundup attribute on and related task can be used to + control whether the file modification times inside the archive will + be rounded up or down (since zips only store modification times with + a granularity of two seconds). The default remains to round up. + Bugzilla Report 17934. Changes from Ant 1.6.1 to current Ant 1.6 CVS version ============================================= diff --git a/docs/manual/CoreTasks/ear.html b/docs/manual/CoreTasks/ear.html index b7e60c9ad..0f0f57c5a 100644 --- a/docs/manual/CoreTasks/ear.html +++ b/docs/manual/CoreTasks/ear.html @@ -114,6 +114,20 @@ attributes of zipfilesets in a Zip or Jar task.)

behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". No + + roundup + Whether the file modification times will be + rounded up to the next even number of seconds.
+ Zip archives store file modification times with a granularity of + two seconds, so the times will either be rounded up or down. If + you round down, the archive will always seem out-of-date when you + rerun the task, so the default is to round up. Rounding up may + lead to a different type of problems like JSPs inside a web + archive that seem to be slightly more recent than precompiled + pages, rendering precompilation useless.
+ Defaults to true. Since Ant 1.7 + No +

Nested elements

metainf

diff --git a/docs/manual/CoreTasks/jar.html b/docs/manual/CoreTasks/jar.html index c4be398cd..2dcf4a10b 100644 --- a/docs/manual/CoreTasks/jar.html +++ b/docs/manual/CoreTasks/jar.html @@ -168,6 +168,20 @@ being wrapped and continued on the next line. The encoding used to read the JAR manifest, when a manifest file is specified. No, defaults to the platform encoding. + + roundup + Whether the file modification times will be + rounded up to the next even number of seconds.
+ Zip archives store file modification times with a granularity of + two seconds, so the times will either be rounded up or down. If + you round down, the archive will always seem out-of-date when you + rerun the task, so the default is to round up. Rounding up may + lead to a different type of problems like JSPs inside a web + archive that seem to be slightly more recent than precompiled + pages, rendering precompilation useless.
+ Defaults to true. Since Ant 1.7 + No +

Nested elements

diff --git a/docs/manual/CoreTasks/war.html b/docs/manual/CoreTasks/war.html index c7a636735..c51612935 100644 --- a/docs/manual/CoreTasks/war.html +++ b/docs/manual/CoreTasks/war.html @@ -121,6 +121,20 @@ attributes of zipfilesets in a Zip or Jar task.)

behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". No + + roundup + Whether the file modification times will be + rounded up to the next even number of seconds.
+ Zip archives store file modification times with a granularity of + two seconds, so the times will either be rounded up or down. If + you round down, the archive will always seem out-of-date when you + rerun the task, so the default is to round up. Rounding up may + lead to a different type of problems like JSPs inside a web + archive that seem to be slightly more recent than precompiled + pages, rendering precompilation useless.
+ Defaults to true. Since Ant 1.7 + No +

Nested elements

lib

diff --git a/docs/manual/CoreTasks/zip.html b/docs/manual/CoreTasks/zip.html index ea7e6cc54..14ee4d7bc 100644 --- a/docs/manual/CoreTasks/zip.html +++ b/docs/manual/CoreTasks/zip.html @@ -164,6 +164,20 @@ versions of zip and unzip for many Unix and Unix-like systems.

behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". No + + roundup + Whether the file modification times will be + rounded up to the next even number of seconds.
+ Zip archives store file modification times with a granularity of + two seconds, so the times will either be rounded up or down. If + you round down, the archive will always seem out-of-date when you + rerun the task, so the default is to round up. Rounding up may + lead to a different type of problems like JSPs inside a web + archive that seem to be slightly more recent than precompiled + pages, rendering precompilation useless.
+ Defaults to true. Since Ant 1.7 + No +

Parameters specified as nested elements

fileset

diff --git a/src/main/org/apache/tools/ant/taskdefs/Zip.java b/src/main/org/apache/tools/ant/taskdefs/Zip.java index 807573b74..369e7fc3a 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Zip.java +++ b/src/main/org/apache/tools/ant/taskdefs/Zip.java @@ -111,6 +111,14 @@ public class Zip extends MatchingTask { */ private boolean keepCompression = false; + /** + * Whether the file modification times will be rounded up to the + * next even number of seconds. + * + * @since Ant 1.7 + */ + private boolean roundUp = true; + /** * This is the name/location of where to * create the .zip file. @@ -288,6 +296,24 @@ public class Zip extends MatchingTask { keepCompression = keep; } + /** + * Whether the file modification times will be rounded up to the + * next even number of seconds. + * + *

Zip archives store file modification times with a + * granularity of two seconds, so the times will either be rounded + * up or down. If you round down, the archive will always seem + * out-of-date when you rerun the task, so the default is to round + * up. Rounding up may lead to a different type of problems like + * JSPs inside a web archive that seem to be slightly more recent + * than precompiled pages, rendering precompilation useless.

+ * + * @since Ant 1.7 + */ + public void setRoundUp(boolean r) { + roundUp = r; + } + /** * validate and build */ @@ -914,10 +940,10 @@ public class Zip extends MatchingTask { ZipEntry ze = new ZipEntry (vPath); if (dir != null && dir.exists()) { // ZIPs store time with a granularity of 2 seconds, round up - ze.setTime(dir.lastModified() + 1999); + ze.setTime(dir.lastModified() + (roundUp ? 1999 : 0)); } else { // ZIPs store time with a granularity of 2 seconds, round up - ze.setTime(System.currentTimeMillis() + 1999); + ze.setTime(System.currentTimeMillis() + (roundUp ? 1999 : 0)); } ze.setSize (0); ze.setMethod (ZipEntry.STORED); @@ -1047,7 +1073,9 @@ public class Zip extends MatchingTask { FileInputStream fIn = new FileInputStream(file); try { // ZIPs store time with a granularity of 2 seconds, round up - zipFile(fIn, zOut, vPath, file.lastModified() + 1999, null, mode); + zipFile(fIn, zOut, vPath, + file.lastModified() + (roundUp ? 1999 : 0), + null, mode); } finally { fIn.close(); }