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]