Allow Invocation Policy to set output-affecting flags in conjunction with PROJECT.scl files.

PiperOrigin-RevId: 689004819
Change-Id: Ide4749c79903af3f85774ab9a5666458f2fa9090
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 7d8da99..bff03a0 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 @@
             && 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 4046ebe..e43ae1b 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 a599712..98cb297 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 @@
     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);
   }