Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7.1.0] Fix common .bazelrc behavior for flag expansions #20844

Merged
merged 1 commit into from
Jan 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@ private OptionsParserImplResult parse(
parsedOption = result.parsedOptionDescription;
}
if (parsedOption.isPresent()) {
handleNewParsedOption(parsedOption.get());
handleNewParsedOption(parsedOption.get(), fallbackData);
}
priority = OptionPriority.nextOptionPriority(priority);
}
Expand Down Expand Up @@ -645,7 +645,7 @@ void setOptionValueAtSpecificPriorityWithoutExpansion(
}

/** Takes care of tracking the parsed option's value in relation to other options. */
private void handleNewParsedOption(ParsedOptionDescription parsedOption)
private void handleNewParsedOption(ParsedOptionDescription parsedOption, OptionsData fallbackData)
throws OptionsParsingException {
OptionDefinition optionDefinition = parsedOption.getOptionDefinition();
ExpansionBundle expansionBundle = setOptionValue(parsedOption);
Expand All @@ -659,7 +659,7 @@ private void handleNewParsedOption(ParsedOptionDescription parsedOption)
optionDefinition.hasImplicitRequirements() ? parsedOption : null,
optionDefinition.isExpansionOption() ? parsedOption : null,
expansionBundle.expansionArgs,
/* fallbackData= */ null);
fallbackData);
if (!optionsParserImplResult.getResidue().isEmpty()) {

// Throw an assertion here, because this indicates an error in the definition of this
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2480,6 +2480,40 @@ public void fallbackOptions_optionsParsingDifferently() {
assertThat(e).hasCauseThat().isInstanceOf(DuplicateOptionDeclarationException.class);
}

public static class ExpandingOptions extends OptionsBase {
@Option(
name = "foo",
category = "one",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.NO_OP},
expansion = {"--nobar"},
defaultValue = "null")
public Void foo;
}

public static class ExpandingOptionsFallback extends OptionsBase {
@Option(
name = "bar",
category = "one",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.NO_OP},
defaultValue = "true")
public boolean bar;
}

@Test
public void fallbackOptions_expansionToNegativeBooleanFlag() throws OptionsParsingException {
OpaqueOptionsData fallbackData =
OptionsParser.getFallbackOptionsData(
ImmutableList.of(ExpandingOptions.class, ExpandingOptionsFallback.class));
OptionsParser parser = OptionsParser.builder().optionsClasses(ExpandingOptions.class).build();
parser.parseWithSourceFunction(
PriorityCategory.RC_FILE, o -> ".bazelrc", ImmutableList.of("--foo"), fallbackData);

assertThat(parser.getOptions(ExpandingOptions.class)).isNotNull();
assertThat(parser.getOptions(ExpandingOptionsFallback.class)).isNull();
}

private static OptionInstanceOrigin createInvocationPolicyOrigin() {
return createInvocationPolicyOrigin(/*implicitDependent=*/ null, /*expandedFrom=*/ null);
}
Expand Down
Loading