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]