write 7z archives
git-svn-id: https://svn.apache.org/repos/asf/ant/antlibs/compress/trunk@1527275 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/changes.xml b/changes.xml
index 8d14d51..56731ac 100644
--- a/changes.xml
+++ b/changes.xml
@@ -57,7 +57,9 @@
added.
</action>
<action type="add">
- Read-only support for file based 7z archives has been added.
+ Support for file based 7z archives has been added - most
+ compression algorithms used in 7z archives can be read but
+ only uncompressed archives can be written.
</action>
</release>
diff --git a/docs/archive.html b/docs/archive.html
index 0fe67de..e14e69c 100644
--- a/docs/archive.html
+++ b/docs/archive.html
@@ -273,6 +273,14 @@
</tr>
</table>
+ <h3><a name="sevenz">SevenZ</a></h3>
+
+ <p><em>Since Compress Antlib 1.3</em></p>
+
+ <p>An <a href="#archive">archiving task</a> creating archives of the
+ 7z format. As of Commons Compress 1.6 this task only supports
+ writing uncompressed archives.</p>
+
<h3><a name="tar">Tar</a></h3>
<p>An <a href="#archive">archiving task</a> creating archives of the
diff --git a/docs/index.html b/docs/index.html
index d5a7612..2cf3f0c 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -53,6 +53,7 @@
<li><a href="pack.html#gzip">gzip</a></li>
<li><a href="pack.html#pack200">pack200</a></li>
<li><a href="pack200normalize.html">pack200normalize</a></li>
+ <li><a href="archive.html#sevenz">sevenz</a></li>
<li><a href="archive.html#tar">tar</a></li>
<li><a href="expand.html#un7z">un7z</a></li>
<li><a href="expand.html#unar">unar</a></li>
diff --git a/src/main/org/apache/ant/compress/antlib.xml b/src/main/org/apache/ant/compress/antlib.xml
index 90e20c4..ff3f14f 100644
--- a/src/main/org/apache/ant/compress/antlib.xml
+++ b/src/main/org/apache/ant/compress/antlib.xml
@@ -97,6 +97,10 @@
classname="org.apache.ant.compress.taskdefs.Pack200Normalize"
/>
<taskdef
+ name="sevenz"
+ classname="org.apache.ant.compress.taskdefs.SevenZ"
+ />
+ <taskdef
name="xz"
classname="org.apache.ant.compress.taskdefs.XZ"
/>
diff --git a/src/main/org/apache/ant/compress/resources/SevenZResource.java b/src/main/org/apache/ant/compress/resources/SevenZResource.java
index c5b6f08..9bd1bdd 100644
--- a/src/main/org/apache/ant/compress/resources/SevenZResource.java
+++ b/src/main/org/apache/ant/compress/resources/SevenZResource.java
@@ -162,6 +162,7 @@
}
ze = z.getNextEntry();
}
+ setEntry(null);
} catch (IOException e) {
log(e.getMessage(), Project.MSG_DEBUG);
throw new BuildException(e);
diff --git a/src/main/org/apache/ant/compress/taskdefs/SevenZ.java b/src/main/org/apache/ant/compress/taskdefs/SevenZ.java
new file mode 100644
index 0000000..1324b72
--- /dev/null
+++ b/src/main/org/apache/ant/compress/taskdefs/SevenZ.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.ant.compress.taskdefs;
+
+import java.util.Date;
+
+import org.apache.ant.compress.resources.SevenZFileSet;
+import org.apache.ant.compress.util.SevenZStreamFactory;
+import org.apache.commons.compress.archivers.ArchiveEntry;
+import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
+import org.apache.tools.ant.types.ArchiveFileSet;
+import org.apache.tools.ant.types.Resource;
+
+/**
+ * Creates 7z archives.
+ */
+public class SevenZ extends ArchiveBase {
+
+ public SevenZ() {
+ setFactory(new SevenZStreamFactory());
+ setEntryBuilder(
+ new ArchiveBase.EntryBuilder() {
+ public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags r) {
+ SevenZArchiveEntry entry = new SevenZArchiveEntry();
+ entry.setName(r.getName());
+ entry.setDirectory(r.getResource().isDirectory());
+ entry.setLastModifiedDate(new Date(r.getResource()
+ .getLastModified()));
+ entry.setSize(r.getResource().getSize());
+ return entry;
+ }
+ });
+ setFileSetBuilder(new ArchiveBase.FileSetBuilder() {
+ public ArchiveFileSet buildFileSet(Resource dest) {
+ ArchiveFileSet afs = new SevenZFileSet();
+ afs.setSrcResource(dest);
+ return afs;
+ }
+ });
+ }
+
+}
diff --git a/src/main/org/apache/ant/compress/util/SevenZStreamFactory.java b/src/main/org/apache/ant/compress/util/SevenZStreamFactory.java
index 33af609..327f92c 100644
--- a/src/main/org/apache/ant/compress/util/SevenZStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/SevenZStreamFactory.java
@@ -26,6 +26,7 @@
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
+import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
/**
@@ -70,7 +71,7 @@
public ArchiveOutputStream getArchiveOutputStream(File file,
String encoding)
throws IOException {
- throw new UnsupportedOperationException();
+ return new SevenZArchiveOutputStream(file);
}
/**
@@ -98,4 +99,43 @@
}
}
+ /**
+ * Not really a stream but provides an ArchiveOutputStream
+ * compatible interface over SevenZOutputFile.
+ */
+ private static class SevenZArchiveOutputStream extends ArchiveOutputStream {
+
+ private final SevenZOutputFile zipFile;
+
+ public SevenZArchiveOutputStream(File file) throws IOException {
+ zipFile = new SevenZOutputFile(file);
+ }
+
+ public void close() {
+ zipFile.close();
+ }
+
+ public void putArchiveEntry(ArchiveEntry entry) throws IOException {
+ zipFile.putArchiveEntry(entry);
+ }
+
+ public void closeArchiveEntry() throws IOException {
+ zipFile.closeArchiveEntry();
+ }
+
+ public void finish() throws IOException {
+ zipFile.finish();
+ }
+
+ public ArchiveEntry createArchiveEntry(File inputFile, String entryName)
+ throws IOException {
+ return zipFile.createArchiveEntry(inputFile, entryName);
+ }
+
+ public void write(byte[] b,int off, int len) throws IOException {
+ zipFile.write(b, off, len);
+ }
+
+ }
+
}
diff --git a/src/tests/antunit/sevenz-test.xml b/src/tests/antunit/sevenz-test.xml
new file mode 100644
index 0000000..2195d49
--- /dev/null
+++ b/src/tests/antunit/sevenz-test.xml
@@ -0,0 +1,435 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project default="antunit"
+ xmlns:au="antlib:org.apache.ant.antunit"
+ xmlns:cond="antlib:org.apache.tools.ant.types.conditions"
+ xmlns:cmp="antlib:org.apache.ant.compress">
+
+ <import file="antunit-base.xml" />
+
+ <target name="setUp">
+ <mkdir dir="${output}"/>
+ <mkdir dir="${input}/subdir"/>
+ <copy todir="${input}/subdir" file="../resources/asf-logo.gif"/>
+ <property name="dest" location="${output}/test.7z"/>
+ <macrodef name="checkProperties">
+ <attribute name="pattern" default="yyyy-MM-dd-HH:mm:ss Z"/>
+ <attribute name="dateTime"/>
+ <sequential>
+ <au:assertTrue>
+ <cond:islastmodified datetime="@{dateTime}"
+ pattern="@{pattern}">
+ <cmp:sevenzentry name="asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </cond:islastmodified>
+ </au:assertTrue>
+ </sequential>
+ </macrodef>
+ </target>
+
+ <target name="testPlainFileSet" depends="setUp">
+ <mkdir dir="${input}"/>
+ <copy todir="${input}" file="../resources/asf-logo.gif"/>
+ <touch datetime="2009-08-19-05:49:21 +0200"
+ pattern="yyyy-MM-dd-HH:mm:ss Z"
+ file="${input}/asf-logo.gif"/>
+ <cmp:sevenz destfile="${dest}">
+ <fileset dir="${input}" includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <checkProperties dateTime="2009-08-19-05:49:21 +0200"/>
+ </target>
+
+ <target name="testCoreZipFileSet" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <zipfileset src="../resources/asf-logo.gif.zip"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <checkProperties dateTime="2001-11-19-15:34:20"
+ pattern="yyyy-MM-dd-HH:mm:ss"
+ />
+ </target>
+
+ <target name="testAntlibZipFileSet" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <cmp:zipfileset src="../resources/asf-logo.gif.zip"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <checkProperties dateTime="2001-11-19-15:34:20"
+ pattern="yyyy-MM-dd-HH:mm:ss"
+ />
+ </target>
+
+ <target name="testSevenzFileSet" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <cmp:sevenzfileset src="../resources/asf-logo.gif.7z"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <checkProperties dateTime="2013-09-27-20:54:32 +0200"/>
+ </target>
+
+ <target name="testNoDirectoriesByDefault" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <fileset dir="${input}"/>
+ <dirset dir="${input}"/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="subdir/asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="subdir/">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testWithDirectories" depends="setUp">
+ <cmp:sevenz destfile="${dest}" filesonly="false">
+ <dirset dir="${input}" excludes="."/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="subdir/">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ </target>
+
+ <target name="testWithImplicitDirectories" depends="setUp">
+ <cmp:sevenz destfile="${dest}" filesonly="false">
+ <fileset dir="${input}"/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="subdir/">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <assertResourceExists>
+ <cmp:sevenzentry name="subdir/asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ </target>
+
+ <target name="testFullpath" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"
+ fullpath="logo.gif"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testPrefixWithSlash" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"
+ prefix="x/"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="x/asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testPrefixWithBackslash" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"
+ prefix="x\"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="x/asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testPrefixWithoutSlash" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"
+ prefix="x"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="x/asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="asf-logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testRemoveLeadingSlashes" depends="setUp">
+ <cmp:sevenz destfile="${dest}">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"
+ fullpath="/logo.gif"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="/logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testPreserveLeadingSlashes" depends="setUp">
+ <cmp:sevenz destfile="${dest}" preserveleadingslashes="true">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"
+ fullpath="/logo.gif"
+ includes="asf-logo.gif"/>
+ </cmp:sevenz>
+ <assertResourceExists>
+ <cmp:sevenzentry name="/logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="logo.gif">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testAddDuplicates" depends="setUp">
+ <cmp:sevenz destfile="${dest}" duplicate="add">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"/>
+ <cmp:zipfileset src="../resources/asf-logo.gif.zip"/>
+ </cmp:sevenz>
+ <au:assertLogContains text="duplicate entry asf-logo.gif found, adding."
+ level="verbose"/>
+ </target>
+
+ <target name="testPreserveDuplicates" depends="setUp">
+ <cmp:sevenz destfile="${dest}" duplicate="preserve">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"/>
+ <cmp:zipfileset src="../resources/asf-logo.gif.zip"/>
+ </cmp:sevenz>
+ <au:assertLogContains text="asf-logo.gif already added, skipping."
+ level="verbose"/>
+ </target>
+
+ <target name="testFailDuplicates" depends="setUp">
+ <au:expectfailure
+ message="Duplicate entry asf-logo.gif was found and the duplicate attribute is 'fail'.">
+ <cmp:sevenz destfile="${dest}">
+ <cmp:arfileset src="../resources/asf-logo.gif.ar"/>
+ <cmp:zipfileset src="../resources/asf-logo.gif.zip"/>
+ </cmp:sevenz>
+ </au:expectfailure>
+ </target>
+
+ <target name="testFailEmpty" depends="setUp">
+ <au:expectfailure
+ message="No sources, nothing to do.">
+ <cmp:sevenz destfile="${dest}">
+ <fileset dir="." includes="not-there"/>
+ </cmp:sevenz>
+ </au:expectfailure>
+ </target>
+
+ <target name="testSkipEmpty" depends="setUp">
+ <cmp:sevenz destfile="${dest}" whenEmpty="skip">
+ <fileset dir="." includes="not-there"/>
+ </cmp:sevenz>
+ <au:assertLogContains text="No sources, nothing to do."
+ level="warn"/>
+ <au:assertFileDoesntExist file="${dest}"/>
+ </target>
+
+ <target name="-prepareArchiveForModeTests" depends="setUp">
+ <mkdir dir="${input}"/>
+ <copy todir="${input}">
+ <fileset dir="." includes="*r-test.xml,zip-test.xml"/>
+ </copy>
+ <cmp:sevenz dest="${dest}">
+ <fileset dir="${input}"/>
+ </cmp:sevenz>
+ <copy tofile="${dest}.bak" file="${dest}"/>
+ <property name="timestamp" value="2000-01-01-00:00:00 +0000"/>
+ <touch datetime="${timestamp}" file="${input}/zip-test.xml"
+ pattern="yyyy-MM-dd-HH:mm:ss Z"/>
+ <sleep seconds="2"/>
+ <touch file="${dest}.bak"/>
+ <sleep seconds="2"/>
+ </target>
+
+ <target name="testCreateOfUpToDate" depends="-prepareArchiveForModeTests">
+ <cmp:sevenz dest="${dest}" mode="create">
+ <fileset dir="${input}" includes="ar-test.xml,zip-test.xml"/>
+ </cmp:sevenz>
+ <au:assertLogContains
+ text="test.7z is up-to-date, nothing to do."/>
+ <au:assertDestIsUptodate
+ src="${dest}" dest="${dest}.bak"/>
+ </target>
+
+ <target name="testForceCreateOfUpToDate"
+ depends="-prepareArchiveForModeTests">
+ <cmp:sevenz dest="${dest}" mode="force-create">
+ <fileset dir="${input}" includes="ar-test.xml,zip-test.xml"/>
+ </cmp:sevenz>
+ <au:assertLogDoesntContain
+ text="test.7z is up-to-date, nothing to do."/>
+ <au:assertDestIsOutofdate
+ src="${dest}" dest="${dest}.bak"/>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="tar-test.xml">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testCreateOfOutOfDate" depends="-prepareArchiveForModeTests">
+ <touch file="${input}/ar-test.xml"/>
+ <cmp:sevenz dest="${dest}" mode="create">
+ <fileset dir="${input}" includes="ar-test.xml,zip-test.xml"/>
+ </cmp:sevenz>
+ <au:assertLogDoesntContain
+ text="test.7z is up-to-date, nothing to do."/>
+ <au:assertDestIsOutofdate
+ src="${dest}" dest="${dest}.bak"/>
+ <assertResourceDoesntExist>
+ <cmp:sevenzentry name="tar-test.xml">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceDoesntExist>
+ </target>
+
+ <target name="testReplaceOfUpToDate" depends="-prepareArchiveForModeTests">
+ <cmp:sevenz dest="${dest}" mode="replace">
+ <fileset dir="${input}" includes="ar-test.xml,zip-test.xml"/>
+ </cmp:sevenz>
+ <au:assertLogContains
+ text="test.7z is up-to-date, nothing to do."/>
+ <au:assertDestIsUptodate
+ src="${dest}" dest="${dest}.bak"/>
+ </target>
+
+ <target name="testForceReplaceOfUpToDate"
+ depends="-prepareArchiveForModeTests">
+ <cmp:sevenz dest="${dest}" mode="force-replace">
+ <fileset dir="${input}" includes="ar-test.xml,zip-test.xml"/>
+ </cmp:sevenz>
+ <au:assertLogDoesntContain
+ text="test.7z is up-to-date, nothing to do."/>
+ <au:assertDestIsOutofdate
+ src="${dest}" dest="${dest}.bak"/>
+ <assertResourceExists>
+ <cmp:sevenzentry name="tar-test.xml">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <au:assertTrue>
+ <cond:islastmodified datetime="${timestamp}"
+ pattern="yyyy-MM-dd-HH:mm:ss Z">
+ <cmp:sevenzentry name="zip-test.xml">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </cond:islastmodified>
+ </au:assertTrue>
+ </target>
+
+ <target name="testReplaceOfOutOfDate" depends="-prepareArchiveForModeTests">
+ <touch file="${input}/ar-test.xml"/>
+ <cmp:sevenz dest="${dest}" mode="replace">
+ <fileset dir="${input}" includes="ar-test.xml,zip-test.xml"/>
+ </cmp:sevenz>
+ <au:assertLogDoesntContain
+ text="test.7z is up-to-date, nothing to do."/>
+ <au:assertDestIsOutofdate
+ src="${dest}" dest="${dest}.bak"/>
+ <assertResourceExists>
+ <cmp:sevenzentry name="tar-test.xml">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <au:assertTrue>
+ <cond:islastmodified datetime="${timestamp}"
+ pattern="yyyy-MM-dd-HH:mm:ss Z">
+ <cmp:sevenzentry name="zip-test.xml">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </cond:islastmodified>
+ </au:assertTrue>
+ </target>
+
+ <target name="testUpdateOfUpToDate" depends="-prepareArchiveForModeTests">
+ <cmp:sevenz dest="${dest}" mode="update">
+ <fileset dir="${input}" includes="ar-test.xml,zip-test.xml"/>
+ </cmp:sevenz>
+ <au:assertLogContains
+ text="test.7z is up-to-date, nothing to do."/>
+ <au:assertDestIsUptodate
+ src="${dest}" dest="${dest}.bak"/>
+ </target>
+
+ <target name="testUpdateOfOutOfDate" depends="-prepareArchiveForModeTests">
+ <touch file="${input}/ar-test.xml"/>
+ <cmp:sevenz dest="${dest}" mode="update">
+ <fileset dir="${input}" includes="ar-test.xml,zip-test.xml"/>
+ </cmp:sevenz>
+ <au:assertLogDoesntContain
+ text="test.7z is up-to-date, nothing to do."/>
+ <au:assertDestIsOutofdate
+ src="${dest}" dest="${dest}.bak"/>
+ <assertResourceExists>
+ <cmp:sevenzentry name="tar-test.xml">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </assertResourceExists>
+ <au:assertFalse>
+ <cond:islastmodified datetime="${timestamp}"
+ pattern="yyyy-MM-dd-HH:mm:ss Z">
+ <cmp:sevenzentry name="zip-test.xml">
+ <file file="${dest}"/>
+ </cmp:sevenzentry>
+ </cond:islastmodified>
+ </au:assertFalse>
+ </target>
+
+</project>
diff --git a/src/tests/antunit/un7z-test.xml b/src/tests/antunit/un7z-test.xml
index 739d041..2ea0dea 100644
--- a/src/tests/antunit/un7z-test.xml
+++ b/src/tests/antunit/un7z-test.xml
@@ -26,11 +26,10 @@
<mkdir dir="${input}"/>
</target>
- <!--
<target name="testAgainstAntlib7zTask" depends="setUp">
- <cmp:7z destfile="${input}/test.7z">
+ <cmp:sevenz destfile="${input}/test.7z">
<fileset dir="." includes="un7z-test.xml"/>
- </cmp:7z>
+ </cmp:sevenz>
<cmp:un7z src="${input}/test.7z" dest="${output}"/>
<au:assertFileExists file="${output}/un7z-test.xml"/>
<au:assertFilesMatch
@@ -38,7 +37,6 @@
expected="un7z-test.xml"
/>
</target>
- -->
<target name="testAgainstNative7z" depends="setUp">
<cmp:un7z src="../resources/asf-logo.gif.7z" dest="${output}" />