From 86c319e313529b52da0f0fc6062c27a7e75afe5b Mon Sep 17 00:00:00 2001 From: Nathan Harmata Date: Thu, 25 Feb 2016 01:12:22 +0000 Subject: Update the glob documentation to reflect a semantic change made a very long time ago where glob(['**'], exclude_directories = 0) doesn't match the package's directory. Also add tests for this behavior. Also update Skyframe globbing to have these semantics. Any discrepancy has always been problematic, but now that we have Skyframe-hybrid globbing it's a lot more dangerous and consequential. Alternatives considered: do this the other way around (keep the stale documentation as-is and instead update legacy globbing). This would potentially require changing existing usages from stuff like 'data = glob(["**"], exclude_directories = 0)' to 'data = [x for x in glob(["**"], exclude_directories = 0) where x != '']'. I think this is too messy, so long as there is a valid use-case for globs matching directories in the first place. -- MOS_MIGRATED_REVID=115511504 --- src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java') 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 e1c877f455..e233cdfdd5 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 @@ -90,7 +90,8 @@ public final class GlobFunction implements SkyFunction { // "**" also matches an empty segment, so try the case where it is not present. if ("**".equals(patternHead)) { if (patternTail == null) { - if (!glob.excludeDirs()) { + // Recursive globs aren't supposed to match the package's directory. + if (!glob.excludeDirs() && !globSubdir.equals(PathFragment.EMPTY_FRAGMENT)) { matches.add(globSubdir); } } else { -- cgit v1.2.3