mbenson     2005/03/02 14:43:54

  Modified:    src/main/org/apache/tools/ant DirectoryScanner.java
  Log:
  Stop scanning directories where we match the directory but know based
  on the pattern that we will never match any of its contents.
  
  Revision  Changes    Path
  1.91      +19 -5     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.90
  retrieving revision 1.91
  diff -u -r1.90 -r1.91
  --- DirectoryScanner.java     11 Feb 2005 22:49:56 -0000      1.90
  +++ DirectoryScanner.java     2 Mar 2005 22:43:54 -0000       1.91
  @@ -1117,7 +1117,7 @@
               dirsDeselected.addElement(name);
           }
           everythingIncluded &= included;
  -        if (fast && (included || couldHoldIncluded(name))) {
  +        if (fast && couldHoldIncluded(name)) {
               scandir(file, name + File.separator, fast);
           }
       }
  @@ -1156,16 +1156,30 @@
        */
       protected boolean couldHoldIncluded(String name) {
           for (int i = 0; i < includes.length; i++) {
  -            if (matchPatternStart(includes[i], name, isCaseSensitive())) {
  -                if (isMorePowerfulThanExcludes(name, includes[i])) {
  -                    return true;
  -                }
  +            if (matchPatternStart(includes[i], name, isCaseSensitive())
  +                && isMorePowerfulThanExcludes(name, includes[i])
  +                && isDeeper(includes[i], name)) {
  +                return true;
               }
           }
           return false;
       }
   
       /**
  +     * Verify that a pattern specifies files deeper
  +     * than the level of the specified file.
  +     * @param pattern the pattern to check.
  +     * @param name the name to check.
  +     * @return whether the pattern is deeper than the name.
  +     * @since Ant 1.6.3
  +     */
  +    private boolean isDeeper(String pattern, String name) {
  +        Vector p = SelectorUtils.tokenizePath(pattern);
  +        Vector n = SelectorUtils.tokenizePath(name);
  +        return p.contains("**") || p.size() > n.size();
  +    }
  +
  +    /**
        *  Find out whether one particular include pattern is more powerful
        *  than all the excludes.
        *  Note:  the power comparison is based on the length of the include 
pattern
  
  
  

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

Reply via email to