PR: 25513 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277577 13f79535-47bb-0310-9956-ffa450edef68master
@@ -101,6 +101,9 @@ Other changes: | |||
* mail task accepts nested header element. Bugzilla report 24713. | |||
* zip/jar/war/ear supports level attribute for deflate compression level. | |||
Bugzilla report 25513. | |||
Changes from Ant 1.6.2 to current Ant 1.6 CVS version | |||
===================================================== | |||
@@ -134,6 +134,13 @@ to a value other than its default, <code>"add"</code>.</b></p> | |||
Defaults to true. <em>Since Ant 1.6.2</em></td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">level</td> | |||
<td valign="top">Non-default level at which file compression should be | |||
performed. Valid values range from 0 (no compression/fastest) to 9 | |||
(maximum compression/slowest). <em>Since Ant 1.7</em></td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
</table> | |||
<h3>Nested elements</h3> | |||
<h4>metainf</h4> | |||
@@ -194,6 +194,13 @@ to a value other than its default, <code>"add"</code>.</b></p> | |||
Defaults to true. <em>Since Ant 1.6.2</em></td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">level</td> | |||
<td valign="top">Non-default level at which file compression should be | |||
performed. Valid values range from 0 (no compression/fastest) to 9 | |||
(maximum compression/slowest). <em>Since Ant 1.7</em></td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
</table> | |||
<h3>Nested elements</h3> | |||
@@ -141,6 +141,13 @@ to a value other than its default, <code>"add"</code>.</b></p> | |||
Defaults to true. <em>Since Ant 1.6.2</em></td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">level</td> | |||
<td valign="top">Non-default level at which file compression should be | |||
performed. Valid values range from 0 (no compression/fastest) to 9 | |||
(maximum compression/slowest). <em>Since Ant 1.7</em></td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
</table> | |||
<h3>Nested elements</h3> | |||
<h4>lib</h4> | |||
@@ -189,6 +189,13 @@ to a value other than its default, <code>"add"</code>.</b></p> | |||
<td valign="top">Comment to store in the archive. <em>Since Ant 1.6.3</em></td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">level</td> | |||
<td valign="top">Non-default level at which file compression should be | |||
performed. Valid values range from 0 (no compression/fastest) to 9 | |||
(maximum compression/slowest). <em>Since Ant 1.7</em></td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
</table> | |||
<h3>Parameters specified as nested elements</h3> | |||
<h4>fileset</h4> | |||
@@ -139,6 +139,23 @@ | |||
<zip destfile="test3.zip" basedir="empty" whenempty="create" includes="*.xyz"/> | |||
</target> | |||
<target name="testCompressionLevel" depends="test6"> | |||
<length property="test6.length" file="test6.zip" /> | |||
<zip destFile="testLevel.zip" basedir="." level="9"> | |||
<include name="*.xml" /> | |||
<exclude name="zip.*" /> | |||
</zip> | |||
<fail> | |||
<condition> | |||
<not> | |||
<isfileselected file="testLevel.zip"> | |||
<size when="less" value="${test6.length}" /> | |||
</isfileselected> | |||
</not> | |||
</condition> | |||
</fail> | |||
</target> | |||
<target name="cleanup"> | |||
<delete file="test3.zip"/> | |||
<delete file="test4.zip"/> | |||
@@ -120,6 +120,8 @@ public class Zip extends MatchingTask { | |||
*/ | |||
private String comment = ""; | |||
private int level = ZipOutputStream.DEFAULT_COMPRESSION; | |||
/** | |||
* This is the name/location of where to | |||
* create the .zip file. | |||
@@ -335,6 +337,25 @@ public class Zip extends MatchingTask { | |||
return comment; | |||
} | |||
/** | |||
* Set the compression level to use. Default is | |||
* ZipOutputStream.DEFAULT_COMPRESSION. | |||
* @param level compression level. | |||
* @since Ant 1.7 | |||
*/ | |||
public void setLevel(int level) { | |||
this.level = level; | |||
} | |||
/** | |||
* Get the compression level. | |||
* @return compression level. | |||
* @since Ant 1.7 | |||
*/ | |||
public int getLevel() { | |||
return level; | |||
} | |||
/** | |||
* Whether the file modification times will be rounded up to the | |||
* next even number of seconds. | |||
@@ -481,16 +502,13 @@ public class Zip extends MatchingTask { | |||
ZipOutputStream zOut = null; | |||
try { | |||
if (!skipWriting) { | |||
zOut = new ZipOutputStream(zipFile); | |||
zOut.setEncoding(encoding); | |||
if (doCompress) { | |||
zOut.setMethod(ZipOutputStream.DEFLATED); | |||
} else { | |||
zOut.setMethod(ZipOutputStream.STORED); | |||
} | |||
zOut.setMethod(doCompress | |||
? ZipOutputStream.DEFLATED : ZipOutputStream.STORED); | |||
zOut.setLevel(level); | |||
} | |||
initZipOutputStream(zOut); | |||
@@ -1080,12 +1098,12 @@ public class Zip extends MatchingTask { | |||
ze.setMethod(doCompress ? ZipEntry.DEFLATED : ZipEntry.STORED); | |||
/* | |||
* ZipOutputStream.putNextEntry expects the ZipEntry to | |||
* know its size and the CRC sum before you start writing | |||
* the data when using STORED mode - unless it is seekable. | |||
* | |||
* This forces us to process the data twice. | |||
*/ | |||
* ZipOutputStream.putNextEntry expects the ZipEntry to | |||
* know its size and the CRC sum before you start writing | |||
* the data when using STORED mode - unless it is seekable. | |||
* | |||
* This forces us to process the data twice. | |||
*/ | |||
if (!zOut.isSeekable() && !doCompress) { | |||
long size = 0; | |||
CRC32 cal = new CRC32(); | |||
@@ -54,6 +54,27 @@ import java.util.zip.ZipException; | |||
*/ | |||
public class ZipOutputStream extends FilterOutputStream { | |||
/** | |||
* Compression method for deflated entries. | |||
* | |||
* @since 1.1 | |||
*/ | |||
public static final int DEFLATED = java.util.zip.ZipEntry.DEFLATED; | |||
/** | |||
* Default compression level for deflated entries. | |||
* | |||
* @since Ant 1.7 | |||
*/ | |||
public static final int DEFAULT_COMPRESSION = Deflater.DEFAULT_COMPRESSION; | |||
/** | |||
* Compression method for stored entries. | |||
* | |||
* @since 1.1 | |||
*/ | |||
public static final int STORED = java.util.zip.ZipEntry.STORED; | |||
/** | |||
* Current entry. | |||
* | |||
@@ -73,7 +94,7 @@ public class ZipOutputStream extends FilterOutputStream { | |||
* | |||
* @since 1.1 | |||
*/ | |||
private int level = Deflater.DEFAULT_COMPRESSION; | |||
private int level = DEFAULT_COMPRESSION; | |||
/** | |||
* Has the compression level changed when compared to the last | |||
@@ -182,7 +203,7 @@ public class ZipOutputStream extends FilterOutputStream { | |||
* | |||
* @since 1.14 | |||
*/ | |||
protected Deflater def = new Deflater(Deflater.DEFAULT_COMPRESSION, true); | |||
protected Deflater def = new Deflater(level, true); | |||
/** | |||
* This buffer servers as a Deflater. | |||
@@ -203,20 +224,6 @@ public class ZipOutputStream extends FilterOutputStream { | |||
*/ | |||
private RandomAccessFile raf = null; | |||
/** | |||
* Compression method for deflated entries. | |||
* | |||
* @since 1.1 | |||
*/ | |||
public static final int DEFLATED = java.util.zip.ZipEntry.DEFLATED; | |||
/** | |||
* Compression method for stored entries. | |||
* | |||
* @since 1.1 | |||
*/ | |||
public static final int STORED = java.util.zip.ZipEntry.STORED; | |||
/** | |||
* Creates a new ZIP OutputStream filtering the underlying stream. | |||
* @param out the outputstream to zip | |||
@@ -430,10 +437,16 @@ public class ZipOutputStream extends FilterOutputStream { | |||
* Sets the compression level for subsequent entries. | |||
* | |||
* <p>Default is Deflater.DEFAULT_COMPRESSION.</p> | |||
* @param level the compression level | |||
* @param level the compression level. | |||
* @throws IllegalArgumentException if an invalid compression level is specified. | |||
* @since 1.1 | |||
*/ | |||
public void setLevel(int level) { | |||
if (level < Deflater.DEFAULT_COMPRESSION | |||
|| level > Deflater.BEST_COMPRESSION) { | |||
throw new IllegalArgumentException( | |||
"Invalid compression level: " + level); | |||
} | |||
hasCompressionLevelChanged = (this.level != level); | |||
this.level = level; | |||
} | |||
@@ -843,7 +856,7 @@ public class ZipOutputStream extends FilterOutputStream { | |||
* | |||
* @since 1.14 | |||
*/ | |||
protected final void writeOut(byte [] data) throws IOException { | |||
protected final void writeOut(byte[] data) throws IOException { | |||
writeOut(data, 0, data.length); | |||
} | |||
@@ -856,7 +869,7 @@ public class ZipOutputStream extends FilterOutputStream { | |||
* | |||
* @since 1.14 | |||
*/ | |||
protected final void writeOut(byte [] data, int offset, int length) | |||
protected final void writeOut(byte[] data, int offset, int length) | |||
throws IOException { | |||
if (raf != null) { | |||
raf.write(data, offset, length); | |||
@@ -143,6 +143,9 @@ public class ZipTest extends BuildFileTest { | |||
executeTarget("zipEmptyCreate"); | |||
assertTrue("archive should be created", | |||
getProject().resolveFile("test3.zip").exists()); | |||
} | |||
// Bugzilla Report 25513 | |||
public void testCompressionLevel() { | |||
executeTarget("testCompressionLevel"); | |||
} | |||
} |