Stop supporting old API for starlark defined transition impl function. Impl functions now must always take two params, canonically `settings` and `attr`.
PiperOrigin-RevId: 234155945
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
index 44b4f96..c613acd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
@@ -190,17 +190,7 @@
try {
result = evalFunction(impl, ImmutableList.of(previousSettings, attributeMapper));
} catch (EvalException e) {
- // TODO(b/121134880): Still support the one-param syntax since we have users using that.
- // Deprecate when this API will stop changing.
- if (e.getMessage().contains("too many (2) positional arguments in call to")) {
- try {
- result = evalFunction(impl, ImmutableList.of(previousSettings));
- } catch (EvalException e2) {
- throw new EvalException(impl.getLocation(), e2.getMessage());
- }
- } else {
- throw new EvalException(impl.getLocation(), e.getMessage());
- }
+ throw new EvalException(impl.getLocation(), e.getMessage());
}
if (!(result instanceof SkylarkDict<?, ?>)) {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
index c7e8b25..5707c85 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
@@ -51,7 +51,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {",
" 't0': {'//command_line_option:cpu': 'k8'},",
" 't1': {'//command_line_option:cpu': 'armeabi-v7a'},",
@@ -206,7 +206,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" transitions = {}",
" for cpu in settings['//command_line_option:fat_apk_cpu']:",
" transitions[cpu] = {",
@@ -261,7 +261,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {",
" '//command_line_option:cpu': 'armeabi-v7a',",
" '//command_line_option:dynamic_mode': 'off',",
@@ -310,7 +310,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {'//command_line_option:cpu': 'k8'}",
"my_transition = transition(implementation = transition_func, inputs = [], outputs = [])",
"def impl(ctx): ",
@@ -343,7 +343,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {'//command_line_option:cpu': 'k8'}",
"my_transition = transition(implementation = transition_func,",
" inputs = [],",
@@ -380,7 +380,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" if (len(settings) != 2",
" or (not settings['//command_line_option:experimental_strict_java_deps'])",
" or (not settings['//command_line_option:cpu'])):",
@@ -417,7 +417,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {'//command_line_option:cpu': 'k8'}",
"my_transition = transition(implementation = transition_func,",
" inputs = ['cpu'], outputs = ['//command_line_option:cpu'])",
@@ -452,7 +452,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {'//command_line_option:cpu': 'k8'}",
"my_transition = transition(implementation = transition_func,",
" inputs = ['//command_line_option:foo', '//command_line_option:bar'],",
@@ -488,7 +488,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {'//command_line_option:foobarbaz': 'k8'}",
"my_transition = transition(implementation = transition_func,",
" inputs = ['//command_line_option:cpu'], outputs = ['//command_line_option:foobarbaz'])",
@@ -523,7 +523,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {'cpu': 'k8'}",
"my_transition = transition(implementation = transition_func,",
" inputs = [], outputs = ['cpu'])",
@@ -558,7 +558,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {'//command_line_option:cpu': 1}",
"my_transition = transition(implementation = transition_func,",
" inputs = [], outputs = ['//command_line_option:cpu'])",
@@ -591,7 +591,7 @@
scratch.file(
"test/skylark/my_rule.bzl",
- "def transition_func(settings):",
+ "def transition_func(settings, attr):",
" return {'//command_line_option:cpu': 1}",
"my_transition = transition(implementation = transition_func,",
" inputs = [],",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
index d9e48b3..dec9ebf 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
@@ -392,4 +392,26 @@
assertContainsEvent(
"transition inputs [//test:cute-animal-fact] do not correspond to valid settings");
}
+
+ @Test
+ public void testOneParamTransitionFunctionApiFails() throws Exception {
+ setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+ scratch.file(
+ "test/transitions.bzl",
+ "def _impl(settings):",
+ " return {'//command_line_option:test_arg': ['post-transition']}",
+ "my_transition = transition(implementation = _impl, inputs = [],",
+ " outputs = ['//command_line_option:test_arg'])");
+ scratch.file(
+ "test/rules.bzl",
+ "load('//test:transitions.bzl', 'my_transition')",
+ "def _impl(ctx):",
+ " return []",
+ "my_rule = rule(implementation = _impl, cfg = my_transition)");
+ scratch.file("test/BUILD", "load('//test:rules.bzl', 'my_rule')", "my_rule(name = 'test')");
+
+ reporter.removeHandler(failFastHandler);
+ getConfiguredTarget("//test");
+ assertContainsEvent("too many (2) positional arguments in call to _impl(settings)");
+ }
}