PR: 10504 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274746 13f79535-47bb-0310-9956-ffa450edef68master
@@ -453,6 +453,10 @@ Other changes: | |||||
* FileUtils#createTempFile will now create temporary files in the | * FileUtils#createTempFile will now create temporary files in the | ||||
directory pointed to by the property java.io.tmpdir | directory pointed to by the property java.io.tmpdir | ||||
* <unzip> and friends now supports an optional encoding attribute to | |||||
enable it to expand archives created with filenames using an encoding | |||||
other than UTF8. Bugzilla Report 10504. | |||||
Changes from Ant 1.5.2 to Ant 1.5.3 | Changes from Ant 1.5.2 to Ant 1.5.3 | ||||
=================================== | =================================== | ||||
@@ -46,11 +46,25 @@ to perform unarchival upon. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td valign="top">compression</td> | <td valign="top">compression</td> | ||||
<td valign="top">compression method for untar. Allowable values are | |||||
"none", "gzip" and "bzip2". Default is | |||||
"none".</td> | |||||
<td valign="top"><b>Note:</b> This attribute is only available for | |||||
the <code>untar</code> task.<br> | |||||
compression method. Allowable values are "none", | |||||
"gzip" and "bzip2". Default is | |||||
"none".</td> | |||||
<td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">encoding</td> | |||||
<td valign="top"><b>Note:</b> This attribute is not available for | |||||
the <code>untar</code> task.<br> | |||||
The character encoding that has been used for filenames | |||||
inside the zip file. For a list of possible values see <a | |||||
href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html</a>.<br> | |||||
Defaults to "UTF8", use the magic value | |||||
<code>native-encoding</code> for the platform's default character | |||||
encoding.</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<h3>Examples</h3> | <h3>Examples</h3> | ||||
@@ -89,7 +103,7 @@ to perform unarchival upon. | |||||
</pre></p> | </pre></p> | ||||
</blockquote> | </blockquote> | ||||
<hr> | <hr> | ||||
<p align="center">Copyright © 2000-2002 Apache Software Foundation. All rights | |||||
<p align="center">Copyright © 2000-2003 Apache Software Foundation. All rights | |||||
Reserved.</p> | Reserved.</p> | ||||
</body> | </body> | ||||
@@ -41,4 +41,7 @@ | |||||
<untar src="." dest="." /> | <untar src="." dest="." /> | ||||
</target> | </target> | ||||
<target name="encoding"> | |||||
<untar src="expected/asf-logo.gif.tar" dest="." encoding="foo"/> | |||||
</target> | |||||
</project> | </project> |
@@ -78,4 +78,13 @@ | |||||
</unzip> | </unzip> | ||||
</target> | </target> | ||||
<!-- Bugzilla Report 10504 --> | |||||
<target name="encodingTest"> | |||||
<mkdir dir="unziptestin"/> | |||||
<touch file="unziptestin/foo"/> | |||||
<zip zipfile="unziptest.zip" basedir="unziptestin" encoding="UTF16"/> | |||||
<mkdir dir="unziptestout"/> | |||||
<unzip src="unziptest.zip" dest="unziptestout" encoding="UTF16"/> | |||||
</target> | |||||
</project> | </project> |
@@ -95,9 +95,10 @@ public class Expand extends Task { | |||||
private boolean overwrite = true; | private boolean overwrite = true; | ||||
private Vector patternsets = new Vector(); | private Vector patternsets = new Vector(); | ||||
private Vector filesets = new Vector(); | private Vector filesets = new Vector(); | ||||
private static final byte[] ZIPMARKER = {0x50, 0x4b, 0x03, 0x04}; | |||||
private static final int MARKER_SIZE = ZIPMARKER.length; | |||||
private static final int MAX_LOOKAHEAD = 50 * 1024; // 50K. | |||||
private static final String NATIVE_ENCODING = "native-encoding"; | |||||
private String encoding = "UTF8"; | |||||
/** | /** | ||||
* Do the work. | * Do the work. | ||||
@@ -155,7 +156,7 @@ public class Expand extends Task { | |||||
log("Expanding: " + srcF + " into " + dir, Project.MSG_INFO); | log("Expanding: " + srcF + " into " + dir, Project.MSG_INFO); | ||||
ZipFile zf = null; | ZipFile zf = null; | ||||
try { | try { | ||||
zf = new ZipFile(srcF, "UTF8"); | |||||
zf = new ZipFile(srcF, encoding); | |||||
Enumeration enum = zf.getEntries(); | Enumeration enum = zf.getEntries(); | ||||
while (enum.hasMoreElements()) { | while (enum.hasMoreElements()) { | ||||
ZipEntry ze = (ZipEntry) enum.nextElement(); | ZipEntry ze = (ZipEntry) enum.nextElement(); | ||||
@@ -324,4 +325,19 @@ public class Expand extends Task { | |||||
filesets.addElement(set); | filesets.addElement(set); | ||||
} | } | ||||
/** | |||||
* Sets the encoding to assume for file names and comments. | |||||
* | |||||
* <p>Set to <code>native-encoding</code> if you want your | |||||
* platform's native encoding, defaults to UTF8.</p> | |||||
* | |||||
* @since Ant 1.6 | |||||
*/ | |||||
public void setEncoding(String encoding) { | |||||
if (NATIVE_ENCODING.equals(encoding)) { | |||||
encoding = null; | |||||
} | |||||
this.encoding = encoding; | |||||
} | |||||
} | } |
@@ -1,7 +1,7 @@ | |||||
/* | /* | ||||
* The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
* | * | ||||
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||||
* reserved. | * reserved. | ||||
* | * | ||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
@@ -112,6 +112,17 @@ public class Untar extends Expand { | |||||
compression = method; | compression = method; | ||||
} | } | ||||
/** | |||||
* No encoding support in Untar. | |||||
* | |||||
* @since Ant 1.6 | |||||
*/ | |||||
public void setEncoding(String encoding) { | |||||
throw new BuildException("The " + getTaskName() | |||||
+ " task doesn't support the encoding" | |||||
+ " attribute", getLocation()); | |||||
} | |||||
protected void expandFile(FileUtils fileUtils, File srcF, File dir) { | protected void expandFile(FileUtils fileUtils, File srcF, File dir) { | ||||
TarInputStream tis = null; | TarInputStream tis = null; | ||||
try { | try { | ||||
@@ -1,7 +1,7 @@ | |||||
/* | /* | ||||
* The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
* | * | ||||
* Copyright (c) 2001-2002 The Apache Software Foundation. All rights | |||||
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||||
* reserved. | * reserved. | ||||
* | * | ||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
@@ -53,7 +53,6 @@ | |||||
*/ | */ | ||||
package org.apache.tools.ant.taskdefs; | package org.apache.tools.ant.taskdefs; | ||||
import java.io.File; | |||||
import org.apache.tools.ant.BuildFileTest; | import org.apache.tools.ant.BuildFileTest; | ||||
import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
@@ -117,8 +116,15 @@ public class UntarTest extends BuildFileTest { | |||||
project.resolveFile("asf-logo.gif"))); | project.resolveFile("asf-logo.gif"))); | ||||
} | } | ||||
public void testSrcDirTest() throws java.io.IOException { | |||||
FileUtils fileUtils = FileUtils.newFileUtils(); | |||||
public void testSrcDirTest() { | |||||
expectBuildException("srcDirTest", "Src cannot be a directory."); | expectBuildException("srcDirTest", "Src cannot be a directory."); | ||||
} | } | ||||
public void testEncoding() { | |||||
expectSpecificBuildException("encoding", | |||||
"<untar> overrides setEncoding.", | |||||
"The untar task doesn't support the " | |||||
+ "encoding attribute"); | |||||
} | |||||
} | } |
@@ -153,4 +153,13 @@ public class UnzipTest extends BuildFileTest { | |||||
getProject().resolveFile("unziptestout/2/bar").exists()); | getProject().resolveFile("unziptestout/2/bar").exists()); | ||||
} | } | ||||
/* | |||||
* PR 10504 | |||||
*/ | |||||
public void testEncoding() { | |||||
executeTarget("encodingTest"); | |||||
assertTrue("foo has been properly named", | |||||
getProject().resolveFile("unziptestout/foo").exists()); | |||||
} | |||||
} | } |