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. | * 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 | 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> | Defaults to true. <em>Since Ant 1.6.2</em></td> | ||||
<td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
</tr> | </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> | </table> | ||||
<h3>Nested elements</h3> | <h3>Nested elements</h3> | ||||
<h4>metainf</h4> | <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> | Defaults to true. <em>Since Ant 1.6.2</em></td> | ||||
<td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
</tr> | </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> | </table> | ||||
<h3>Nested elements</h3> | <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> | Defaults to true. <em>Since Ant 1.6.2</em></td> | ||||
<td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
</tr> | </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> | </table> | ||||
<h3>Nested elements</h3> | <h3>Nested elements</h3> | ||||
<h4>lib</h4> | <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">Comment to store in the archive. <em>Since Ant 1.6.3</em></td> | ||||
<td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
</tr> | </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> | </table> | ||||
<h3>Parameters specified as nested elements</h3> | <h3>Parameters specified as nested elements</h3> | ||||
<h4>fileset</h4> | <h4>fileset</h4> | ||||
@@ -139,6 +139,23 @@ | |||||
<zip destfile="test3.zip" basedir="empty" whenempty="create" includes="*.xyz"/> | <zip destfile="test3.zip" basedir="empty" whenempty="create" includes="*.xyz"/> | ||||
</target> | </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"> | <target name="cleanup"> | ||||
<delete file="test3.zip"/> | <delete file="test3.zip"/> | ||||
<delete file="test4.zip"/> | <delete file="test4.zip"/> | ||||
@@ -120,6 +120,8 @@ public class Zip extends MatchingTask { | |||||
*/ | */ | ||||
private String comment = ""; | private String comment = ""; | ||||
private int level = ZipOutputStream.DEFAULT_COMPRESSION; | |||||
/** | /** | ||||
* This is the name/location of where to | * This is the name/location of where to | ||||
* create the .zip file. | * create the .zip file. | ||||
@@ -335,6 +337,25 @@ public class Zip extends MatchingTask { | |||||
return comment; | 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 | * Whether the file modification times will be rounded up to the | ||||
* next even number of seconds. | * next even number of seconds. | ||||
@@ -481,16 +502,13 @@ public class Zip extends MatchingTask { | |||||
ZipOutputStream zOut = null; | ZipOutputStream zOut = null; | ||||
try { | try { | ||||
if (!skipWriting) { | if (!skipWriting) { | ||||
zOut = new ZipOutputStream(zipFile); | zOut = new ZipOutputStream(zipFile); | ||||
zOut.setEncoding(encoding); | 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); | initZipOutputStream(zOut); | ||||
@@ -1080,12 +1098,12 @@ public class Zip extends MatchingTask { | |||||
ze.setMethod(doCompress ? ZipEntry.DEFLATED : ZipEntry.STORED); | 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) { | if (!zOut.isSeekable() && !doCompress) { | ||||
long size = 0; | long size = 0; | ||||
CRC32 cal = new CRC32(); | CRC32 cal = new CRC32(); | ||||
@@ -54,6 +54,27 @@ import java.util.zip.ZipException; | |||||
*/ | */ | ||||
public class ZipOutputStream extends FilterOutputStream { | 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. | * Current entry. | ||||
* | * | ||||
@@ -73,7 +94,7 @@ public class ZipOutputStream extends FilterOutputStream { | |||||
* | * | ||||
* @since 1.1 | * @since 1.1 | ||||
*/ | */ | ||||
private int level = Deflater.DEFAULT_COMPRESSION; | |||||
private int level = DEFAULT_COMPRESSION; | |||||
/** | /** | ||||
* Has the compression level changed when compared to the last | * Has the compression level changed when compared to the last | ||||
@@ -182,7 +203,7 @@ public class ZipOutputStream extends FilterOutputStream { | |||||
* | * | ||||
* @since 1.14 | * @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. | * This buffer servers as a Deflater. | ||||
@@ -203,20 +224,6 @@ public class ZipOutputStream extends FilterOutputStream { | |||||
*/ | */ | ||||
private RandomAccessFile raf = null; | 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. | * Creates a new ZIP OutputStream filtering the underlying stream. | ||||
* @param out the outputstream to zip | * @param out the outputstream to zip | ||||
@@ -430,10 +437,16 @@ public class ZipOutputStream extends FilterOutputStream { | |||||
* Sets the compression level for subsequent entries. | * Sets the compression level for subsequent entries. | ||||
* | * | ||||
* <p>Default is Deflater.DEFAULT_COMPRESSION.</p> | * <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 | * @since 1.1 | ||||
*/ | */ | ||||
public void setLevel(int level) { | 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); | hasCompressionLevelChanged = (this.level != level); | ||||
this.level = level; | this.level = level; | ||||
} | } | ||||
@@ -843,7 +856,7 @@ public class ZipOutputStream extends FilterOutputStream { | |||||
* | * | ||||
* @since 1.14 | * @since 1.14 | ||||
*/ | */ | ||||
protected final void writeOut(byte [] data) throws IOException { | |||||
protected final void writeOut(byte[] data) throws IOException { | |||||
writeOut(data, 0, data.length); | writeOut(data, 0, data.length); | ||||
} | } | ||||
@@ -856,7 +869,7 @@ public class ZipOutputStream extends FilterOutputStream { | |||||
* | * | ||||
* @since 1.14 | * @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 { | throws IOException { | ||||
if (raf != null) { | if (raf != null) { | ||||
raf.write(data, offset, length); | raf.write(data, offset, length); | ||||
@@ -143,6 +143,9 @@ public class ZipTest extends BuildFileTest { | |||||
executeTarget("zipEmptyCreate"); | executeTarget("zipEmptyCreate"); | ||||
assertTrue("archive should be created", | assertTrue("archive should be created", | ||||
getProject().resolveFile("test3.zip").exists()); | getProject().resolveFile("test3.zip").exists()); | ||||
} | |||||
// Bugzilla Report 25513 | |||||
public void testCompressionLevel() { | |||||
executeTarget("testCompressionLevel"); | |||||
} | } | ||||
} | } |