diff options
8 files changed, 38 insertions, 5 deletions
diff --git a/site/docs/skylark/backward-compatibility.md b/site/docs/skylark/backward-compatibility.md index cce1c31534..b123bc9bfa 100644 --- a/site/docs/skylark/backward-compatibility.md +++ b/site/docs/skylark/backward-compatibility.md @@ -293,5 +293,12 @@ All integers are stored using signed 32 bits. * 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 b03af4fe97..f7c28c8587 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 @@ public final class PackageFactory { } 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 f0ad5bb43f..29b3b5d0c2 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 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics 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 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics 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 8cc1e9e469..d588118588 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 class SkylarkSemanticsOptions extends OptionsBase implements Serializable 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 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable .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 c0ebebe974..9a6f9159bf 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 class SkylarkSemantics { 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 @@ public abstract class SkylarkSemantics { .incompatibleDepsetIsNotIterable(false) .incompatibleDepsetUnion(false) .incompatibleDictLiteralHasNoDuplicates(true) + .incompatibleDisableGlobTracking(false) .incompatibleDisallowDictPlus(false) .incompatibleDisallowKeywordOnlyArgs(true) .incompatibleDisallowToplevelIfStatement(true) @@ -104,6 +108,9 @@ public abstract class SkylarkSemantics { 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 96c5b99081..bbb8be7e82 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.cmdline.PackageIdentifier; 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 @@ public class PackageFactoryTest extends PackageFactoryTestBase { 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 f5e5cbbd21..beb1ffcbba 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 @@ public class SkylarkSemanticsConsistencyTest { "--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 @@ public class SkylarkSemanticsConsistencyTest { .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 f78e49e3f5..6e83bbedca 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.DiffAwareness; 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 @@ public class IncrementalLoadingTest { 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")); } |