Flip incompatible_disable_depset_items to true. The flag was introduced in August 2019 (before Bazel 1.0). Next steps: - update the bazelrc files that refer to the file - remove the flag and simplify the depset code Fixes https://github.com/bazelbuild/bazel/issues/9017 RELNOTES: incompatible_disable_depset_items is flipped PiperOrigin-RevId: 400196736
diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java index a92fd0f..3cabd59 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java +++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
@@ -324,7 +324,7 @@ @Option( name = "incompatible_disable_depset_items", - defaultValue = "false", + defaultValue = "true", documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS, effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS}, metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE}, @@ -683,7 +683,7 @@ public static final String INCOMPATIBLE_DEPSET_FOR_LIBRARIES_TO_LINK_GETTER = "+incompatible_depset_for_libraries_to_link_getter"; public static final String INCOMPATIBLE_DISABLE_DEPSET_ITEMS = - "-incompatible_disable_depset_items"; + "+incompatible_disable_depset_items"; public static final String INCOMPATIBLE_DISABLE_TARGET_PROVIDER_FIELDS = "-incompatible_disable_target_provider_fields"; public static final String INCOMPATIBLE_DISABLE_THIRD_PARTY_LICENSE_CHECKING =
diff --git a/src/test/java/com/google/devtools/build/lib/collect/nestedset/DepsetTest.java b/src/test/java/com/google/devtools/build/lib/collect/nestedset/DepsetTest.java index 92637fe..c96c3a2 100644 --- a/src/test/java/com/google/devtools/build/lib/collect/nestedset/DepsetTest.java +++ b/src/test/java/com/google/devtools/build/lib/collect/nestedset/DepsetTest.java
@@ -103,6 +103,7 @@ @Test public void testGetSetItems() throws Exception { + ev.setSemantics("--incompatible_disable_depset_items=false"); ev.exec("s = depset(items = ['a', 'b'])"); assertThat(get("s").getSet(String.class).toList()).containsExactly("a", "b").inOrder(); assertThat(get("s").getSet(Object.class).toList()).containsExactly("a", "b").inOrder(); @@ -129,6 +130,7 @@ @Test public void testToListItems() throws Exception { + ev.setSemantics("--incompatible_disable_depset_items=false"); ev.exec("s = depset(items = ['a', 'b'])"); assertThat(get("s").toList(String.class)).containsExactly("a", "b").inOrder(); assertThat(get("s").toList(Object.class)).containsExactly("a", "b").inOrder(); @@ -150,6 +152,7 @@ @Test public void testOrderItems() throws Exception { + ev.setSemantics("--incompatible_disable_depset_items=false"); ev.exec("s = depset(items = ['a', 'b'], order='postorder')"); assertThat(get("s").getSet(String.class).getOrder()).isEqualTo(Order.COMPILE_ORDER); } @@ -169,7 +172,7 @@ @Test public void testBadOrderItems() throws Exception { - ev.new Scenario() + ev.new Scenario("--incompatible_disable_depset_items=false") .testIfExactError( "Invalid order: non_existing", "depset(items = ['a'], order='non_existing')"); } @@ -182,25 +185,26 @@ @Test public void testHomogeneousGenericType() throws Exception { - ev.exec("s = depset(['a', 'b', 'c'])"); + ev.exec("s = depset(direct = ['a', 'b', 'c'])"); assertThat(get("s").getElementType()).isEqualTo(ElementType.STRING); } @Test public void testHomogeneousGenericTypeDirect() throws Exception { - ev.exec("s = depset(['a', 'b', 'c'], transitive = [])"); + ev.exec("s = depset(direct = ['a', 'b', 'c'], transitive = [])"); assertThat(get("s").getElementType()).isEqualTo(ElementType.STRING); } @Test public void testHomogeneousGenericTypeItems() throws Exception { + ev.setSemantics("--incompatible_disable_depset_items=false"); ev.exec("s = depset(items = ['a', 'b', 'c'], transitive = [])"); assertThat(get("s").getElementType()).isEqualTo(ElementType.STRING); } @Test public void testHomogeneousGenericTypeTransitive() throws Exception { - ev.exec("s = depset(['a', 'b', 'c'], transitive = [depset(['x'])])"); + ev.exec("s = depset(direct = ['a', 'b', 'c'], transitive = [depset(['x'])])"); assertThat(get("s").getElementType()).isEqualTo(ElementType.STRING); } @@ -208,7 +212,7 @@ public void testTransitiveIncompatibleOrder() throws Exception { ev.checkEvalError( "Order 'postorder' is incompatible with order 'topological'", - "depset(['a', 'b'], order='postorder',", + "depset(direct = ['a', 'b'], order='postorder',", " transitive = [depset(['c', 'd'], order='topological')])"); } @@ -229,7 +233,7 @@ @Test public void testBadGenericTypeItems() throws Exception { - ev.new Scenario() + ev.new Scenario("--incompatible_disable_depset_items=false") .testIfExactError( "cannot add an item of type 'int' to a depset of 'string'", "depset(items = ['a', 5])"); } @@ -244,7 +248,7 @@ @Test public void testLegacyAndNewApi() throws Exception { - ev.new Scenario() + ev.new Scenario("--incompatible_disable_depset_items=false") .testIfExactError( "Do not pass both 'direct' and 'items' argument to depset constructor.", "depset(['a', 'b'], direct = ['c', 'd'])"); @@ -252,7 +256,7 @@ @Test public void testItemsAndTransitive() throws Exception { - ev.new Scenario() + ev.new Scenario("--incompatible_disable_depset_items=false") .testIfExactError( "for items, got depset, want sequence", "depset(items = depset(), transitive = [depset()])"); @@ -269,6 +273,7 @@ @Test public void testTransitiveOrder() throws Exception { + ev.setSemantics("--incompatible_disable_depset_items=false"); assertContainsInOrder("depset([], transitive=[depset(['a', 'b', 'c'])])", "a", "b", "c"); assertContainsInOrder("depset(['a'], transitive = [depset(['b', 'c'])])", "b", "c", "a"); assertContainsInOrder("depset(['a', 'b'], transitive = [depset(['c'])])", "c", "a", "b"); @@ -277,6 +282,7 @@ @Test public void testTransitiveOrderItems() throws Exception { + ev.setSemantics("--incompatible_disable_depset_items=false"); assertContainsInOrder("depset(items=[], transitive=[depset(['a', 'b', 'c'])])", "a", "b", "c"); assertContainsInOrder("depset(items=['a'], transitive = [depset(['b', 'c'])])", "b", "c", "a"); assertContainsInOrder("depset(items=['a', 'b'], transitive = [depset(['c'])])", "c", "a", "b"); @@ -385,7 +391,9 @@ @Test public void testMutableDepsetElementsLegacyBehavior() throws Exception { // See b/144992997 and github.com/bazelbuild/bazel/issues/10313. - ev.setSemantics("--incompatible_always_check_depset_elements=false"); + ev.setSemantics( + "--incompatible_always_check_depset_elements=false", + "--incompatible_disable_depset_items=false"); // Test legacy depset(...) and new depset(direct=...) constructors.
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java index beef56d..ff3d00d 100644 --- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java +++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java
@@ -371,7 +371,7 @@ "test/starlark/extension.bzl", "load('//myinfo:myinfo.bzl', 'MyInfo')", "def _impl(ctx):", - " g = depset(ctx.attr.dep.output_groups['_hidden_top_level" + INTERNAL_SUFFIX + "'])", + " g = ctx.attr.dep.output_groups['_hidden_top_level" + INTERNAL_SUFFIX + "']", " return [MyInfo(result = g),", " OutputGroupInfo(my_group = g)]", "my_rule = rule(implementation = _impl,",
diff --git a/src/test/shell/integration/py_args_escaping_test.sh b/src/test/shell/integration/py_args_escaping_test.sh index af9e919..b4c91be 100755 --- a/src/test/shell/integration/py_args_escaping_test.sh +++ b/src/test/shell/integration/py_args_escaping_test.sh
@@ -298,7 +298,7 @@ use_default_shell_env = True, input_manifests = tool_input_mfs, ) - return DefaultInfo(files = depset(items = [ctx.outputs.out])) + return DefaultInfo(files = depset(direct = [ctx.outputs.out])) run_host_configured = rule( implementation = _impl,