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-ffa450edef68master
@@ -35,6 +35,11 @@ Other changes: | |||||
* <touch> has filelist support. | * <touch> has filelist support. | ||||
* A new roundup attribute on <zip> 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 | Changes from Ant 1.6.1 to current Ant 1.6 CVS version | ||||
============================================= | ============================================= | ||||
@@ -114,6 +114,20 @@ attributes of zipfilesets in a Zip or Jar task.)</p> | |||||
<td valign="top">behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". </td> | <td valign="top">behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". </td> | ||||
<td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">roundup</td> | |||||
<td valign="top">Whether the file modification times will be | |||||
rounded up to the next even number of seconds.<br> | |||||
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.<br> | |||||
Defaults to true. <em>Since Ant 1.7</em></td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<h3>Nested elements</h3> | <h3>Nested elements</h3> | ||||
<h4>metainf</h4> | <h4>metainf</h4> | ||||
@@ -168,6 +168,20 @@ being wrapped and continued on the next line. | |||||
<td valign="top">The encoding used to read the JAR manifest, when a manifest file is specified.</td> | <td valign="top">The encoding used to read the JAR manifest, when a manifest file is specified.</td> | ||||
<td valign="top" align="center">No, defaults to the platform encoding.</td> | <td valign="top" align="center">No, defaults to the platform encoding.</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">roundup</td> | |||||
<td valign="top">Whether the file modification times will be | |||||
rounded up to the next even number of seconds.<br> | |||||
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.<br> | |||||
Defaults to true. <em>Since Ant 1.7</em></td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<h3>Nested elements</h3> | <h3>Nested elements</h3> | ||||
@@ -121,6 +121,20 @@ attributes of zipfilesets in a Zip or Jar task.)</p> | |||||
<td valign="top">behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". </td> | <td valign="top">behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". </td> | ||||
<td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">roundup</td> | |||||
<td valign="top">Whether the file modification times will be | |||||
rounded up to the next even number of seconds.<br> | |||||
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.<br> | |||||
Defaults to true. <em>Since Ant 1.7</em></td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<h3>Nested elements</h3> | <h3>Nested elements</h3> | ||||
<h4>lib</h4> | <h4>lib</h4> | ||||
@@ -164,6 +164,20 @@ versions of zip and unzip for many Unix and Unix-like systems.</p> | |||||
<td valign="top">behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". </td> | <td valign="top">behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". </td> | ||||
<td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">roundup</td> | |||||
<td valign="top">Whether the file modification times will be | |||||
rounded up to the next even number of seconds.<br> | |||||
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.<br> | |||||
Defaults to true. <em>Since Ant 1.7</em></td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<h3>Parameters specified as nested elements</h3> | <h3>Parameters specified as nested elements</h3> | ||||
<h4>fileset</h4> | <h4>fileset</h4> | ||||
@@ -111,6 +111,14 @@ public class Zip extends MatchingTask { | |||||
*/ | */ | ||||
private boolean keepCompression = false; | 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 | * This is the name/location of where to | ||||
* create the .zip file. | * create the .zip file. | ||||
@@ -288,6 +296,24 @@ public class Zip extends MatchingTask { | |||||
keepCompression = keep; | keepCompression = keep; | ||||
} | } | ||||
/** | |||||
* Whether the file modification times will be rounded up to the | |||||
* next even number of seconds. | |||||
* | |||||
* <p>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.</p> | |||||
* | |||||
* @since Ant 1.7 | |||||
*/ | |||||
public void setRoundUp(boolean r) { | |||||
roundUp = r; | |||||
} | |||||
/** | /** | ||||
* validate and build | * validate and build | ||||
*/ | */ | ||||
@@ -914,10 +940,10 @@ public class Zip extends MatchingTask { | |||||
ZipEntry ze = new ZipEntry (vPath); | ZipEntry ze = new ZipEntry (vPath); | ||||
if (dir != null && dir.exists()) { | if (dir != null && dir.exists()) { | ||||
// ZIPs store time with a granularity of 2 seconds, round up | // ZIPs store time with a granularity of 2 seconds, round up | ||||
ze.setTime(dir.lastModified() + 1999); | |||||
ze.setTime(dir.lastModified() + (roundUp ? 1999 : 0)); | |||||
} else { | } else { | ||||
// ZIPs store time with a granularity of 2 seconds, round up | // 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.setSize (0); | ||||
ze.setMethod (ZipEntry.STORED); | ze.setMethod (ZipEntry.STORED); | ||||
@@ -1047,7 +1073,9 @@ public class Zip extends MatchingTask { | |||||
FileInputStream fIn = new FileInputStream(file); | FileInputStream fIn = new FileInputStream(file); | ||||
try { | try { | ||||
// ZIPs store time with a granularity of 2 seconds, round up | // 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 { | } finally { | ||||
fIn.close(); | fIn.close(); | ||||
} | } | ||||