Support `--no@//:bool_flag` on the command line.
This applies label canonicalization to starlark flags having a `--no`
prefix.
Relates to #11128.
Closes #13418.
PiperOrigin-RevId: 372619463
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/StarlarkOptionsParser.java b/src/main/java/com/google/devtools/build/lib/runtime/StarlarkOptionsParser.java
index 9548b43..1d9eb89 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/StarlarkOptionsParser.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/StarlarkOptionsParser.java
@@ -259,7 +259,10 @@
buildSettingTarget.getAssociatedRule().getRuleClassObject().getBuildSetting();
if (current.getType().equals(BOOLEAN)) {
// --boolean_flag or --noboolean_flag
- unparsedOptions.put(name, new Pair<>(String.valueOf(booleanValue), buildSettingTarget));
+ // Ditto w/r/t canonical form.
+ unparsedOptions.put(
+ buildSettingTarget.getLabel().getCanonicalForm(),
+ new Pair<>(String.valueOf(booleanValue), buildSettingTarget));
} else {
if (!booleanValue) {
// --no(non_boolean_flag)
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkOptionsParsingTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkOptionsParsingTest.java
index 4b3a05a..0e93717 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkOptionsParsingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkOptionsParsingTest.java
@@ -214,6 +214,18 @@
assertThat(result.getResidue()).isEmpty();
}
+ // test --no@main_workspace//:bool_flag
+ @Test
+ public void testNoPrefixedBooleanFlag_withWorkspace() throws Exception {
+ writeBasicBoolFlag();
+
+ OptionsParsingResult result = parseStarlarkOptions("--no@//test:my_bool_setting");
+
+ assertThat(result.getStarlarkOptions()).hasSize(1);
+ assertThat(result.getStarlarkOptions().get("//test:my_bool_setting")).isEqualTo(false);
+ assertThat(result.getResidue()).isEmpty();
+ }
+
// test --noint_flag
@Test
public void testNoPrefixedNonBooleanFlag() throws Exception {