Author: bodewig
Date: Fri Sep 11 10:36:36 2009
New Revision: 813767

URL: http://svn.apache.org/viewvc?rev=813767&view=rev
Log:
Add up-to-date-ness check to archiving tasks and a way to prevent it with new 
force-create mode

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/ar-test.xml
    ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml
    ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-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=813767&r1=813766&r2=813767&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
 Fri Sep 11 10:36:36 2009
@@ -19,10 +19,12 @@
 package org.apache.ant.compress.taskdefs;
 
 import org.apache.ant.compress.util.ArStreamFactory;
+import org.apache.ant.compress.resources.ArFileSet;
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ar.ArArchiveEntry;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.ArchiveFileSet;
+import org.apache.tools.ant.types.Resource;
 
 /**
  * Creates ar archives.
@@ -34,7 +36,7 @@
 
     public Ar() {
         setFactory(new ArStreamFactory());
-        setBuilder(
+        setEntryBuilder(
               new ArchiveBase.EntryBuilder() {
                 public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags 
r) {
                     boolean isDir = r.getResource().isDirectory();
@@ -75,6 +77,13 @@
                                               / 1000);
                 }
             });
+        setFileSetBuilder(new ArchiveBase.FileSetBuilder() {
+                public ArchiveFileSet buildFileSet(Resource dest) {
+                    ArchiveFileSet afs = new ArFileSet();
+                    afs.setSrcResource(dest);
+                    return afs;
+                }
+            });
     }
 
     public void setFilesOnly(boolean b) {

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=813767&r1=813766&r2=813767&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
 Fri Sep 11 10:36:36 2009
@@ -58,8 +58,12 @@
 import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.types.resources.ArchiveResource;
 import org.apache.tools.ant.types.resources.FileResource;
+import org.apache.tools.ant.types.resources.MappedResource;
 import org.apache.tools.ant.types.resources.Resources;
 import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.IdentityMapper;
+import org.apache.tools.ant.util.MergingMapper;
+import org.apache.tools.ant.util.ResourceUtils;
 import org.apache.tools.zip.UnixStat;
 
 /**
@@ -67,7 +71,8 @@
  */
 public abstract class ArchiveBase extends Task {
     private ArchiveStreamFactory factory;
-    private EntryBuilder builder;
+    private FileSetBuilder fileSetBuilder;
+    private EntryBuilder entryBuilder;
 
     private Resource dest;
     private List/*<ResourceCollection>*/ sources = new ArrayList();
@@ -88,8 +93,12 @@
         this.factory = factory;
     }
 
-    protected final void setBuilder(EntryBuilder builder) {
-        this.builder = builder;
+    protected final void setEntryBuilder(EntryBuilder builder) {
+        this.entryBuilder = builder;
+    }
+
+    protected final void setFileSetBuilder(FileSetBuilder builder) {
+        this.fileSetBuilder = builder;
     }
 
     /**
@@ -213,8 +222,9 @@
     public void execute() {
         validate();
         if (!dest.isExists()) {
-            // create mode
+            // force create mode
             mode = new Mode();
+            mode.setValue(Mode.FORCE_CREATE);
         }
         ResourceWithFlags[] toAdd;
         try {
@@ -230,6 +240,16 @@
             }
         } else {
             try {
+                if (!Mode.FORCE_CREATE.equals(mode.getValue())
+                    && !Mode.FORCE_REPLACE.equals(mode.getValue())
+                    && isUpToDate(toAdd)) {
+                    log(dest + " is up-to-date, nothing to do.");
+                    return;
+                }
+            } catch (IOException ioex) {
+                throw new BuildException("Failed to read target archive", 
ioex);
+            }
+            try {
                 writeArchive(toAdd);
             } catch (IOException ioex) {
                 throw new BuildException("Failed to write archive", ioex);
@@ -245,8 +265,12 @@
             throw new BuildException("subclass didn't provide a factory"
                                      + " instance");
         }
-        if (builder == null) {
-            throw new BuildException("subclass didn't provide a builder"
+        if (entryBuilder == null) {
+            throw new BuildException("subclass didn't provide an entryBuilder"
+                                     + " instance");
+        }
+        if (fileSetBuilder == null) {
+            throw new BuildException("subclass didn't provide an 
fileSetBuilder"
                                      + " instance");
         }
         if (dest == null) {
@@ -293,6 +317,29 @@
     }
 
     /**
+     * Checks whether the target is more recent than the resources
+     * that shall be added to it.
+     *
+     * <p>Will only ever be invoked if the target exists.</p>
+     *
+     * @return true if the target is up-to-date
+     */
+    protected boolean isUpToDate(ResourceWithFlags[] src) throws IOException {
+        final Resource[] srcResources = new Resource[src.length];
+        for (int i = 0; i < srcResources.length; i++) {
+            srcResources[i] =
+                new MappedResource(src[i].getResource(),
+                                   new MergingMapper(src[i].getName()));
+        }
+        return ResourceUtils
+            .selectOutOfDateSources(this, srcResources,
+                                    new IdentityMapper(),
+                                    fileSetBuilder.buildFileSet(dest)
+                                    .getDirectoryScanner(getProject()))
+            .length == 0;
+    }
+
+    /**
      * Creates the archive archiving the given resources.
      */
     protected void writeArchive(ResourceWithFlags[] src)
@@ -312,7 +359,7 @@
                     ensureParentDirs(out, src[i], addedDirectories);
                 }
 
-                ArchiveEntry ent = builder.buildEntry(src[i]);
+                ArchiveEntry ent = entryBuilder.buildEntry(src[i]);
                 out.putArchiveEntry(ent);
                 if (!src[i].getResource().isDirectory()) {
                     InputStream in = null;
@@ -359,7 +406,7 @@
                     new ResourceWithFlags(currentParent,
                                           dir, r.getCollectionFlags(),
                                           new ResourceFlags());
-                ArchiveEntry ent = builder.buildEntry(artifical);
+                ArchiveEntry ent = entryBuilder.buildEntry(artifical);
                 out.putArchiveEntry(ent);
                 out.closeArchiveEntry();
             }
@@ -584,6 +631,11 @@
          */
         private static final String CREATE = "create";
         /**
+         * Create a new archive even if the target exists and seems
+         * up-to-date.
+         */
+        private static final String FORCE_CREATE = "force-create";
+        /**
          * Update an existing archive.
          */
         private static final String UPDATE = "update";
@@ -592,6 +644,12 @@
          * with those from sources.
          */
         private static final String REPLACE = "replace";
+        /**
+         * Update an existing archive - replacing all existing entries
+         * with those from sources - even if the target exists and
+         * seems up-to-date.
+         */
+        private static final String FORCE_REPLACE = "force-replace";
 
         public Mode() {
             super();
@@ -599,7 +657,8 @@
         }
 
         public String[] getValues() {
-            return new String[] {CREATE, UPDATE, REPLACE};
+            return new String[] {CREATE, UPDATE, REPLACE,
+                                 FORCE_CREATE, FORCE_REPLACE};
         }
 
     }
@@ -842,4 +901,11 @@
     public static interface EntryBuilder {
         ArchiveEntry buildEntry(ResourceWithFlags resource);
     }
+
+    /**
+     * Creates an archive fileset to read the target archive.
+     */
+    public static interface FileSetBuilder {
+        ArchiveFileSet buildFileSet(Resource dest);
+    }
 }

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=813767&r1=813766&r2=813767&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
 Fri Sep 11 10:36:36 2009
@@ -19,9 +19,11 @@
 package org.apache.ant.compress.taskdefs;
 
 import org.apache.ant.compress.util.CpioStreamFactory;
+import org.apache.ant.compress.resources.CpioFileSet;
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.cpio.CpioArchiveEntry;
 import org.apache.tools.ant.types.ArchiveFileSet;
+import org.apache.tools.ant.types.Resource;
 
 /**
  * Creates cpio archives.
@@ -29,7 +31,7 @@
 public class Cpio extends ArchiveBase {
     public Cpio() {
         setFactory(new CpioStreamFactory());
-        setBuilder(
+        setEntryBuilder(
               new ArchiveBase.EntryBuilder() {
                 public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags 
r) {
                     boolean isDir = r.getResource().isDirectory();
@@ -69,6 +71,13 @@
                     return ent;
                 }
             });
+        setFileSetBuilder(new ArchiveBase.FileSetBuilder() {
+                public ArchiveFileSet buildFileSet(Resource dest) {
+                    ArchiveFileSet afs = new CpioFileSet();
+                    afs.setSrcResource(dest);
+                    return afs;
+                }
+            });
     }
 
 }
\ No newline at end of file

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=813767&r1=813766&r2=813767&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
 Fri Sep 11 10:36:36 2009
@@ -19,10 +19,12 @@
 package org.apache.ant.compress.taskdefs;
 
 import org.apache.ant.compress.util.TarStreamFactory;
+import org.apache.ant.compress.resources.TarFileSet;
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
 import org.apache.commons.compress.archivers.tar.TarConstants;
 import org.apache.tools.ant.types.ArchiveFileSet;
+import org.apache.tools.ant.types.Resource;
 
 /**
  * Creates tar archives.
@@ -30,7 +32,7 @@
 public class Tar extends ArchiveBase {
     public Tar() {
         setFactory(new TarStreamFactory());
-        setBuilder(
+        setEntryBuilder(
               new ArchiveBase.EntryBuilder() {
                 public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags 
r) {
                     boolean isDir = r.getResource().isDirectory();
@@ -82,6 +84,13 @@
                     return ent;
                 }
             });
+        setFileSetBuilder(new ArchiveBase.FileSetBuilder() {
+                public ArchiveFileSet buildFileSet(Resource dest) {
+                    ArchiveFileSet afs = new TarFileSet();
+                    afs.setSrcResource(dest);
+                    return afs;
+                }
+            });
     }
 
 }
\ No newline at end of file

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=813767&r1=813766&r2=813767&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
 Fri Sep 11 10:36:36 2009
@@ -25,12 +25,14 @@
 import java.util.zip.Deflater;
 
 import org.apache.ant.compress.util.ZipStreamFactory;
+import org.apache.ant.compress.resources.ZipFileSet;
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ArchiveOutputStream;
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
 import org.apache.tools.ant.types.ArchiveFileSet;
 import org.apache.tools.ant.types.EnumeratedAttribute;
+import org.apache.tools.ant.types.Resource;
 
 /**
  * Creates zip archives.
@@ -47,7 +49,7 @@
         setFactory(new ZipStreamFactory() {
                 public ArchiveOutputStream getArchiveStream(OutputStream 
stream,
                                                             String encoding)
-        throws IOException {
+                    throws IOException {
                     ZipArchiveOutputStream o =
                         (ZipArchiveOutputStream) super.getArchiveStream(stream,
                                                                         
encoding);
@@ -60,7 +62,7 @@
                     return o;
                 }
             });
-        setBuilder(
+        setEntryBuilder(
               new ArchiveBase.EntryBuilder() {
                 public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags 
r) {
                     boolean isDir = r.getResource().isDirectory();
@@ -95,6 +97,13 @@
                     return ent;
                 }
             });
+        setFileSetBuilder(new ArchiveBase.FileSetBuilder() {
+                public ArchiveFileSet buildFileSet(Resource dest) {
+                    ArchiveFileSet afs = new ZipFileSet();
+                    afs.setSrcResource(dest);
+                    return afs;
+                }
+            });
     }
 
     /**

Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml?rev=813767&r1=813766&r2=813767&view=diff
==============================================================================
--- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml (original)
+++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml Fri Sep 11 
10:36:36 2009
@@ -389,4 +389,52 @@
                          actual="${output}/ar-test.xml"/>
   </target>
 
+  <target name="-prepareArchive" depends="setUp">
+    <mkdir dir="${input}"/>
+    <copy todir="${input}">
+      <file file="ar-test.xml"/>
+    </copy>
+    <cmp:ar dest="${dest}">
+      <fileset dir="${input}"/>
+    </cmp:ar>
+    <copy todir="${output}">
+      <file file="${dest}"/>
+      <globmapper from="*" to="*.bak"/>
+    </copy>
+    <sleep seconds="2"/>
+    <touch file="${dest}.bak"/>
+    <sleep seconds="2"/>
+  </target>
+
+  <target name="testCreateOfUpToDate" depends="-prepareArchive">
+    <cmp:ar dest="${dest}" mode="create">
+      <fileset dir="${input}"/>
+    </cmp:ar>
+    <au:assertLogContains
+       text="test.ar is up-to-date, nothing to do."/>
+    <au:assertDestIsUptodate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
+  <target name="testForceCreateOfUpToDate" depends="-prepareArchive">
+    <cmp:ar dest="${dest}" mode="force-create">
+      <fileset dir="${input}"/>
+    </cmp:ar>
+    <au:assertLogDoesntContain
+       text="test.ar is up-to-date, nothing to do."/>
+    <au:assertDestIsOutofdate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
+  <target name="testCreateOfOutOfDate" depends="-prepareArchive">
+    <touch file="${input}/ar-test.xml"/>
+    <cmp:ar dest="${dest}" mode="create">
+      <fileset dir="${input}"/>
+    </cmp:ar>
+    <au:assertLogDoesntContain
+       text="test.ar is up-to-date, nothing to do."/>
+    <au:assertDestIsOutofdate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
 </project>

Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml?rev=813767&r1=813766&r2=813767&view=diff
==============================================================================
--- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml 
(original)
+++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml Fri Sep 
11 10:36:36 2009
@@ -422,4 +422,51 @@
                          actual="${output}/ar-test.xml"/>
   </target>
 
+  <target name="-prepareArchive" depends="setUp">
+    <mkdir dir="${input}"/>
+    <copy todir="${input}">
+      <file file="ar-test.xml"/>
+    </copy>
+    <cmp:cpio dest="${dest}">
+      <fileset dir="${input}"/>
+    </cmp:cpio>
+    <copy todir="${output}">
+      <file file="${dest}"/>
+      <globmapper from="*" to="*.bak"/>
+    </copy>
+    <sleep seconds="2"/>
+    <touch file="${dest}.bak"/>
+    <sleep seconds="2"/>
+  </target>
+
+  <target name="testCreateOfUpToDate" depends="-prepareArchive">
+    <cmp:cpio dest="${dest}" mode="create">
+      <fileset dir="${input}"/>
+    </cmp:cpio>
+    <au:assertLogContains
+       text="test.cpio is up-to-date, nothing to do."/>
+    <au:assertDestIsUptodate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
+  <target name="testForceCreateOfUpToDate" depends="-prepareArchive">
+    <cmp:cpio dest="${dest}" mode="force-create">
+      <fileset dir="${input}"/>
+    </cmp:cpio>
+    <au:assertLogDoesntContain
+       text="test.cpio is up-to-date, nothing to do."/>
+    <au:assertDestIsOutofdate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
+  <target name="testCreateOfOutOfDate" depends="-prepareArchive">
+    <touch file="${input}/ar-test.xml"/>
+    <cmp:cpio dest="${dest}" mode="create">
+      <fileset dir="${input}"/>
+    </cmp:cpio>
+    <au:assertLogDoesntContain
+       text="test.cpio is up-to-date, nothing to do."/>
+    <au:assertDestIsOutofdate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
 </project>

Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml?rev=813767&r1=813766&r2=813767&view=diff
==============================================================================
--- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml (original)
+++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml Fri Sep 
11 10:36:36 2009
@@ -438,4 +438,52 @@
     <au:assertFilesMatch expected="ar-test.xml"
                          actual="${output}/ar-test.xml"/>
   </target>
+
+  <target name="-prepareArchive" depends="setUp">
+    <mkdir dir="${input}"/>
+    <copy todir="${input}">
+      <file file="ar-test.xml"/>
+    </copy>
+    <cmp:tar dest="${dest}">
+      <fileset dir="${input}"/>
+    </cmp:tar>
+    <copy todir="${output}">
+      <file file="${dest}"/>
+      <globmapper from="*" to="*.bak"/>
+    </copy>
+    <sleep seconds="2"/>
+    <touch file="${dest}.bak"/>
+    <sleep seconds="2"/>
+  </target>
+
+  <target name="testCreateOfUpToDate" depends="-prepareArchive">
+    <cmp:tar dest="${dest}" mode="create">
+      <fileset dir="${input}"/>
+    </cmp:tar>
+    <au:assertLogContains
+       text="test.tar is up-to-date, nothing to do."/>
+    <au:assertDestIsUptodate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
+  <target name="testForceCreateOfUpToDate" depends="-prepareArchive">
+    <cmp:tar dest="${dest}" mode="force-create">
+      <fileset dir="${input}"/>
+    </cmp:tar>
+    <au:assertLogDoesntContain
+       text="test.tar is up-to-date, nothing to do."/>
+    <au:assertDestIsOutofdate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
+  <target name="testCreateOfOutOfDate" depends="-prepareArchive">
+    <touch file="${input}/ar-test.xml"/>
+    <cmp:tar dest="${dest}" mode="create">
+      <fileset dir="${input}"/>
+    </cmp:tar>
+    <au:assertLogDoesntContain
+       text="test.tar is up-to-date, nothing to do."/>
+    <au:assertDestIsOutofdate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
 </project>

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=813767&r1=813766&r2=813767&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 Fri Sep 
11 10:36:36 2009
@@ -446,4 +446,52 @@
     <au:assertFilesMatch expected="ar-test.xml"
                          actual="${output}/ar-test.xml"/>
   </target>
+
+  <target name="-prepareArchive" depends="setUp">
+    <mkdir dir="${input}"/>
+    <copy todir="${input}">
+      <file file="ar-test.xml"/>
+    </copy>
+    <cmp:zip dest="${dest}">
+      <fileset dir="${input}"/>
+    </cmp:zip>
+    <copy todir="${output}">
+      <file file="${dest}"/>
+      <globmapper from="*" to="*.bak"/>
+    </copy>
+    <sleep seconds="2"/>
+    <touch file="${dest}.bak"/>
+    <sleep seconds="2"/>
+  </target>
+
+  <target name="testCreateOfUpToDate" depends="-prepareArchive">
+    <cmp:zip dest="${dest}" mode="create">
+      <fileset dir="${input}"/>
+    </cmp:zip>
+    <au:assertLogContains
+       text="test.zip is up-to-date, nothing to do."/>
+    <au:assertDestIsUptodate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
+  <target name="testForceCreateOfUpToDate" depends="-prepareArchive">
+    <cmp:zip dest="${dest}" mode="force-create">
+      <fileset dir="${input}"/>
+    </cmp:zip>
+    <au:assertLogDoesntContain
+       text="test.zip is up-to-date, nothing to do."/>
+    <au:assertDestIsOutofdate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
+
+  <target name="testCreateOfOutOfDate" depends="-prepareArchive">
+    <touch file="${input}/ar-test.xml"/>
+    <cmp:zip dest="${dest}" mode="create">
+      <fileset dir="${input}"/>
+    </cmp:zip>
+    <au:assertLogDoesntContain
+       text="test.zip is up-to-date, nothing to do."/>
+    <au:assertDestIsOutofdate
+       src="${dest}" dest="${dest}.bak"/>
+  </target>
 </project>


Reply via email to