diff options
Diffstat (limited to 'src')
6 files changed, 43 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java index 94f893ad8b..0d1a1aa6c8 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java @@ -227,6 +227,12 @@ public final class SkylarkAttr implements SkylarkAttrApi { // This used to apply the "disable LIPO" (a.k.a. "data") transition. But now that LIPO is // turned down this is a noop. Still, there are cfg = "data"' references in the depot. So // we have to remove them via b/28688645 before we can remove this path. + if (env.getSemantics().incompatibleDisallowDataTransition()) { + throw new EvalException(ast.getLocation(), + "Using cfg = \"data\" on an attribute is a noop and no longer supported. Please " + + "remove it. You can use --incompatible_disallow_data_transition=false to " + + "temporarily disable this check."); + } } else if (trans.equals("host")) { builder.cfg(HostTransition.INSTANCE); } else if (trans instanceof SplitTransition) { 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 c1d6dac164..0a7d7f7ccd 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 @@ -48,6 +48,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics codedOut.writeBoolNoTag(semantics.incompatibleDepsetIsNotIterable()); codedOut.writeBoolNoTag(semantics.incompatibleDepsetUnion()); codedOut.writeBoolNoTag(semantics.incompatibleDisableObjcProviderResources()); + codedOut.writeBoolNoTag(semantics.incompatibleDisallowDataTransition()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowDictPlus()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowFileType()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowLegacyJavaInfo()); @@ -73,6 +74,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics builder.incompatibleDepsetIsNotIterable(codedIn.readBool()); builder.incompatibleDepsetUnion(codedIn.readBool()); builder.incompatibleDisableObjcProviderResources(codedIn.readBool()); + builder.incompatibleDisallowDataTransition(codedIn.readBool()); builder.incompatibleDisallowDictPlus(codedIn.readBool()); builder.incompatibleDisallowFileType(codedIn.readBool()); builder.incompatibleDisallowLegacyJavaInfo(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 d77f5c92ca..14c68c4d90 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 @@ -128,6 +128,19 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable public boolean incompatibleDisableObjcProviderResources; @Option( + name = "incompatible_disallow_data_transition", + defaultValue = "false", + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + metadataTags = { + OptionMetadataTag.INCOMPATIBLE_CHANGE, + OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES + }, + help = "If set to true, rule attributes cannot set 'cfg = \"data\"', which is a noop." + ) + public boolean incompatibleDisallowDataTransition; + + @Option( name = "incompatible_disallow_dict_plus", defaultValue = "false", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, @@ -302,6 +315,7 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable .incompatibleDepsetIsNotIterable(incompatibleDepsetIsNotIterable) .incompatibleDepsetUnion(incompatibleDepsetUnion) .incompatibleDisableObjcProviderResources(incompatibleDisableObjcProviderResources) + .incompatibleDisallowDataTransition(incompatibleDisallowDataTransition) .incompatibleDisallowDictPlus(incompatibleDisallowDictPlus) .incompatibleDisallowFileType(incompatibleDisallowFileType) .incompatibleDisallowLegacyJavaInfo(incompatibleDisallowLegacyJavaInfo) 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 ac556e221f..bea8aa7469 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 @@ -49,6 +49,8 @@ public abstract class SkylarkSemantics { public abstract boolean incompatibleDisableObjcProviderResources(); + public abstract boolean incompatibleDisallowDataTransition(); + public abstract boolean incompatibleDisallowDictPlus(); public abstract boolean incompatibleDisallowFileType(); @@ -93,6 +95,7 @@ public abstract class SkylarkSemantics { .incompatibleDepsetIsNotIterable(false) .incompatibleDepsetUnion(false) .incompatibleDisableObjcProviderResources(false) + .incompatibleDisallowDataTransition(false) .incompatibleDisallowDictPlus(false) .incompatibleDisallowFileType(false) .incompatibleDisallowLegacyJavaInfo(false) @@ -122,6 +125,8 @@ public abstract class SkylarkSemantics { public abstract Builder incompatibleDisableObjcProviderResources(boolean value); + public abstract Builder incompatibleDisallowDataTransition(boolean value); + public abstract Builder incompatibleDisallowDictPlus(boolean value); public abstract Builder incompatibleDisallowFileType(boolean value); 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 8d6e217e93..fc30103bb6 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 @@ -124,6 +124,7 @@ public class SkylarkSemanticsConsistencyTest { "--incompatible_depset_is_not_iterable=" + rand.nextBoolean(), "--incompatible_depset_union=" + rand.nextBoolean(), "--incompatible_disable_objc_provider_resources=" + rand.nextBoolean(), + "--incompatible_disallow_data_transition=" + rand.nextBoolean(), "--incompatible_disallow_dict_plus=" + rand.nextBoolean(), "--incompatible_disallow_filetype=" + rand.nextBoolean(), "--incompatible_disallow_legacy_javainfo=" + rand.nextBoolean(), @@ -150,6 +151,7 @@ public class SkylarkSemanticsConsistencyTest { .incompatibleDepsetIsNotIterable(rand.nextBoolean()) .incompatibleDepsetUnion(rand.nextBoolean()) .incompatibleDisableObjcProviderResources(rand.nextBoolean()) + .incompatibleDisallowDataTransition(rand.nextBoolean()) .incompatibleDisallowDictPlus(rand.nextBoolean()) .incompatibleDisallowFileType(rand.nextBoolean()) .incompatibleDisallowLegacyJavaInfo(rand.nextBoolean()) diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java index 1f75b1e64e..14d4de5540 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java @@ -570,6 +570,20 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase { } @Test + public void incompatibleDataTransition() throws Exception { + ev = createEvaluationTestCase( + SkylarkSemantics.DEFAULT_SEMANTICS + .toBuilder() + .incompatibleDisallowDataTransition(true) + .build()); + ev.initialize(); + EvalException expected = + assertThrows(EvalException.class, () -> eval("attr.label(cfg = 'data')")); + assertThat(expected).hasMessageThat().contains( + "Using cfg = \"data\" on an attribute is a noop and no longer supported"); + } + + @Test public void testAttrValues() throws Exception { Attribute attr = buildAttribute("a1", "attr.string(values = ['ab', 'cd'])"); PredicateWithMessage<Object> predicate = attr.getAllowedValues(); |