@@ -294,7 +294,7 @@ | |||
<selector id="needs.xz"> | |||
<or> | |||
<filename name="${optional.package}/xz/Xz*"/> | |||
<filename name="${optional.package}/xz/"/> | |||
</or> | |||
</selector> | |||
@@ -108,6 +108,7 @@ typedef=org.apache.tools.ant.taskdefs.Typedef | |||
unjar=org.apache.tools.ant.taskdefs.Expand | |||
untar=org.apache.tools.ant.taskdefs.Untar | |||
unwar=org.apache.tools.ant.taskdefs.Expand | |||
unxz=org.apache.tools.ant.taskdefs.optional.xz.Unxz | |||
unzip=org.apache.tools.ant.taskdefs.Expand | |||
uptodate=org.apache.tools.ant.taskdefs.UpToDate | |||
waitfor=org.apache.tools.ant.taskdefs.WaitFor | |||
@@ -0,0 +1,93 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
* | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.xz; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.taskdefs.Unpack; | |||
import org.apache.tools.ant.util.FileUtils; | |||
import org.tukaani.xz.XZInputStream; | |||
/** | |||
* Expands a file that has been compressed with the XZ | |||
* algorithm. Normally used to compress non-compressed archives such | |||
* as TAR files. | |||
* | |||
* @since Ant 1.10.1 | |||
* | |||
* @ant.task category="packaging" | |||
*/ | |||
public class Unxz extends Unpack { | |||
private static final int BUFFER_SIZE = 8 * 1024; | |||
private static final String DEFAULT_EXTENSION = ".xz"; | |||
/** | |||
* Get the default extension. | |||
* @return the value ".xz" | |||
*/ | |||
protected String getDefaultExtension() { | |||
return DEFAULT_EXTENSION; | |||
} | |||
/** | |||
* Implement the gunzipping. | |||
*/ | |||
protected void extract() { | |||
if (srcResource.getLastModified() > dest.lastModified()) { | |||
log("Expanding " + srcResource.getName() + " to " | |||
+ dest.getAbsolutePath()); | |||
FileOutputStream out = null; | |||
XZInputStream zIn = null; | |||
InputStream fis = null; | |||
try { | |||
out = new FileOutputStream(dest); | |||
fis = srcResource.getInputStream(); | |||
zIn = new XZInputStream(fis); | |||
byte[] buffer = new byte[BUFFER_SIZE]; | |||
int count = 0; | |||
do { | |||
out.write(buffer, 0, count); | |||
count = zIn.read(buffer, 0, buffer.length); | |||
} while (count != -1); | |||
} catch (IOException ioe) { | |||
String msg = "Problem expanding xz " + ioe.getMessage(); | |||
throw new BuildException(msg, ioe, getLocation()); | |||
} finally { | |||
FileUtils.close(fis); | |||
FileUtils.close(out); | |||
FileUtils.close(zIn); | |||
} | |||
} | |||
} | |||
/** | |||
* Whether this task can deal with non-file resources. | |||
* | |||
* <p>This implementation returns true only.</p> | |||
* @return true | |||
*/ | |||
protected boolean supportsNonFileResources() { | |||
return true; | |||
} | |||
} |
@@ -0,0 +1,63 @@ | |||
<?xml version="1.0"?> | |||
<!-- | |||
Licensed to the Apache Software Foundation (ASF) under one or more | |||
contributor license agreements. See the NOTICE file distributed with | |||
this work for additional information regarding copyright ownership. | |||
The ASF licenses this file to You under the Apache License, Version 2.0 | |||
(the "License"); you may not use this file except in compliance with | |||
the License. You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
--> | |||
<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit"> | |||
<import file="../../../antunit-base.xml" /> | |||
<target name="setup"> | |||
<mkdir dir="${output}"/> | |||
<available property="xz.present" classname="org.tukaani.xz.XZOutputStream"/> | |||
</target> | |||
<target name="testWithFileResourceToFile" depends="setup" if="xz.present"> | |||
<unxz dest="${output}/asf-logo.gif"> | |||
<file file="../../../../../etc/testcases/taskdefs/expected/asf-logo.gif.xz"/> | |||
</unxz> | |||
<au:assertFilesMatch expected="../../../../../etc/testcases/asf-logo.gif" | |||
actual="${output}/asf-logo.gif"/> | |||
</target> | |||
<target name="testWithFileResourceToDirectory" depends="setup" if="xz.present"> | |||
<unxz dest="${output}"> | |||
<file file="../../../../../etc/testcases/taskdefs/expected/asf-logo.gif.xz"/> | |||
</unxz> | |||
<au:assertFilesMatch expected="../../../../../etc/testcases/asf-logo.gif" | |||
actual="${output}/asf-logo.gif"/> | |||
</target> | |||
<target name="testWithNonFileResourceToFile" depends="setup" if="xz.present"> | |||
<unxz dest="${output}/greeting.txt"> | |||
<url url="http://ant.apache.org/webtest/xz/greeting.txt.xz"/> | |||
</unxz> | |||
<get src="http://ant.apache.org/webtest/gunzip/greeting.txt" | |||
dest="${output}/orig.greeting.txt"/> | |||
<au:assertFilesMatch expected="${output}/orig.greeting.txt" | |||
actual="${output}/greeting.txt"/> | |||
</target> | |||
<target name="testWithNonFileResourceToDir" depends="setup" if="xz.present"> | |||
<unxz dest="${output}"> | |||
<url url="http://ant.apache.org/webtest/xz/greeting.txt.xz"/> | |||
</unxz> | |||
<get src="http://ant.apache.org/webtest/gunzip/greeting.txt" | |||
dest="${output}/orig.greeting.txt"/> | |||
<au:assertFilesMatch expected="${output}/orig.greeting.txt" | |||
actual="${output}/greeting.txt"/> | |||
</target> | |||
</project> | |||
@@ -0,0 +1,47 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- | |||
Licensed to the Apache Software Foundation (ASF) under one or more | |||
contributor license agreements. See the NOTICE file distributed with | |||
this work for additional information regarding copyright ownership. | |||
The ASF licenses this file to You under the Apache License, Version 2.0 | |||
(the "License"); you may not use this file except in compliance with | |||
the License. You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
--> | |||
<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit"> | |||
<!-- note relies on antunit 1.1 --> | |||
<import file="../../../antunit-base.xml" /> | |||
<target name="setUp"> | |||
<mkdir dir="${output}" /> | |||
<mkdir dir="${output}/empty" /> | |||
<touch file="${output}/fileone" /> | |||
<touch file="${output}/filetwo" /> | |||
<available property="xz.present" classname="org.tukaani.xz.XZOutputStream"/> | |||
</target> | |||
<target name="testFailNone" if="xz.present"> | |||
<au:expectfailure expectedmessage="No resource selected, xz needs exactly one resource." message="Should have thrown an exception"> | |||
<xz destfile="${output}/file.gz"> | |||
<fileset dir="${output}/empty" /> | |||
</xz> | |||
</au:expectfailure> | |||
</target> | |||
<target name="testFailTwo" if="xz.present"> | |||
<au:expectfailure expectedmessage="xz cannot handle multiple resources at once. (2 resources were selected.)" message="Should have thrown an exception"> | |||
<xz destfile="${output}/file.gz"> | |||
<fileset dir="${output}" /> | |||
</xz> | |||
</au:expectfailure> | |||
</target> | |||
</project> |