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]

Reply via email to