From 5ed0aeaa46b2dceb5cdab6c33609076c829e7598 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Tue, 10 Jan 2017 21:13:46 +0100 Subject: [PATCH] unxz task - PR 60350 --- build.xml | 2 +- .../taskdefs/expected/asf-logo.gif.xz | Bin 0 -> 7024 bytes .../tools/ant/taskdefs/defaults.properties | 1 + .../tools/ant/taskdefs/optional/xz/Unxz.java | 93 ++++++++++++++++++ .../taskdefs/optional/xz/unxz-test.xml | 63 ++++++++++++ .../antunit/taskdefs/optional/xz/xz-test.xml | 47 +++++++++ 6 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 src/etc/testcases/taskdefs/expected/asf-logo.gif.xz create mode 100644 src/main/org/apache/tools/ant/taskdefs/optional/xz/Unxz.java create mode 100644 src/tests/antunit/taskdefs/optional/xz/unxz-test.xml create mode 100644 src/tests/antunit/taskdefs/optional/xz/xz-test.xml diff --git a/build.xml b/build.xml index a0d4fc317..18042749c 100644 --- a/build.xml +++ b/build.xml @@ -294,7 +294,7 @@ - + diff --git a/src/etc/testcases/taskdefs/expected/asf-logo.gif.xz b/src/etc/testcases/taskdefs/expected/asf-logo.gif.xz new file mode 100644 index 0000000000000000000000000000000000000000..139eea48eeeb2c2d93603d7b7b763c46ebaf77c4 GIT binary patch literal 7024 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 O#Ao{g000001X)@z>D4>{ literal 0 HcmV?d00001 diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties index 69b29b40d..8db1ebcf4 100644 --- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties +++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties @@ -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 diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/xz/Unxz.java b/src/main/org/apache/tools/ant/taskdefs/optional/xz/Unxz.java new file mode 100644 index 000000000..a98ae6d2c --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/xz/Unxz.java @@ -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. + * + *

This implementation returns true only.

+ * @return true + */ + protected boolean supportsNonFileResources() { + return true; + } +} diff --git a/src/tests/antunit/taskdefs/optional/xz/unxz-test.xml b/src/tests/antunit/taskdefs/optional/xz/unxz-test.xml new file mode 100644 index 000000000..0cfffb4b9 --- /dev/null +++ b/src/tests/antunit/taskdefs/optional/xz/unxz-test.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/antunit/taskdefs/optional/xz/xz-test.xml b/src/tests/antunit/taskdefs/optional/xz/xz-test.xml new file mode 100644 index 000000000..585412396 --- /dev/null +++ b/src/tests/antunit/taskdefs/optional/xz/xz-test.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +