Add a new flag to disable glob tracking: --incompatible_disable_glob_tracking RELNOTES: None. PiperOrigin-RevId: 178760403
diff --git a/site/docs/skylark/backward-compatibility.md b/site/docs/skylark/backward-compatibility.md index cce1c31..b123bc9 100644 --- a/site/docs/skylark/backward-compatibility.md +++ b/site/docs/skylark/backward-compatibility.md
@@ -293,5 +293,12 @@ * Flag: `--incompatible_checked_arithmetic` * Default: `true` +### Glob tracking + +When set, glob tracking is disabled. This is a legacy feature that we expect has +no user-visible impact. + +* Flag: `--incompatible_disable_glob_tracking` +* Default: `false` <!-- Add new options here -->
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java index b03af4f..f7c28c8 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -588,7 +588,12 @@ } GlobList<String> globList = GlobList.captureResults(includes, excludes, matches); - return MutableList.copyOf(env, globList); + if (env.getSemantics().incompatibleDisableGlobTracking()) { + // Converting to ImmutableList will remove glob information from the list. + return MutableList.copyOf(env, ImmutableList.copyOf(globList)); + } else { + return MutableList.copyOf(env, globList); + } } /**
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java index f0ad5bb..29b3b5d 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java
@@ -46,6 +46,7 @@ codedOut.writeBoolNoTag(semantics.incompatibleDepsetIsNotIterable()); codedOut.writeBoolNoTag(semantics.incompatibleDepsetUnion()); codedOut.writeBoolNoTag(semantics.incompatibleDictLiteralHasNoDuplicates()); + codedOut.writeBoolNoTag(semantics.incompatibleDisableGlobTracking()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowDictPlus()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowKeywordOnlyArgs()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowToplevelIfStatement()); @@ -70,6 +71,7 @@ builder.incompatibleDepsetIsNotIterable(codedIn.readBool()); builder.incompatibleDepsetUnion(codedIn.readBool()); builder.incompatibleDictLiteralHasNoDuplicates(codedIn.readBool()); + builder.incompatibleDisableGlobTracking(codedIn.readBool()); builder.incompatibleDisallowDictPlus(codedIn.readBool()); builder.incompatibleDisallowKeywordOnlyArgs(codedIn.readBool()); builder.incompatibleDisallowToplevelIfStatement(codedIn.readBool());
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java index 8cc1e9e..d588118 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
@@ -137,6 +137,17 @@ public boolean incompatibleDictLiteralHasNoDuplicates; @Option( + name = "incompatible_disable_glob_tracking", + defaultValue = "false", + category = "incompatible changes", + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE}, + help = "If set to true, do not track the values of globs (this is used by rare specific cases" + ) + public boolean incompatibleDisableGlobTracking; + + @Option( name = "incompatible_disallow_dict_plus", defaultValue = "false", category = "incompatible changes", @@ -267,6 +278,7 @@ .incompatibleDepsetIsNotIterable(incompatibleDepsetIsNotIterable) .incompatibleDepsetUnion(incompatibleDepsetUnion) .incompatibleDictLiteralHasNoDuplicates(incompatibleDictLiteralHasNoDuplicates) + .incompatibleDisableGlobTracking(incompatibleDisableGlobTracking) .incompatibleDisallowDictPlus(incompatibleDisallowDictPlus) .incompatibleDisallowKeywordOnlyArgs(incompatibleDisallowKeywordOnlyArgs) .incompatibleDisallowToplevelIfStatement(incompatibleDisallowToplevelIfStatement)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java index c0ebebe..9a6f915 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -47,6 +47,9 @@ public abstract boolean incompatibleDepsetUnion(); public abstract boolean incompatibleDictLiteralHasNoDuplicates(); + + public abstract boolean incompatibleDisableGlobTracking(); + public abstract boolean incompatibleDisallowDictPlus(); public abstract boolean incompatibleDisallowKeywordOnlyArgs(); public abstract boolean incompatibleDisallowToplevelIfStatement(); @@ -79,6 +82,7 @@ .incompatibleDepsetIsNotIterable(false) .incompatibleDepsetUnion(false) .incompatibleDictLiteralHasNoDuplicates(true) + .incompatibleDisableGlobTracking(false) .incompatibleDisallowDictPlus(false) .incompatibleDisallowKeywordOnlyArgs(true) .incompatibleDisallowToplevelIfStatement(true) @@ -104,6 +108,9 @@ public abstract Builder incompatibleDepsetUnion(boolean value); public abstract Builder incompatibleDictLiteralHasNoDuplicates(boolean value); + + public abstract Builder incompatibleDisableGlobTracking(boolean value); + public abstract Builder incompatibleDisallowDictPlus(boolean value); public abstract Builder incompatibleDisallowKeywordOnlyArgs(boolean value); public abstract Builder incompatibleDisallowToplevelIfStatement(boolean value);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java index 96c5b99..bbb8be7 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
@@ -26,7 +26,6 @@ import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.packages.util.PackageFactoryApparatus; import com.google.devtools.build.lib.packages.util.PackageFactoryTestBase; -import com.google.devtools.build.lib.syntax.GlobList; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.testutil.TestUtils; import com.google.devtools.build.lib.vfs.Path; @@ -1010,7 +1009,7 @@ Package pkg = packages.createPackage("e", buildFile); assertThat(pkg.containsErrors()).isFalse(); assertThat(pkg.getRule("e")).isNotNull(); - GlobList globList = (GlobList) pkg.getRule("e").getAttributeContainer().getAttr("data"); + List globList = (List) pkg.getRule("e").getAttributeContainer().getAttr("data"); assertThat(globList).containsExactly(Label.parseAbsolute("//e:data.txt")); }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java index f5e5cbb..beb1ffc 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -119,6 +119,7 @@ "--incompatible_depset_is_not_iterable=" + rand.nextBoolean(), "--incompatible_depset_union=" + rand.nextBoolean(), "--incompatible_dict_literal_has_no_duplicates=" + rand.nextBoolean(), + "--incompatible_disable_glob_tracking=" + rand.nextBoolean(), "--incompatible_disallow_dict_plus=" + rand.nextBoolean(), "--incompatible_disallow_keyword_only_args=" + rand.nextBoolean(), "--incompatible_disallow_toplevel_if_statement=" + rand.nextBoolean(), @@ -144,6 +145,7 @@ .incompatibleDepsetIsNotIterable(rand.nextBoolean()) .incompatibleDepsetUnion(rand.nextBoolean()) .incompatibleDictLiteralHasNoDuplicates(rand.nextBoolean()) + .incompatibleDisableGlobTracking(rand.nextBoolean()) .incompatibleDisallowDictPlus(rand.nextBoolean()) .incompatibleDisallowKeywordOnlyArgs(rand.nextBoolean()) .incompatibleDisallowToplevelIfStatement(rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java index f78e49e..6e83bbe 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
@@ -41,7 +41,6 @@ import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor; import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker; import com.google.devtools.build.lib.skyframe.SkyframeExecutor; -import com.google.devtools.build.lib.syntax.GlobList; import com.google.devtools.build.lib.testutil.ManualClock; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; @@ -349,7 +348,7 @@ tester.sync(); Target target = tester.getTarget("//e:e"); assertThat(((Rule) target).containsErrors()).isFalse(); - GlobList<?> globList = (GlobList<?>) ((Rule) target).getAttributeContainer().getAttr("data"); + List<?> globList = (List<?>) ((Rule) target).getAttributeContainer().getAttr("data"); assertThat(globList).containsExactly(Label.parseAbsolute("//e:data.txt")); }