diff options
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java | 8 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java | 8 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java index 7e80689b72..66b2bce9b7 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java @@ -44,6 +44,12 @@ public final class GlobFunction implements SkyFunction { private final Cache<String, Pattern> regexPatternCache = CacheBuilder.newBuilder().concurrencyLevel(4).build(); + private final boolean alwaysUseDirListing; + + public GlobFunction(boolean alwaysUseDirListing) { + this.alwaysUseDirListing = alwaysUseDirListing; + } + @Override public SkyValue compute(SkyKey skyKey, Environment env) throws GlobFunctionException { GlobDescriptor glob = (GlobDescriptor) skyKey.argument(); @@ -110,7 +116,7 @@ public final class GlobFunction implements SkyFunction { PathFragment dirPathFragment = glob.getPackageId().getPackageFragment().getRelative(globSubdir); RootedPath dirRootedPath = RootedPath.toRootedPath(globPkgLookupValue.getRoot(), dirPathFragment); - if (containsGlobs(patternHead)) { + if (alwaysUseDirListing || containsGlobs(patternHead)) { // Pattern contains globs, so a directory listing is required. // // Note that we have good reason to believe the directory exists: if this is the diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 2428c02757..55566ba6af 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -305,7 +305,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { pkgLocator, packageManager, ruleClassProvider)); map.put(SkyFunctions.SKYLARK_IMPORTS_LOOKUP, new SkylarkImportLookupFunction( ruleClassProvider, pkgFactory)); - map.put(SkyFunctions.GLOB, new GlobFunction()); + map.put(SkyFunctions.GLOB, newGlobFunction()); map.put(SkyFunctions.TARGET_PATTERN, new TargetPatternFunction(pkgLocator)); map.put(SkyFunctions.PREPARE_DEPS_OF_PATTERNS, new PrepareDepsOfPatternsFunction()); map.put(SkyFunctions.PREPARE_DEPS_OF_PATTERN, new PrepareDepsOfPatternFunction(pkgLocator)); @@ -349,7 +349,11 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { return map.build(); } - @ThreadCompatible + protected SkyFunction newGlobFunction() { + return new GlobFunction(/*alwaysUseDirListing=*/false); + } + + @ThreadCompatible public void setActive(boolean active) { this.active = active; } |