git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274060 13f79535-47bb-0310-9956-ffa450edef68master
@@ -58,6 +58,7 @@ import java.io.File; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.util.Vector; | import java.util.Vector; | ||||
import org.apache.tools.ant.types.Resource; | import org.apache.tools.ant.types.Resource; | ||||
import org.apache.tools.ant.types.ResourceFactory; | |||||
import org.apache.tools.ant.types.selectors.FileSelector; | import org.apache.tools.ant.types.selectors.FileSelector; | ||||
import org.apache.tools.ant.types.selectors.SelectorScanner; | import org.apache.tools.ant.types.selectors.SelectorScanner; | ||||
import org.apache.tools.ant.types.selectors.SelectorUtils; | import org.apache.tools.ant.types.selectors.SelectorUtils; | ||||
@@ -151,7 +152,7 @@ import org.apache.tools.ant.util.FileUtils; | |||||
* @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> | * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> | ||||
* @author <a href="mailto:levylambert@tiscali-dsl.de">Antoine Levy-Lambert</a> | * @author <a href="mailto:levylambert@tiscali-dsl.de">Antoine Levy-Lambert</a> | ||||
*/ | */ | ||||
public class DirectoryScanner implements ResourceScanner, SelectorScanner { | |||||
public class DirectoryScanner implements FileScanner, SelectorScanner, ResourceFactory { | |||||
/** | /** | ||||
* Patterns which should be excluded by default. | * Patterns which should be excluded by default. | ||||
@@ -810,27 +811,6 @@ public class DirectoryScanner implements ResourceScanner, SelectorScanner { | |||||
return files; | return files; | ||||
} | } | ||||
/** | |||||
* Returns the resources of the files which matched at least one | |||||
* of the include patterns and none of the exclude patterns. The | |||||
* names are relative to the base directory. | |||||
* | |||||
* @return resource information for the files which matched at | |||||
* least one of the include patterns and none of the exclude | |||||
* patterns. | |||||
* | |||||
* @since Ant 1.5.2 | |||||
*/ | |||||
public Resource[] getIncludedFileResources() { | |||||
String[] names = getIncludedFiles(); | |||||
int count = names.length; | |||||
Resource[] resources = new Resource[count]; | |||||
for (int i = 0; i < count; i++) { | |||||
resources[i] = getResource(names[i]); | |||||
} | |||||
return resources; | |||||
} | |||||
/** | /** | ||||
* Returns the names of the files which matched none of the include | * Returns the names of the files which matched none of the include | ||||
* patterns. The names are relative to the base directory. This involves | * patterns. The names are relative to the base directory. This involves | ||||
@@ -898,26 +878,6 @@ public class DirectoryScanner implements ResourceScanner, SelectorScanner { | |||||
return directories; | return directories; | ||||
} | } | ||||
/** | |||||
* Returns the resource object for the directories which matched | |||||
* at least one of the include patterns and none of the exclude | |||||
* patterns. The names are relative to the base directory. | |||||
* | |||||
* @return the names of the directories which matched at least one of the | |||||
* include patterns and none of the exclude patterns. | |||||
* | |||||
* @since Ant 1.5.2 | |||||
*/ | |||||
public Resource[] getIncludedDirectoryResources() { | |||||
String[] names = getIncludedDirectories(); | |||||
int count = names.length; | |||||
Resource[] resources = new Resource[count]; | |||||
for (int i = 0; i < count; i++) { | |||||
resources[i] = getResource(names[i]); | |||||
} | |||||
return resources; | |||||
} | |||||
/** | /** | ||||
* Returns the names of the directories which matched none of the include | * Returns the names of the directories which matched none of the include | ||||
* patterns. The names are relative to the base directory. This involves | * patterns. The names are relative to the base directory. This involves | ||||
@@ -994,12 +954,7 @@ public class DirectoryScanner implements ResourceScanner, SelectorScanner { | |||||
* @since Ant 1.5.2 | * @since Ant 1.5.2 | ||||
*/ | */ | ||||
public Resource getResource(String name) { | public Resource getResource(String name) { | ||||
File f = null; | |||||
if (basedir != null) { | |||||
f = new File(basedir, name); | |||||
} else { | |||||
f = new File(name); | |||||
} | |||||
File f = fileUtils.resolveFile(basedir, name); | |||||
return new Resource(name, f.exists(), f.lastModified(), | return new Resource(name, f.exists(), f.lastModified(), | ||||
f.isDirectory()); | f.isDirectory()); | ||||
} | } | ||||
@@ -1,85 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "Ant" and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant; | |||||
import org.apache.tools.ant.types.Resource; | |||||
import org.apache.tools.ant.types.ResourceFactory; | |||||
/** | |||||
* Extends the FileScanner concept to {@link | |||||
* org.apache.tools.ant.types.Resource Resources}. | |||||
* | |||||
* @since Ant 1.5.2 | |||||
*/ | |||||
public interface ResourceScanner extends FileScanner, ResourceFactory { | |||||
/** | |||||
* Returns resources for the directories which matched at least | |||||
* one of the include patterns and none of the exclude patterns. | |||||
* | |||||
* @return resources for the directories which matched at least | |||||
* one of the include patterns and none of the exclude patterns. | |||||
*/ | |||||
Resource[] getIncludedDirectoryResources(); | |||||
/** | |||||
* Returns resources for the files which matched at least one of | |||||
* the include patterns and none of the exclude patterns. | |||||
* | |||||
* @return the names of the files which matched at least one of the | |||||
* include patterns and none of the exclude patterns. | |||||
*/ | |||||
Resource[] getIncludedFileResources(); | |||||
} |
@@ -70,7 +70,6 @@ import java.util.zip.ZipEntry; | |||||
import java.util.zip.ZipFile; | import java.util.zip.ZipFile; | ||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.ResourceScanner; | |||||
import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
import org.apache.tools.ant.types.Resource; | import org.apache.tools.ant.types.Resource; | ||||
@@ -73,7 +73,6 @@ import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.DirectoryScanner; | import org.apache.tools.ant.DirectoryScanner; | ||||
import org.apache.tools.ant.FileScanner; | import org.apache.tools.ant.FileScanner; | ||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.ResourceScanner; | |||||
import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
import org.apache.tools.ant.types.PatternSet; | import org.apache.tools.ant.types.PatternSet; | ||||
@@ -441,10 +440,15 @@ public class Zip extends MatchingTask { | |||||
PatternSet.NameEntry ne = oldFiles.createExclude(); | PatternSet.NameEntry ne = oldFiles.createExclude(); | ||||
ne.setName((String) addedFiles.elementAt(i)); | ne.setName((String) addedFiles.elementAt(i)); | ||||
} | } | ||||
addResources(oldFiles, | |||||
oldFiles.getDirectoryScanner(getProject()) | |||||
.getIncludedFileResources(), | |||||
zOut); | |||||
DirectoryScanner ds = | |||||
oldFiles.getDirectoryScanner(getProject()); | |||||
String[] f = ds.getIncludedFiles(); | |||||
Resource[] r = new Resource[f.length]; | |||||
for (int i = 0; i < f.length; i++) { | |||||
r[i] = ds.getResource(f[i]); | |||||
} | |||||
addResources(oldFiles, r, zOut); | |||||
} | } | ||||
finalizeZipOutputStream(zOut); | finalizeZipOutputStream(zOut); | ||||
@@ -801,13 +805,20 @@ public class Zip extends MatchingTask { | |||||
protected Resource[][] grabResources(FileSet[] filesets) { | protected Resource[][] grabResources(FileSet[] filesets) { | ||||
Resource[][] result = new Resource[filesets.length][]; | Resource[][] result = new Resource[filesets.length][]; | ||||
for (int i = 0; i < filesets.length; i++) { | for (int i = 0; i < filesets.length; i++) { | ||||
ResourceScanner rs = filesets[i].getDirectoryScanner(getProject()); | |||||
Resource[] files = rs.getIncludedFileResources(); | |||||
Resource[] directories = rs.getIncludedDirectoryResources(); | |||||
result[i] = new Resource[files.length + directories.length]; | |||||
System.arraycopy(directories, 0, result[i], 0, directories.length); | |||||
System.arraycopy(files, 0, result[i], directories.length, | |||||
files.length); | |||||
DirectoryScanner rs = | |||||
filesets[i].getDirectoryScanner(getProject()); | |||||
Vector resources = new Vector(); | |||||
String[] directories = rs.getIncludedDirectories(); | |||||
for (int j = 0; j < directories.length; j++) { | |||||
resources.add(rs.getResource(directories[j])); | |||||
} | |||||
String[] files = rs.getIncludedFiles(); | |||||
for (int j = 0; j < files.length; j++) { | |||||
resources.add(rs.getResource(files[j])); | |||||
} | |||||
result[i] = new Resource[resources.size()]; | |||||
resources.copyInto(result[i]); | |||||
} | } | ||||
return result; | return result; | ||||
} | } | ||||
@@ -201,66 +201,6 @@ public class ZipScanner extends DirectoryScanner { | |||||
return isIncluded(vpath) && !isExcluded(vpath); | return isIncluded(vpath) && !isExcluded(vpath); | ||||
} | } | ||||
/** | |||||
* Returns the resources of the files which matched at least one of the | |||||
* include patterns and none of the exclude patterns. | |||||
* The names are relative to the base directory. | |||||
* | |||||
* @return resource information for the files which matched at | |||||
* least one of the include patterns and none of the exclude | |||||
* patterns. | |||||
* | |||||
* @since Ant 1.5.2 | |||||
*/ | |||||
public Resource[] getIncludedFileResources() { | |||||
if (srcFile != null) { | |||||
Vector myvector = new Vector(); | |||||
// first check if the archive needs to be scanned again | |||||
scanme(); | |||||
for (Enumeration e = myentries.elements(); e.hasMoreElements() ;) { | |||||
Resource myresource= (Resource) e.nextElement(); | |||||
if (!myresource.isDirectory() && match(myresource.getName())) { | |||||
myvector.addElement(myresource.clone()); | |||||
} | |||||
} | |||||
Resource[] resources = new Resource[myvector.size()]; | |||||
myvector.copyInto(resources); | |||||
return resources; | |||||
} else { | |||||
return super.getIncludedFileResources(); | |||||
} | |||||
} | |||||
/** | |||||
* Returns the resources of the files which matched at least one of the | |||||
* include patterns and none of the exclude patterns. | |||||
* The names are relative to the base directory. | |||||
* | |||||
* @return resource information for the files which matched at | |||||
* least one of the include patterns and none of the exclude | |||||
* patterns. | |||||
* | |||||
* @since Ant 1.5.2 | |||||
*/ | |||||
public Resource[] getIncludedDirectoryResources() { | |||||
if (srcFile != null) { | |||||
Vector myvector = new Vector(); | |||||
// first check if the archive needs to be scanned again | |||||
scanme(); | |||||
for (Enumeration e = myentries.elements(); e.hasMoreElements() ;) { | |||||
Resource myresource= (Resource) e.nextElement(); | |||||
if (myresource.isDirectory() && match(myresource.getName())) { | |||||
myvector.addElement(myresource.clone()); | |||||
} | |||||
} | |||||
Resource[] resources = new Resource[myvector.size()]; | |||||
myvector.copyInto(resources); | |||||
return resources; | |||||
} else { | |||||
return super.getIncludedDirectoryResources(); | |||||
} | |||||
} | |||||
/** | /** | ||||
* @param name path name of the file sought in the archive | * @param name path name of the file sought in the archive | ||||
* | * | ||||
@@ -187,20 +187,6 @@ public class DirectoryScannerTest extends TestCase { | |||||
assertTrue("(1) zip package included", haveZipPackage); | assertTrue("(1) zip package included", haveZipPackage); | ||||
assertTrue("(1) taskdefs package not included", !haveTaskdefsPackage); | assertTrue("(1) taskdefs package not included", !haveTaskdefsPackage); | ||||
haveZipPackage = false; | |||||
Resource[] includedResources = ds.getIncludedDirectoryResources(); | |||||
for (int i=0; i<includedResources.length; i++) { | |||||
if (includedResources[i].getName().equals("zip")) { | |||||
haveZipPackage = true; | |||||
} else if (includedResources[i].getName().equals("ant" | |||||
+ File.separator | |||||
+ "taskdefs")) { | |||||
haveTaskdefsPackage = true; | |||||
} | |||||
} | |||||
assertTrue("(1b) zip package included", haveZipPackage); | |||||
assertTrue("(1b) taskdefs package not included", !haveTaskdefsPackage); | |||||
ds = new DirectoryScanner(); | ds = new DirectoryScanner(); | ||||
ds.setBasedir(dir); | ds.setBasedir(dir); | ||||
ds.setExcludes(new String[] {"ant"}); | ds.setExcludes(new String[] {"ant"}); | ||||
@@ -216,22 +202,6 @@ public class DirectoryScannerTest extends TestCase { | |||||
} | } | ||||
assertTrue("(2) zip package included", haveZipPackage); | assertTrue("(2) zip package included", haveZipPackage); | ||||
assertTrue("(2) taskdefs package included", haveTaskdefsPackage); | assertTrue("(2) taskdefs package included", haveTaskdefsPackage); | ||||
haveZipPackage = false; | |||||
haveTaskdefsPackage = false; | |||||
includedResources = ds.getIncludedDirectoryResources(); | |||||
for (int i=0; i<includedResources.length; i++) { | |||||
if (includedResources[i].getName().equals("zip")) { | |||||
haveZipPackage = true; | |||||
} else if (includedResources[i].getName().equals("ant" | |||||
+ File.separator | |||||
+ "taskdefs")) { | |||||
haveTaskdefsPackage = true; | |||||
} | |||||
} | |||||
assertTrue("(2b) zip package included", haveZipPackage); | |||||
assertTrue("(2b) taskdefs package included", haveTaskdefsPackage); | |||||
} | } | ||||
} | } |