add support for writing Snappy without framing
diff --git a/docs/pack.html b/docs/pack.html
index 0a8700d..39e9b10 100644
--- a/docs/pack.html
+++ b/docs/pack.html
@@ -236,8 +236,11 @@
<tr>
<td valign="top">framed</td>
<td valign="top">Whether to use
- the <a href="https://github.com/google/snappy/blob/master/framing_format.txt">framing
- format</a>.</td>
+ the <a href="https://github.com/google/snappy/blob/master/framing_format.txt">framing
+ format</a>.<br/> When setting this to false only resources of
+ known (uncompressed) size can be compressed (for example
+ files).
+ </td>
<td align="center" valign="top">No, defaults to true.</td>
</tr>
</table>
diff --git a/src/main/org/apache/ant/compress/taskdefs/PackBase.java b/src/main/org/apache/ant/compress/taskdefs/PackBase.java
index 9c5d6de..4f63b91 100644
--- a/src/main/org/apache/ant/compress/taskdefs/PackBase.java
+++ b/src/main/org/apache/ant/compress/taskdefs/PackBase.java
@@ -232,6 +232,13 @@
}
}
+ /**
+ * @since Apache Compress Antlib 1.5
+ */
+ protected final Resource getSrc() {
+ return src;
+ }
+
public static interface ResourceWrapper {
CommonsCompressCompressorResource wrap(Resource dest);
}
diff --git a/src/main/org/apache/ant/compress/taskdefs/Snappy.java b/src/main/org/apache/ant/compress/taskdefs/Snappy.java
index 76528e4..f41e2e8 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Snappy.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Snappy.java
@@ -18,9 +18,14 @@
package org.apache.ant.compress.taskdefs;
+import java.io.IOException;
+import java.io.OutputStream;
+
import org.apache.ant.compress.resources.SnappyResource;
import org.apache.ant.compress.resources.CommonsCompressCompressorResource;
import org.apache.ant.compress.util.SnappyStreamFactory;
+import org.apache.commons.compress.compressors.CompressorOutputStream;
+import org.apache.commons.compress.compressors.snappy.SnappyCompressorOutputStream;
import org.apache.tools.ant.types.Resource;
/**
@@ -51,5 +56,13 @@
}
private class InnerSnappyStreamFactory extends SnappyStreamFactory {
+ @Override
+ public CompressorOutputStream getCompressorStream(OutputStream stream)
+ throws IOException {
+ if (isFramed() || getSrc() == null || getSrc().getSize() < 0) {
+ return super.getCompressorStream(stream);
+ }
+ return new SnappyCompressorOutputStream(stream, getSrc().getSize());
+ }
}
}
diff --git a/src/tests/antunit/unsnappy-test.xml b/src/tests/antunit/unsnappy-test.xml
index d8970a8..c8b0ff0 100644
--- a/src/tests/antunit/unsnappy-test.xml
+++ b/src/tests/antunit/unsnappy-test.xml
@@ -47,6 +47,17 @@
actual="${output}/asf-logo.gif"/>
</target>
+ <target name="testSnappyTaskWithoutFraming" depends="setUp">
+ <cmp:snappy src="../resources/asf-logo.gif"
+ destfile="${output}/asf-logo.gif.sz"
+ framed="false"/>
+ <cmp:unsnappy src="${output}/asf-logo.gif.sz"
+ dest="${output}/asf-logo.gif"
+ framed="false"/>
+ <au:assertFilesMatch expected="../resources/asf-logo.gif"
+ actual="${output}/asf-logo.gif"/>
+ </target>
+
<target name="testNativeSnappy" depends="setUp">
<cmp:unsnappy src="../resources/asf-logo.gif.sz"
dest="${output}/asf-logo.gif" />