bodewig 2003/07/23 00:50:25 Modified: src/main/org/apache/tools/ant DirectoryScanner.java Log: Avoid double scanning of directories Revision Changes Path 1.54 +37 -1 ant/src/main/org/apache/tools/ant/DirectoryScanner.java Index: DirectoryScanner.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/DirectoryScanner.java,v retrieving revision 1.53 retrieving revision 1.54 diff -u -r1.53 -r1.54 --- DirectoryScanner.java 23 Jul 2003 07:28:01 -0000 1.53 +++ DirectoryScanner.java 23 Jul 2003 07:50:25 -0000 1.54 @@ -58,8 +58,10 @@ import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; +import java.util.HashSet; import java.util.Hashtable; import java.util.Map; +import java.util.Set; import java.util.Vector; import org.apache.tools.ant.types.Resource; @@ -777,7 +779,7 @@ } } } - fileListMap.clear(); + clearCaches(); } /** @@ -837,6 +839,11 @@ * @see #slowScan */ protected void scandir(File dir, String vpath, boolean fast) { + // avoid double scanning of directories, can only happen in fast mode + if (fast && hasBeenScanned(vpath)) { + return; + } + String[] newfiles = dir.list(); if (newfiles == null) { @@ -1354,5 +1361,34 @@ } } return false; + } + + /** + * List of all scanned directories. + * + * @since Ant 1.6 + */ + private Set scannedDirs = new HashSet(); + + /** + * Has the directorty with the given path relative to the base + * directory allready been scanned? + * + * <p>Registers the given directory as scanned as a side effect.</p> + * + * @since Ant 1.6 + */ + private boolean hasBeenScanned(String vpath) { + return !scannedDirs.add(vpath); + } + + /** + * Clear internal caches. + * + * @since Ant 1.6 + */ + private void clearCaches() { + fileListMap.clear(); + scannedDirs.clear(); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]