Author: peterreilly
Date: Wed Sep  6 14:19:42 2006
New Revision: 440876

URL: http://svn.apache.org/viewvc?view=rev&rev=440876
Log:
Bugzilla 39549: add searchparents attribute to <available>

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/docs/manual/CoreTasks/available.html
    ant/core/trunk/src/etc/testcases/taskdefs/available.xml
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Available.java
    
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java

Modified: ant/core/trunk/WHATSNEW
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=440876&r1=440875&r2=440876
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Wed Sep  6 14:19:42 2006
@@ -32,6 +32,7 @@
   Bugzilla report 35619.
 * Made PatterSet#hasPatterns public to allow custom filesets access.
   Bugzilla report 36772.
+* added searchparents attribute to <available>. Bugzilla report 39549.
 
 Changes from Ant 1.6.5 to Ant 1.7.0Beta1
 ========================================

Modified: ant/core/trunk/docs/manual/CoreTasks/available.html
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/CoreTasks/available.html?view=diff&rev=440876&r1=440875&r2=440876
==============================================================================
--- ant/core/trunk/docs/manual/CoreTasks/available.html (original)
+++ ant/core/trunk/docs/manual/CoreTasks/available.html Wed Sep  6 14:19:42 2006
@@ -75,7 +75,19 @@
       classpath.  Only affects the "classname" attribute.  Defaults to 
&quot;false&quot;</td>
     <td align="center" valign="top">No</td>
   </tr>
-
+  <tr>
+    <td valign="top">searchparents</td>
+    <td valign="top">This contains the behaviour of the "file" type.
+      If true, the available task will, when
+      searching for a file, search not only the directories specified but
+      will also search the parent and grandparent directories of those
+      specified.
+      If false, only the directories specified will be searched.
+      Defaults to "true".
+      <em>Since Ant 1.7</em>
+    </td>
+    <td align="center" valign="top">No</td>
+  </tr>
 </table>
 <h3>Parameters specified as nested elements</h3>
 <h4>classpath</h4>

Modified: ant/core/trunk/src/etc/testcases/taskdefs/available.xml
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/etc/testcases/taskdefs/available.xml?view=diff&rev=440876&r1=440875&r2=440876
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/available.xml (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/available.xml Wed Sep  6 14:19:42 
2006
@@ -2,6 +2,10 @@
 
 <project name="available-test" basedir="." default="test1">
 
+  <target name="tearDown">
+    <delete dir="greatgrandparent"/>
+  </target>
+
   <target name="test1">
     <available/>
   </target>
@@ -162,4 +166,91 @@
     </fail>
   </target>
 
+  <target name="prep.parents">
+    <delete quiet="yes" dir="greatgrandparent"/>
+    <mkdir  dir="greatgrandparent/grandparent/parent/dir"/>
+    <touch  file="greatgrandparent/a.txt"/>
+    <touch  file="greatgrandparent/grandparent/b.txt"/>
+    <touch  file="greatgrandparent/grandparent/parent/c.txt"/>
+    <touch  file="greatgrandparent/grandparent/parent/dir/d.txt"/>
+    <property name="available.test.dir"
+              value="greatgrandparent/grandparent/parent/dir"/>
+  </target>
+  <target name="search-parents" depends="prep.parents">
+    <echo>testing greatgrandparent - should not see</echo>
+
+    <fail>
+      <condition>
+        <available file="a.txt">
+          <filepath path="${available.test.dir}"/>
+        </available>
+      </condition>
+    </fail>
+
+    <echo>testing grandparent - should see</echo>
+    <fail>
+      <condition>
+        <not>
+          <available file="b.txt">
+            <filepath path="${available.test.dir}"/>
+          </available>
+        </not>
+      </condition>
+    </fail>
+
+    <echo>testing parent - should see</echo>
+    <fail>
+      <condition>
+        <not>
+          <available file="c.txt">
+            <filepath path="${available.test.dir}"/>
+          </available>
+        </not>
+      </condition>
+    </fail>
+
+    <echo>testing dir - should see</echo>
+    <fail>
+      <condition>
+        <not>
+          <available file="d.txt">
+            <filepath path="${available.test.dir}"/>
+          </available>
+        </not>
+      </condition>
+    </fail>
+
+  </target>
+
+  <target name="search-parents-not" depends="prep.parents">
+    <echo>testing grandparent - should not see</echo>
+    <fail>
+      <condition>
+        <available file="b.txt" searchParents="no">
+          <filepath path="${available.test.dir}"/>
+        </available>
+      </condition>
+    </fail>
+
+    <echo>testing parent - should not see</echo>
+    <fail>
+      <condition>
+        <available file="c.txt" searchParents="false">
+          <filepath path="${available.test.dir}"/>
+        </available>
+      </condition>
+    </fail>
+
+    <echo>testing dir - should see</echo>
+    <fail>
+      <condition>
+        <not>
+          <available file="d.txt" searchParents="false">
+            <filepath path="${available.test.dir}"/>
+          </available>
+        </not>
+      </condition>
+    </fail>
+
+  </target>
 </project>

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Available.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Available.java?view=diff&rev=440876&r1=440875&r2=440876
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Available.java 
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Available.java Wed 
Sep  6 14:19:42 2006
@@ -53,6 +53,19 @@
     private String value = "true";
     private boolean isTask = false;
     private boolean ignoreSystemclasses = false;
+    private boolean searchParents   = true;
+
+    /**
+     * Set the searchParents attribute.
+     * This controls the behaviour of the the "file" type.
+     * If true, the path, parent path and grandparent path are
+     * searched for the file. If false, only the path is seached.
+     * The default value is true.
+     * @param searchParents the value to set.
+     */
+    public void setSearchParents(boolean  searchParents) {
+        this.searchParents = searchParents;
+    }
 
     /**
      * Set the classpath to be used when searching for classes and resources.
@@ -353,14 +366,14 @@
                     }
                 }
                 // **   simple name specified   == parent dir + name
-                if (parent != null && parent.exists()) {
+                if (parent != null && parent.exists() && searchParents) {
                     if (checkFile(new File(parent, filename),
                                   filename + " in " + parent)) {
                         return true;
                     }
                 }
                 // **   simple name specified   == parent of parent dir + name
-                if (parent != null) {
+                if (parent != null && searchParents) {
                     File grandParent = parent.getParentFile();
                     if (grandParent != null && grandParent.exists()) {
                         if (checkFile(new File(grandParent, filename),

Modified: 
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java?view=diff&rev=440876&r1=440875&r2=440876
==============================================================================
--- 
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java 
(original)
+++ 
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java 
Wed Sep  6 14:19:42 2006
@@ -201,4 +201,13 @@
     public void testDoubleBasedir() {
         executeTarget("testDoubleBasedir");
     }
+
+    // test for searching parents
+    public void testSearchParents() {
+        executeTarget("search-parents");
+    }
+    // test for not searching parents
+    public void testSearchParentsNot() {
+        executeTarget("search-parents-not");
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to