From 7411f2b4a4b6db8682244d84879344a3045347f8 Mon Sep 17 00:00:00 2001 From: Matthew Jason Benson Date: Wed, 2 Mar 2005 22:43:54 +0000 Subject: [PATCH] Stop scanning directories where we match the directory but know based on the pattern that we will never match any of its contents. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277767 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tools/ant/DirectoryScanner.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java index 75096155a..bbad912c6 100644 --- a/src/main/org/apache/tools/ant/DirectoryScanner.java +++ b/src/main/org/apache/tools/ant/DirectoryScanner.java @@ -1117,7 +1117,7 @@ public class DirectoryScanner dirsDeselected.addElement(name); } everythingIncluded &= included; - if (fast && (included || couldHoldIncluded(name))) { + if (fast && couldHoldIncluded(name)) { scandir(file, name + File.separator, fast); } } @@ -1156,15 +1156,29 @@ public class DirectoryScanner */ 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.