Browse Source

unxz task - PR 60350

master
Stefan Bodewig 8 years ago
parent
commit
5ed0aeaa46
6 changed files with 205 additions and 1 deletions
  1. +1
    -1
      build.xml
  2. BIN
      src/etc/testcases/taskdefs/expected/asf-logo.gif.xz
  3. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  4. +93
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/xz/Unxz.java
  5. +63
    -0
      src/tests/antunit/taskdefs/optional/xz/unxz-test.xml
  6. +47
    -0
      src/tests/antunit/taskdefs/optional/xz/xz-test.xml

+ 1
- 1
build.xml View File

@@ -294,7 +294,7 @@

<selector id="needs.xz">
<or>
<filename name="${optional.package}/xz/Xz*"/>
<filename name="${optional.package}/xz/"/>
</or>
</selector>



BIN
src/etc/testcases/taskdefs/expected/asf-logo.gif.xz View File


+ 1
- 0
src/main/org/apache/tools/ant/taskdefs/defaults.properties View File

@@ -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


+ 93
- 0
src/main/org/apache/tools/ant/taskdefs/optional/xz/Unxz.java View File

@@ -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;
}
}

+ 63
- 0
src/tests/antunit/taskdefs/optional/xz/unxz-test.xml View File

@@ -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>


+ 47
- 0
src/tests/antunit/taskdefs/optional/xz/xz-test.xml View File

@@ -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>

Loading…
Cancel
Save