add support for the raw snappy format
git-svn-id: https://svn.apache.org/repos/asf/ant/antlibs/compress/trunk@1553669 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/docs/compresource.html b/docs/compresource.html
index 0c2ff9c..09d77b4 100644
--- a/docs/compresource.html
+++ b/docs/compresource.html
@@ -138,6 +138,24 @@
<a href="http://code.google.com/p/snappy/">Snappy</a>
compression.</p>
+<h4>Parameters</h4>
+ <p>In addition to the attributes supported by all uncompressing resources
+ this resource also supports.</p>
+ <table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">framed</td>
+ <td valign="top">Whether the input is expected to use
+ the <a href="http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt">framing
+ format</a>.</td>
+ <td align="center" valign="top">No, defaults to true.</td>
+ </tr>
+ </table>
+
<h4>Examples</h4>
<pre>
diff --git a/docs/unpack.html b/docs/unpack.html
index c03f1fb..1487a73 100644
--- a/docs/unpack.html
+++ b/docs/unpack.html
@@ -105,7 +105,7 @@
compression algorithm.</p>
<p>This task does not work on defalted archives, you need to wrap
- defalted archives into <code>gunzipresource</code>s in order to use
+ deflated archives into <code>gunzipresource</code>s in order to use
them.
<h4>Parameters</h4>
@@ -160,6 +160,26 @@
the <a href="http://code.google.com/p/snappy/">Snappy</a>
compression algorithm.</p>
+<p><em>Since Apache Compress Antlib 1.4</em>.</p>
+
+<h4>Parameters</h4>
+ <p>In addition to the attributes supported by all uncompressing task
+ this task also supports.</p>
+ <table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">framed</td>
+ <td valign="top">Whether the input is expected to use
+ the <a href="http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt">framing
+ format</a>.</td>
+ <td align="center" valign="top">No, defaults to true.</td>
+ </tr>
+ </table>
+
<h3><a name="unxz">UnXZ</a></h3>
<p>Is an <a href="#unpack">uncompressing task</a> that uses the XZ
@@ -174,6 +194,8 @@
<p>Is an <a href="#unpack">uncompressing task</a> that uses the .Z
compression algorithm.</p>
+<p><em>Since Apache Compress Antlib 1.4</em>.</p>
+
<h3>Examples</h3>
<blockquote><pre>
<cmp:gunzip src="test.tar.gz" xmlns:cmp="antlib:org.apache.ant.compress"/>
diff --git a/src/main/org/apache/ant/compress/resources/CommonsCompressCompressorResource.java b/src/main/org/apache/ant/compress/resources/CommonsCompressCompressorResource.java
index 34f6628..6cc6f68 100644
--- a/src/main/org/apache/ant/compress/resources/CommonsCompressCompressorResource.java
+++ b/src/main/org/apache/ant/compress/resources/CommonsCompressCompressorResource.java
@@ -39,14 +39,27 @@
extends ContentTransformingResource {
private final String name;
- private final CompressorStreamFactory factory;
+ private CompressorStreamFactory factory;
private boolean decompressConcatenated = false;
- /** A no-arg constructor */
+ protected CommonsCompressCompressorResource(String name) {
+ this.name = name;
+ }
+
protected CommonsCompressCompressorResource(String name,
CompressorStreamFactory factory) {
+ this(name);
+ setFactory(factory);
+ }
+
+ /**
+ * Constructor with another resource to wrap.
+ * @param other the resource to wrap.
+ */
+ protected CommonsCompressCompressorResource(String name,
+ ResourceCollection other) {
+ super(other);
this.name = name;
- this.factory = factory;
}
/**
@@ -56,8 +69,14 @@
protected CommonsCompressCompressorResource(String name,
CompressorStreamFactory factory,
ResourceCollection other) {
- super(other);
- this.name = name;
+ this(name, other);
+ setFactory(factory);
+ }
+
+ /**
+ * @since Apache Compress Antlib 1.4
+ */
+ protected final void setFactory(CompressorStreamFactory factory) {
this.factory = factory;
}
diff --git a/src/main/org/apache/ant/compress/resources/SnappyResource.java b/src/main/org/apache/ant/compress/resources/SnappyResource.java
index 4b51d9f..de5136e 100644
--- a/src/main/org/apache/ant/compress/resources/SnappyResource.java
+++ b/src/main/org/apache/ant/compress/resources/SnappyResource.java
@@ -27,11 +27,24 @@
public final class SnappyResource extends CommonsCompressCompressorResource {
private static final String NAME = "Snappy";
+ private final SnappyStreamFactory factory;
+
public SnappyResource() {
- super(NAME, new SnappyStreamFactory());
+ super(NAME);
+ setFactory(factory = new SnappyStreamFactory());
}
public SnappyResource(ResourceCollection other) {
- super(NAME, new SnappyStreamFactory(), other);
+ super(NAME, other);
+ setFactory(factory = new SnappyStreamFactory());
+ }
+
+ /**
+ * Whether to use the "framing format".
+ *
+ * <p>Defaults to true.</p>
+ */
+ public void setFramed(boolean framed) {
+ factory.setFramed(framed);
}
}
diff --git a/src/main/org/apache/ant/compress/taskdefs/UnSnappy.java b/src/main/org/apache/ant/compress/taskdefs/UnSnappy.java
index 792d41a..d090dfb 100644
--- a/src/main/org/apache/ant/compress/taskdefs/UnSnappy.java
+++ b/src/main/org/apache/ant/compress/taskdefs/UnSnappy.java
@@ -26,8 +26,20 @@
*/
public final class UnSnappy extends UnpackBase {
+ private final SnappyStreamFactory factory;
+
public UnSnappy() {
- super(".sz", new SnappyStreamFactory());
+ super(".sz");
+ setFactory(factory = new SnappyStreamFactory());
+ }
+
+ /**
+ * Whether to use the "framing format".
+ *
+ * <p>Defaults to true.</p>
+ */
+ public void setFramed(boolean framed) {
+ factory.setFramed(framed);
}
}
diff --git a/src/main/org/apache/ant/compress/util/SnappyStreamFactory.java b/src/main/org/apache/ant/compress/util/SnappyStreamFactory.java
index 1ee5636..1b763d0 100644
--- a/src/main/org/apache/ant/compress/util/SnappyStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/SnappyStreamFactory.java
@@ -25,6 +25,7 @@
import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.compressors.CompressorOutputStream;
import org.apache.commons.compress.compressors.snappy.FramedSnappyCompressorInputStream;
+import org.apache.commons.compress.compressors.snappy.SnappyCompressorInputStream;
/**
* Creates streams for the standalone Snappy format.
@@ -33,12 +34,24 @@
*/
public class SnappyStreamFactory implements CompressorStreamFactory {
+ private boolean framed = true;
+
+ /**
+ * Whether to use the "framing format".
+ *
+ * <p>Defaults to true.</p>
+ */
+ public void setFramed(boolean framed) {
+ this.framed = framed;
+ }
+
/**
* @param stream the stream to read from, should be buffered
*/
public CompressorInputStream getCompressorStream(InputStream stream)
throws IOException {
- return new FramedSnappyCompressorInputStream(stream);
+ return framed ? new FramedSnappyCompressorInputStream(stream)
+ : (CompressorInputStream) new SnappyCompressorInputStream(stream);
}
/**
diff --git a/src/tests/antunit/snappyresource-test.xml b/src/tests/antunit/snappyresource-test.xml
index 7818428..a7d0ea0 100644
--- a/src/tests/antunit/snappyresource-test.xml
+++ b/src/tests/antunit/snappyresource-test.xml
@@ -38,4 +38,15 @@
actual="${output}/asf-logo.gif"/>
</target>
+ <target name="testNativeSnappyUnframed" depends="setUp">
+ <copy todir="${output}">
+ <cmp:snappyresource framed="false">
+ <file file="../resources/asf-logo.gif.snappy"/>
+ </cmp:snappyresource>
+ <globmapper from="*.snappy" to="*"/>
+ </copy>
+ <au:assertFilesMatch expected="../resources/asf-logo.gif"
+ actual="${output}/asf-logo.gif"/>
+ </target>
+
</project>
diff --git a/src/tests/antunit/unsnappy-test.xml b/src/tests/antunit/unsnappy-test.xml
index 252b787..d8f87db 100644
--- a/src/tests/antunit/unsnappy-test.xml
+++ b/src/tests/antunit/unsnappy-test.xml
@@ -54,5 +54,20 @@
actual="${output}/asf-logo.gif"/>
</target>
+ <target name="testNativeSnappyUnframed" depends="setUp">
+ <cmp:unsnappy src="../resources/asf-logo.gif.snappy"
+ dest="${output}/asf-logo.gif"
+ framed="false"/>
+ <au:assertFilesMatch expected="../resources/asf-logo.gif"
+ actual="${output}/asf-logo.gif"/>
+ </target>
+
+ <target name="testWithResourceUnframed" depends="setUp">
+ <cmp:unsnappy dest="${output}/asf-logo.gif" framed="false">
+ <file file="../resources/asf-logo.gif.snappy"/>
+ </cmp:unsnappy>
+ <au:assertFilesMatch expected="../resources/asf-logo.gif"
+ actual="${output}/asf-logo.gif"/>
+ </target>
</project>
diff --git a/src/tests/resources/asf-logo.gif.snappy b/src/tests/resources/asf-logo.gif.snappy
new file mode 100644
index 0000000..8e7b02c
--- /dev/null
+++ b/src/tests/resources/asf-logo.gif.snappy
Binary files differ