Browse Source

resource collections for [bg]unzip2?

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@329409 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 19 years ago
parent
commit
e3707fdec8
8 changed files with 137 additions and 32 deletions
  1. +17
    -3
      docs/manual/CoreTasks/unpack.html
  2. +6
    -0
      src/etc/testcases/taskdefs/bunzip2.xml
  3. +6
    -0
      src/etc/testcases/taskdefs/gunzip.xml
  4. +18
    -3
      src/main/org/apache/tools/ant/taskdefs/BUnzip2.java
  5. +18
    -3
      src/main/org/apache/tools/ant/taskdefs/GUnzip.java
  6. +50
    -10
      src/main/org/apache/tools/ant/taskdefs/Unpack.java
  7. +11
    -6
      src/testcases/org/apache/tools/ant/taskdefs/BUnzip2Test.java
  8. +11
    -7
      src/testcases/org/apache/tools/ant/taskdefs/GUnzipTest.java

+ 17
- 3
docs/manual/CoreTasks/unpack.html View File

@@ -10,13 +10,13 @@

<h2><a name="unpack">GUnzip/BUnzip2</a></h2>
<h3>Description</h3>
<p>Expands a file packed using GZip or BZip2.</p>
<p>Expands a resource packed using GZip or BZip2.</p>

<p>If <i>dest</i> is a directory the name of the destination file is
the same as <i>src</i> (with the &quot;.gz&quot; or &quot;.bz2&quot;
extension removed if present). If <i>dest</i> is omitted, the parent
dir of <i>src</i> is taken. The file is only expanded if the source
file is newer than the destination file, or when the destination file
resource is newer than the destination file, or when the destination file
does not exist.</p>

<h3>Parameters</h3>
@@ -29,7 +29,7 @@ does not exist.</p>
<tr>
<td valign="top">src</td>
<td valign="top">the file to expand.</td>
<td align="center" valign="top">Yes</td>
<td align="center" valign="top">Yes, or a nested resource collection.</td>
</tr>
<tr>
<td valign="top">dest</td>
@@ -37,6 +37,13 @@ does not exist.</p>
<td align="center" valign="top">No</td>
</tr>
</table>
<h3>Parameters specified as nested elements</h3>

<h4>any <a href="../CoreTypes/resources.html">resource</a> or single element
resource collection</h4>

<p>The specified resource will be used as src.</p>

<h3>Examples</h3>
<blockquote><pre>
&lt;gunzip src=&quot;test.tar.gz&quot;/&gt;
@@ -55,6 +62,13 @@ does not exist.</p>
</pre></blockquote>
<p>expands <i>test.tar.gz</i> to <i>subdir/test.tar</i> (assuming
subdir is a directory).</p>
<blockquote><pre>
&lt;gunzip dest=&quot;.&quot;&gt;
&lt;url url="http://example.org/archive.tar.gz"/&gt;
&lt;/gunzip&gt;
</pre></blockquote>
<p>downloads <i>http://example.org/archive.tar.gz</i> and expands it
to <i>archive.tar</i> in the project's basedir on the fly.</p>

<h3>Related tasks</h3>



+ 6
- 0
src/etc/testcases/taskdefs/bunzip2.xml View File

@@ -6,6 +6,12 @@
<bunzip2 src="expected/asf-logo-huge.tar.bz2" dest="asf-logo-huge.tar" />
</target>

<target name="realTestWithResource">
<bunzip2 dest="asf-logo-huge.tar">
<file file="expected/asf-logo-huge.tar.bz2"/>
</bunzip2>
</target>

<target name="cleanup">
<delete file="asf-logo-huge.tar" />
<delete file="expected/asf-logo-huge.tar" />


+ 6
- 0
src/etc/testcases/taskdefs/gunzip.xml View File

@@ -24,6 +24,12 @@
<gunzip src="expected/asf-logo.gif.gz" dest="asf-logo.gif" />
</target>

<target name="realTestWithResource">
<gunzip dest="asf-logo.gif">
<file file="expected/asf-logo.gif.gz"/>
</gunzip>
</target>

<target name="testDocumentationClaimsOnCopy">
<copy todir=".">
<gzipresource>


+ 18
- 3
src/main/org/apache/tools/ant/taskdefs/BUnzip2.java View File

@@ -19,9 +19,9 @@ package org.apache.tools.ant.taskdefs;


import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.bzip2.CBZip2InputStream;
@@ -58,11 +58,11 @@ public class BUnzip2 extends Unpack {

FileOutputStream out = null;
CBZip2InputStream zIn = null;
FileInputStream fis = null;
InputStream fis = null;
BufferedInputStream bis = null;
try {
out = new FileOutputStream(dest);
fis = new FileInputStream(source);
fis = srcResource.getInputStream();
bis = new BufferedInputStream(fis);
int b = bis.read();
if (b != 'B') {
@@ -90,4 +90,19 @@ public class BUnzip2 extends Unpack {
}
}
}

/**
* Whether this task can deal with non-file resources.
*
* <p>This implementation returns true only if this task is
* &lt;gunzip&gt;. Any subclass of this class that also wants to
* support non-file resources needs to override this method. We
* need to do so for backwards compatibility reasons since we
* can't expect subclasses to support resources.</p>
*
* @since Ant 1.7
*/
protected boolean supportsNonFileResources() {
return getClass().equals(BUnzip2.class);
}
}

+ 18
- 3
src/main/org/apache/tools/ant/taskdefs/GUnzip.java View File

@@ -17,9 +17,9 @@

package org.apache.tools.ant.taskdefs;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.GZIPInputStream;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.FileUtils;
@@ -56,10 +56,10 @@ public class GUnzip extends Unpack {

FileOutputStream out = null;
GZIPInputStream zIn = null;
FileInputStream fis = null;
InputStream fis = null;
try {
out = new FileOutputStream(dest);
fis = new FileInputStream(source);
fis = srcResource.getInputStream();
zIn = new GZIPInputStream(fis);
byte[] buffer = new byte[8 * 1024];
int count = 0;
@@ -77,4 +77,19 @@ public class GUnzip extends Unpack {
}
}
}

/**
* Whether this task can deal with non-file resources.
*
* <p>This implementation returns true only if this task is
* &lt;gunzip&gt;. Any subclass of this class that also wants to
* support non-file resources needs to override this method. We
* need to do so for backwards compatibility reasons since we
* can't expect subclasses to support resources.</p>
*
* @since Ant 1.7
*/
protected boolean supportsNonFileResources() {
return getClass().equals(GUnzip.class);
}
}

+ 50
- 10
src/main/org/apache/tools/ant/taskdefs/Unpack.java View File

@@ -21,6 +21,9 @@ package org.apache.tools.ant.taskdefs;
import java.io.File;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.FileResource;

/**
* Abstract Base class for unpack tasks.
@@ -32,6 +35,7 @@ public abstract class Unpack extends Task {

protected File source;
protected File dest;
protected Resource srcResource;

/**
* @deprecated setSrc(String) is deprecated and is replaced with
@@ -66,7 +70,39 @@ public abstract class Unpack extends Task {
* @param src file to expand
*/
public void setSrc(File src) {
source = src;
setSrcResource(new FileResource(src));
}

/**
* The resource to expand; required.
* @param src resource to expand
*/
public void setSrcResource(Resource src) {
if (!src.isExists()) {
throw new BuildException("the archive doesn't exist");
}
if (src.isDirectory()) {
throw new BuildException("the archive can't be a directory");
}
if (src instanceof FileResource) {
source = ((FileResource) src).getFile();
} else if (!supportsNonFileResources()) {
throw new BuildException("Only FileSystem resources are"
+ " supported.");
}
srcResource = src;
}

/**
* Set the source Archive resource.
* @param a the archive as a single element Resource collection.
*/
public void addConfigured(ResourceCollection a) {
if (a.size() != 1) {
throw new BuildException("only single argument resource collections"
+ " are supported as archives");
}
setSrcResource((Resource) a.iterator().next());
}

/**
@@ -78,18 +114,10 @@ public abstract class Unpack extends Task {
}

private void validate() throws BuildException {
if (source == null) {
if (srcResource == null) {
throw new BuildException("No Src specified", getLocation());
}

if (!source.exists()) {
throw new BuildException("Src doesn't exist", getLocation());
}

if (source.isDirectory()) {
throw new BuildException("Cannot expand a directory", getLocation());
}

if (dest == null) {
dest = new File(source.getParent());
}
@@ -140,4 +168,16 @@ public abstract class Unpack extends Task {
* This is to be overridden by subclasses.
*/
protected abstract void extract();

/**
* Whether this task can deal with non-file resources.
*
* <p>This implementation returns false.</p>
*
* @since Ant 1.7
*/
protected boolean supportsNonFileResources() {
return false;
}

}

+ 11
- 6
src/testcases/org/apache/tools/ant/taskdefs/BUnzip2Test.java View File

@@ -42,17 +42,22 @@ public class BUnzip2Test extends BuildFileTest {
executeTarget("cleanup");
}

public void testRealTest() throws IOException {
executeTarget("realTest");
public void testRealTest() throws java.io.IOException {
testRealTest("realTest");
}

public void testRealTestWithResource() throws java.io.IOException {
testRealTest("realTestWithResource");
}

private void testRealTest(String target) throws java.io.IOException {
executeTarget(target);
assertTrue("File content mismatch after bunzip2",
FILE_UTILS.contentEquals(project.resolveFile("expected/asf-logo-huge.tar"),
project.resolveFile("asf-logo-huge.tar")));
}

public void testDocumentationClaimsOnCopy() throws java.io.IOException {
executeTarget("testDocumentationClaimsOnCopy");
assertTrue("File content mismatch after bunzip2",
FILE_UTILS.contentEquals(project.resolveFile("expected/asf-logo-huge.tar"),
project.resolveFile("asf-logo-huge.tar")));
testRealTest("testDocumentationClaimsOnCopy");
}
}

+ 11
- 7
src/testcases/org/apache/tools/ant/taskdefs/GUnzipTest.java View File

@@ -47,20 +47,24 @@ public class GUnzipTest extends BuildFileTest {
}

public void testRealTest() throws java.io.IOException {
executeTarget("realTest");
testRealTest("realTest");
}

public void testRealTestWithResource() throws java.io.IOException {
testRealTest("realTestWithResource");
}

private void testRealTest(String target) throws java.io.IOException {
executeTarget(target);
assertTrue(FILE_UTILS.contentEquals(project.resolveFile("../asf-logo.gif"),
project.resolveFile("asf-logo.gif")));
}

public void testTestGzipTask() throws java.io.IOException {
executeTarget("testGzipTask");
assertTrue(FILE_UTILS.contentEquals(project.resolveFile("../asf-logo.gif"),
project.resolveFile("asf-logo.gif")));
testRealTest("testGzipTask");
}

public void testDocumentationClaimsOnCopy() throws java.io.IOException {
executeTarget("testDocumentationClaimsOnCopy");
assertTrue(FILE_UTILS.contentEquals(project.resolveFile("../asf-logo.gif"),
project.resolveFile("asf-logo.gif")));
testRealTest("testDocumentationClaimsOnCopy");
}
}

Loading…
Cancel
Save