From e6083492184745b879f22543ce1ef51d07a99b6c Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 23 Oct 2024 09:57:55 -0700 Subject: [PATCH] Allow Invocation Policy to set output-affecting flags in conjunction with PROJECT.scl files. PiperOrigin-RevId: 689004819 Change-Id: Ide4749c79903af3f85774ab9a5666458f2fa9090 --- .../devtools/common/options/GlobalRcUtils.java | 7 ++++++- .../common/options/InvocationPolicyEnforcer.java | 3 +++ .../common/options/OptionsParserTest.java | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/google/devtools/common/options/GlobalRcUtils.java b/src/main/java/com/google/devtools/common/options/GlobalRcUtils.java index 7d8da990f889f4..bff03a0a2e9d1d 100644 --- a/src/main/java/com/google/devtools/common/options/GlobalRcUtils.java +++ b/src/main/java/com/google/devtools/common/options/GlobalRcUtils.java @@ -28,7 +28,12 @@ private GlobalRcUtils() {} && option.getOrigin().getSource().equals("client")) { return true; } + if (option.getOrigin().getSource() != null + && option.getOrigin().getSource().equals("Invocation policy")) { + return true; + } return false; }; - // LINT.ThenChange(//src/main/cpp/option_processor.cc) + // LINT.ThenChange(//src/main/cpp/option_processor.cc, + // src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java } diff --git a/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java b/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java index 4046ebebfbdbd0..e43ae1b7652fbd 100644 --- a/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java +++ b/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java @@ -52,7 +52,10 @@ public final class InvocationPolicyEnforcer { private static final GoogleLogger logger = GoogleLogger.forEnclosingClass(); + // LINT.IfChange private static final String INVOCATION_POLICY_SOURCE = "Invocation policy"; + // LINT.ThenChange(//src/main/java/com/google/devtools/common/options/GlobalRcUtils.java, + // src/main/java/com/google/devtools/common/options/GlobalRcUtils.java private final InvocationPolicy invocationPolicy; private final Level loglevel; @Nullable private final Object conversionContext; diff --git a/src/test/java/com/google/devtools/common/options/OptionsParserTest.java b/src/test/java/com/google/devtools/common/options/OptionsParserTest.java index a599712bcf89a3..98cb29723090a8 100644 --- a/src/test/java/com/google/devtools/common/options/OptionsParserTest.java +++ b/src/test/java/com/google/devtools/common/options/OptionsParserTest.java @@ -2641,6 +2641,22 @@ public void testOptionsParser_getUserOptions_excludesClientOptions() throws Exce assertThat(parser.getUserOptions()).containsExactly("--foo"); } + @Test + public void testOptionsParser_getUserOptions_excludesInvocationPolicy() throws Exception { + OptionsParser parser = + OptionsParser.builder() + .optionsClasses(ExpandingOptions.class, ExpandingOptionsFallback.class) + .build(); + parser.parseWithSourceFunction( + PriorityCategory.RC_FILE, o -> "Invocation policy", ImmutableList.of("--foo"), null); + assertThat(parser.getUserOptions()).isEmpty(); + + parser.parseWithSourceFunction( + PriorityCategory.RC_FILE, o -> ".bazelrc", ImmutableList.of("--foo"), null); + + assertThat(parser.getUserOptions()).containsExactly("--foo"); + } + private static OptionInstanceOrigin createInvocationPolicyOrigin() { return createInvocationPolicyOrigin(/*implicitDependent=*/ null, /*expandedFrom=*/ null); }