Author: bodewig Date: Tue Aug 25 03:48:01 2009 New Revision: 807466 URL: http://svn.apache.org/viewvc?rev=807466&view=rev Log: port roundup from core <zip>
Modified: ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Ar.java ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Cpio.java ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Tar.java ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java ant/sandbox/antlibs/compress/trunk/src/tests/antunit/conditions-test.xml ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml Modified: ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Ar.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Ar.java?rev=807466&r1=807465&r2=807466&view=diff ============================================================================== --- ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Ar.java (original) +++ ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Ar.java Tue Aug 25 03:48:01 2009 @@ -33,7 +33,8 @@ + " directory entries"; public Ar() { - super(new ArStreamFactory(), + super(new ArStreamFactory()); + setBuilder( new ArchiveBase.EntryBuilder() { public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags r) { boolean isDir = r.getResource().isDirectory(); @@ -69,7 +70,8 @@ return new ArArchiveEntry(r.getName(), r.getResource().getSize(), uid, gid, mode, - r.getResource().getLastModified() + round(r.getResource() + .getLastModified(), 1000) / 1000); } }); Modified: ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java?rev=807466&r1=807465&r2=807466&view=diff ============================================================================== --- ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java (original) +++ ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java Tue Aug 25 03:48:01 2009 @@ -66,7 +66,7 @@ */ public abstract class ArchiveBase extends Task { private final StreamFactory factory; - private final EntryBuilder builder; + private EntryBuilder builder; private Resource dest; private List/*<ResourceCollection>*/ sources = new ArrayList(); @@ -74,9 +74,13 @@ private String encoding; private boolean filesOnly = true; private boolean preserve0permissions = false; + private boolean roundUp = true; - protected ArchiveBase(StreamFactory factory, EntryBuilder builder) { + protected ArchiveBase(StreamFactory factory) { this.factory = factory; + } + + protected final void setBuilder(EntryBuilder builder) { this.builder = builder; } @@ -135,6 +139,25 @@ preserve0permissions = b; } + /** + * Whether the file modification times will be rounded up to the + * next timestamp (second or even second depending on the archive + * format). + * + * <p>Zip archives store file modification times with a + * granularity of two seconds, ar, tar and cpio use a granularity + * of one second. 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> + * @param r a <code>boolean</code> value + */ + public void setRoundUp(boolean r) { + roundUp = r; + } + public void execute() { validate(); if (!dest.isExists()) { @@ -162,6 +185,10 @@ * Argument validation. */ protected void validate() throws BuildException { + if (builder == null) { + throw new BuildException("subclass didn't provide a builder" + + " instance"); + } if (dest == null) { throw new BuildException("must provide a destination resource"); } @@ -450,6 +477,17 @@ } /** + * Modify last modified timestamp based on the roundup attribute. + * + * @param millis the timestamp + * @param granularity the granularity of timestamps in the archive + * format in millis + */ + protected long round(long millis, long granularity) { + return roundUp ? millis + granularity - 1 : millis; + } + + /** * Valid Modes for create/update/replace. */ public static final class Mode extends EnumeratedAttribute { Modified: ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Cpio.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Cpio.java?rev=807466&r1=807465&r2=807466&view=diff ============================================================================== --- ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Cpio.java (original) +++ ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Cpio.java Tue Aug 25 03:48:01 2009 @@ -28,7 +28,8 @@ */ public class Cpio extends ArchiveBase { public Cpio() { - super(new CpioStreamFactory(), + super(new CpioStreamFactory()); + setBuilder( new ArchiveBase.EntryBuilder() { public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags r) { boolean isDir = r.getResource().isDirectory(); @@ -36,7 +37,8 @@ new CpioArchiveEntry(r.getName(), isDir ? 0 : r.getResource().getSize()); - ent.setTime(r.getResource().getLastModified() / 1000); + ent.setTime(round(r.getResource().getLastModified(), 1000) + / 1000); int mode = isDir ? ArchiveFileSet.DEFAULT_DIR_MODE Modified: ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Tar.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Tar.java?rev=807466&r1=807465&r2=807466&view=diff ============================================================================== --- ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Tar.java (original) +++ ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Tar.java Tue Aug 25 03:48:01 2009 @@ -29,7 +29,8 @@ */ public class Tar extends ArchiveBase { public Tar() { - super(new TarStreamFactory(), + super(new TarStreamFactory()); + setBuilder( new ArchiveBase.EntryBuilder() { public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags r) { boolean isDir = r.getResource().isDirectory(); @@ -37,7 +38,8 @@ new TarArchiveEntry(r.getName(), isDir ? TarConstants.LF_DIR : TarConstants.LF_NORMAL); - ent.setModTime(r.getResource().getLastModified()); + ent.setModTime(round(r.getResource().getLastModified(), + 1000)); ent.setSize(isDir ? 0 : r.getResource().getSize()); if (!isDir && r.getCollectionFlags().hasModeBeenSet()) { Modified: ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java?rev=807466&r1=807465&r2=807466&view=diff ============================================================================== --- ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java (original) +++ ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java Tue Aug 25 03:48:01 2009 @@ -28,12 +28,13 @@ */ public class Zip extends ArchiveBase { public Zip() { - super(new ZipStreamFactory(), + super(new ZipStreamFactory()); + setBuilder( new ArchiveBase.EntryBuilder() { public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags r) { boolean isDir = r.getResource().isDirectory(); ZipArchiveEntry ent = new ZipArchiveEntry(r.getName()); - ent.setTime(r.getResource().getLastModified()); + ent.setTime(round(r.getResource().getLastModified(), 2000)); ent.setSize(isDir ? 0 : r.getResource().getSize()); if (!isDir && r.getCollectionFlags().hasModeBeenSet()) { Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/conditions-test.xml URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/conditions-test.xml?rev=807466&r1=807465&r2=807466&view=diff ============================================================================== --- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/conditions-test.xml (original) +++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/conditions-test.xml Tue Aug 25 03:48:01 2009 @@ -270,7 +270,7 @@ <target name="testCoreZipIsLastModified" depends="setUp"> <au:assertTrue> - <cond:islastmodified datetime="2009-08-19-05:49:20" + <cond:islastmodified datetime="2009-08-19-05:49:22" pattern="yyyy-MM-dd-HH:mm:ss"> <zipentry name="asf-logo.gif"> <file file="${input}/test.zip"/> @@ -291,7 +291,7 @@ <target name="testAntlibZipIsLastModified" depends="setUp"> <au:assertTrue> - <cond:islastmodified datetime="2009-08-19-05:49:20" + <cond:islastmodified datetime="2009-08-19-05:49:22" pattern="yyyy-MM-dd-HH:mm:ss"> <cmp:zipentry name="asf-logo.gif"> <file file="${input}/test.zip"/> Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml?rev=807466&r1=807465&r2=807466&view=diff ============================================================================== --- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml (original) +++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml Tue Aug 25 03:48:01 2009 @@ -60,7 +60,7 @@ <cmp:zip destfile="${dest}"> <fileset dir="${input}" includes="asf-logo.gif"/> </cmp:zip> - <checkProperties dateTime="2009-08-19-05:49:20 +0200"/> + <checkProperties dateTime="2009-08-19-05:49:22 +0200"/> </target> <target name="testCoreZipFileSet" depends="setUp"> @@ -106,7 +106,7 @@ <cmp:arfileset src="../resources/asf-logo.gif.ar" includes="asf-logo.gif"/> </cmp:zip> - <checkProperties dateTime="2009-07-31-20:11:12 +0200" mode="644" + <checkProperties dateTime="2009-07-31-20:11:14 +0200" mode="644" /> </target> @@ -115,7 +115,7 @@ <cmp:cpiofileset src="../resources/asf-logo.gif.cpio" includes="asf-logo.gif"/> </cmp:zip> - <checkProperties dateTime="2009-07-31-20:11:12 +0200" mode="644" + <checkProperties dateTime="2009-07-31-20:11:14 +0200" mode="644" /> </target> @@ -201,7 +201,7 @@ filemode="600" includes="asf-logo.gif"/> </cmp:zip> - <checkProperties dateTime="2009-07-31-20:11:12 +0200" mode="600"/> + <checkProperties dateTime="2009-07-31-20:11:14 +0200" mode="600"/> </target> <target name="testFullpath" depends="setUp"> @@ -298,7 +298,7 @@ <cmp:arfileset src="${src}" includes="asf-logo.gif"/> </cmp:zip> - <checkProperties dateTime="2009-07-31-20:11:12 +0200" mode="644"/> + <checkProperties dateTime="2009-07-31-20:11:14 +0200" mode="644"/> </target> <target name="testPreserve0Permissions" @@ -307,6 +307,16 @@ <cmp:arfileset src="${src}" includes="asf-logo.gif"/> </cmp:zip> - <checkProperties dateTime="2009-07-31-20:11:12 +0200" mode="0"/> + <checkProperties dateTime="2009-07-31-20:11:14 +0200" mode="0"/> + </target> + + <target name="testRoundDown" depends="setUp"> + <cmp:zip destfile="${dest}" roundup="false"> + <cmp:arfileset src="../resources/asf-logo.gif.ar" + includes="asf-logo.gif"/> + </cmp:zip> + <checkProperties dateTime="2009-07-31-20:11:12 +0200" mode="644" + /> </target> + </project>