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"); | |||||
| } | } | ||||
| } | } | ||||