mbenson 2005/01/26 13:20:30
Modified: src/main/org/apache/tools/ant/taskdefs Tag: ANT_16_BRANCH
Available.java
src/etc/testcases/taskdefs Tag: ANT_16_BRANCH available.xml
src/testcases/org/apache/tools/ant/taskdefs Tag:
ANT_16_BRANCH AvailableTest.java
Log:
<available> returned false positives when checking a file
passed in with the current basedir leading twice:
e.g. ${basedir}${file.separator}${basedir}${file.separator}foo .
Revision Changes Path
No revision
No revision
1.57.2.5 +27 -35 ant/src/main/org/apache/tools/ant/taskdefs/Available.java
Index: Available.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Available.java,v
retrieving revision 1.57.2.4
retrieving revision 1.57.2.5
diff -u -r1.57.2.4 -r1.57.2.5
--- Available.java 9 Mar 2004 17:01:32 -0000 1.57.2.4
+++ Available.java 26 Jan 2005 21:19:51 -0000 1.57.2.5
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2004 The Apache Software Foundation
+ * Copyright 2000-2005 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -38,10 +38,12 @@
* @ant.task category="control"
*/
public class Available extends Task implements Condition {
+ private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
private String property;
private String classname;
- private String file;
+ private String filename;
+ private File file;
private Path filepath;
private String resource;
private FileDir type;
@@ -143,8 +145,8 @@
* @param file the name of the file which is required.
*/
public void setFile(File file) {
- this.file = FileUtils.newFileUtils()
- .removeLeadingPath(getProject().getBaseDir(), file);
+ this.file = file;
+ this.filename =
FILE_UTILS.removeLeadingPath(getProject().getBaseDir(), file);
}
/**
@@ -165,7 +167,8 @@
*/
public void setType(String type) {
log("DEPRECATED - The setType(String) method has been deprecated."
- + " Use setType(Available.FileDir) instead.");
+ + " Use setType(Available.FileDir) instead.",
+ Project.MSG_WARN);
this.type = new FileDir();
this.type.setValue(type);
}
@@ -211,8 +214,11 @@
+ " property."
+ StringUtils.LINE_SEP
+ " Build file should not reuse the same property"
- + " name for different values.");
+ + " name for different values.",
+ Project.MSG_WARN);
}
+ // NB: this makes use of Project#setProperty rather than
Project#setNewProperty
+ // due to backwards compatiblity reasons
getProject().setProperty(property, value);
}
} finally {
@@ -231,7 +237,6 @@
throw new BuildException("At least one of (classname|file|"
+ "resource) is required",
getLocation());
}
-
if (type != null) {
if (file == null) {
throw new BuildException("The type attribute is only valid "
@@ -239,50 +244,42 @@
+ "attribute.", getLocation());
}
}
-
if (classpath != null) {
classpath.setProject(getProject());
this.loader = getProject().createClassLoader(classpath);
}
-
String appendix = "";
if (isTask) {
appendix = " to set property " + property;
} else {
setTaskName("available");
}
-
if ((classname != null) && !checkClass(classname)) {
log("Unable to load class " + classname + appendix,
Project.MSG_VERBOSE);
return false;
}
-
if ((file != null) && !checkFile()) {
+ StringBuffer buf = new StringBuffer("Unable to find ");
if (type != null) {
- log("Unable to find " + type + " " + file + appendix,
- Project.MSG_VERBOSE);
- } else {
- log("Unable to find " + file + appendix,
Project.MSG_VERBOSE);
+ buf.append(type).append(' ');
}
+ buf.append(filename).append(appendix);
+ log(buf.toString(), Project.MSG_VERBOSE);
return false;
}
-
if ((resource != null) && !checkResource(resource)) {
log("Unable to load resource " + resource + appendix,
Project.MSG_VERBOSE);
return false;
}
-
if (loader != null) {
loader.cleanup();
loader = null;
}
-
if (!isTask) {
setTaskName(null);
}
-
return true;
}
@@ -304,7 +301,7 @@
*/
private boolean checkFile() {
if (filepath == null) {
- return checkFile(getProject().resolveFile(file), file);
+ return checkFile(file, filename);
} else {
String[] paths = filepath.list();
for (int i = 0; i < paths.length; ++i) {
@@ -313,7 +310,7 @@
// ** full-pathname specified == path in list
// ** simple name specified == path in list
- if (path.exists() && file.equals(paths[i])) {
+ if (path.exists() && filename.equals(paths[i])) {
if (type == null) {
log("Found: " + path, Project.MSG_VERBOSE);
return true;
@@ -329,12 +326,10 @@
// not the requested type
return false;
}
-
- FileUtils fileUtils = FileUtils.newFileUtils();
- File parent = fileUtils.getParentFile(path);
+ File parent = path.getParentFile();
// ** full-pathname specified == parent dir of path in list
if (parent != null && parent.exists()
- && file.equals(parent.getAbsolutePath())) {
+ && filename.equals(parent.getAbsolutePath())) {
if (type == null) {
log("Found: " + parent, Project.MSG_VERBOSE);
return true;
@@ -345,29 +340,26 @@
// not the requested type
return false;
}
-
// ** simple name specified == path in list + name
if (path.exists() && path.isDirectory()) {
- if (checkFile(new File(path, file),
- file + " in " + path)) {
+ if (checkFile(new File(path, filename),
+ filename + " in " + path)) {
return true;
}
}
-
// ** simple name specified == parent dir + name
if (parent != null && parent.exists()) {
- if (checkFile(new File(parent, file),
- file + " in " + parent)) {
+ if (checkFile(new File(parent, filename),
+ filename + " in " + parent)) {
return true;
}
}
-
// ** simple name specified == parent of parent dir +
name
if (parent != null) {
- File grandParent = fileUtils.getParentFile(parent);
+ File grandParent = parent.getParentFile();
if (grandParent != null && grandParent.exists()) {
- if (checkFile(new File(grandParent, file),
- file + " in " + grandParent)) {
+ if (checkFile(new File(grandParent, filename),
+ filename + " in " + grandParent)) {
return true;
}
}
No revision
No revision
1.11.2.2 +10 -0 ant/src/etc/testcases/taskdefs/available.xml
Index: available.xml
===================================================================
RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/available.xml,v
retrieving revision 1.11.2.1
retrieving revision 1.11.2.2
diff -u -r1.11.2.1 -r1.11.2.2
--- available.xml 22 Oct 2003 13:27:37 -0000 1.11.2.1
+++ available.xml 26 Jan 2005 21:20:28 -0000 1.11.2.2
@@ -152,4 +152,14 @@
<available file="pvcs.xml" filepath="..:optional"
property="test" />
</target>
+
+ <target name="testDoubleBasedir">
+ <echo>testing ${basedir}${file.separator}${ant.file}</echo>
+ <fail>
+ <condition>
+ <available file="${basedir}${file.separator}${ant.file}" />
+ </condition>
+ </fail>
+ </target>
+
</project>
No revision
No revision
1.12.2.5 +12 -6
ant/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java
Index: AvailableTest.java
===================================================================
RCS file:
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java,v
retrieving revision 1.12.2.4
retrieving revision 1.12.2.5
diff -u -r1.12.2.4 -r1.12.2.5
--- AvailableTest.java 9 Mar 2004 17:02:01 -0000 1.12.2.4
+++ AvailableTest.java 26 Jan 2005 21:20:28 -0000 1.12.2.5
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2002,2004 The Apache Software Foundation
+ * Copyright 2000-2002, 2004-2005 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@
import org.apache.tools.ant.util.JavaEnvUtils;
/**
+ * JUnit test for the Available task/condition.
*/
public class AvailableTest extends BuildFileTest {
@@ -164,25 +165,25 @@
// Core class that exists in system classpath is ignored, but found in
specified classpath
public void test21() {
executeTarget("test21");
- assertEquals("true",project.getProperty("test"));
+ assertEquals("true", project.getProperty("test"));
}
// Core class that exists in system classpath is not ignored with
ignoresystemclass="false"
public void test22() {
executeTarget("test22");
- assertEquals("true",project.getProperty("test"));
+ assertEquals("true", project.getProperty("test"));
}
// Core class that exists in system classpath is not ignored with
default ignoresystemclasses value
public void test23() {
executeTarget("test23");
- assertEquals("true",project.getProperty("test"));
+ assertEquals("true", project.getProperty("test"));
}
// Class is found in specified classpath
public void test24() {
executeTarget("test24");
- assertEquals("true",project.getProperty("test"));
+ assertEquals("true", project.getProperty("test"));
}
// File is not found in specified filepath
@@ -194,6 +195,11 @@
// File is not found in specified filepath
public void testSearchInPathIsThere() {
executeTarget("searchInPathIsThere");
- assertEquals("true",project.getProperty("test"));
+ assertEquals("true", project.getProperty("test"));
+ }
+
+ // test when file begins with basedir twice
+ public void testDoubleBasedir() {
+ executeTarget("testDoubleBasedir");
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]