aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java8
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;
}