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(); | ||||
| } | } | ||||