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 9548b4357c4169..1d9eb89d490305 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 @@ private void parseArg( 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 4b3a05a30f01de..0e93717352e940 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 @@ public void testNoPrefixedBooleanFlag() throws Exception { 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 {