| @@ -294,7 +294,7 @@ | |||||
| <selector id="needs.xz"> | <selector id="needs.xz"> | ||||
| <or> | <or> | ||||
| <filename name="${optional.package}/xz/Xz*"/> | |||||
| <filename name="${optional.package}/xz/"/> | |||||
| </or> | </or> | ||||
| </selector> | </selector> | ||||
| @@ -108,6 +108,7 @@ typedef=org.apache.tools.ant.taskdefs.Typedef | |||||
| unjar=org.apache.tools.ant.taskdefs.Expand | unjar=org.apache.tools.ant.taskdefs.Expand | ||||
| untar=org.apache.tools.ant.taskdefs.Untar | untar=org.apache.tools.ant.taskdefs.Untar | ||||
| unwar=org.apache.tools.ant.taskdefs.Expand | unwar=org.apache.tools.ant.taskdefs.Expand | ||||
| unxz=org.apache.tools.ant.taskdefs.optional.xz.Unxz | |||||
| unzip=org.apache.tools.ant.taskdefs.Expand | unzip=org.apache.tools.ant.taskdefs.Expand | ||||
| uptodate=org.apache.tools.ant.taskdefs.UpToDate | uptodate=org.apache.tools.ant.taskdefs.UpToDate | ||||
| waitfor=org.apache.tools.ant.taskdefs.WaitFor | 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> | |||||