aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar gregce <gregce@google.com>2018-06-27 17:44:45 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-27 17:45:53 -0700
commitbceecab895e9e196919cd8d7db5e810ae3334dcc (patch)
tree26e06f13663c005f6e67da14b8261cf5071a8be0
parent7bcb8eda43aad9318415c2be0596edfaac52bb9d (diff)
Add --incompatible_disable_data_transition for 'cfg = "data"' Skylark calls
PiperOrigin-RevId: 202400312
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java14
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();