Reimplement --quiet using a field in the command server proto.

Rearguard fighting for #4867.

RELNOTES: None.
PiperOrigin-RevId: 688453143
Change-Id: I3f5a2f3f69676b5c5d6941b25b0d4c35a06e6056
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index 1f3d3ba..94c3e2a 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -259,6 +259,7 @@
   const int connect_timeout_secs_;
   const bool batch_;
   const bool block_for_lock_;
+  const bool quiet_;
   const bool preemptible_;
   const blaze_util::Path output_base_;
 };
@@ -1563,6 +1564,7 @@
       connect_timeout_secs_(startup_options.connect_timeout_secs),
       batch_(startup_options.batch),
       block_for_lock_(startup_options.block_for_lock),
+      quiet_(startup_options.quiet),
       preemptible_(startup_options.preemptible),
       output_base_(startup_options.output_base) {
   pipe_.reset(blaze_util::CreatePipe());
@@ -1832,6 +1834,7 @@
   command_server::RunRequest request;
   request.set_cookie(request_cookie_);
   request.set_block_for_lock(block_for_lock_);
+  request.set_quiet(quiet_);
   request.set_preemptible(preemptible_);
   request.set_client_description("pid=" + blaze::GetProcessIdAsString());
   for (const string &arg : arg_vector) {
diff --git a/src/main/cpp/option_processor.cc b/src/main/cpp/option_processor.cc
index a934bda..df08aa0 100644
--- a/src/main/cpp/option_processor.cc
+++ b/src/main/cpp/option_processor.cc
@@ -514,13 +514,6 @@
 
   blazerc_and_env_command_args_ =
       GetBlazercAndEnvCommandArgs(cwd, rc_file_ptrs, GetProcessedEnv());
-  // This is necessary because some code at Google both links in this code and
-  // needs to be ready for old versions of Bazel that don't support this
-  // argument yet.
-  if (startup_options_->quiet) {
-    blazerc_and_env_command_args_.push_back(
-        "--default_override=0:common=--quiet");
-  }
   return blaze_exit_code::SUCCESS;
 }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
index 6c129f0..352a9d4 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
@@ -155,6 +155,7 @@
       List<String> args,
       OutErr outErr,
       LockingMode lockingMode,
+      UiVerbosity uiVerbosity,
       String clientDescription,
       long firstContactTimeMillis,
       Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -253,6 +254,7 @@
                   invocationPolicy,
                   args,
                   outErr,
+                  uiVerbosity == UiVerbosity.QUIET,
                   firstContactTimeMillis,
                   commandName,
                   command,
@@ -301,6 +303,7 @@
         args,
         originalOutErr,
         LockingMode.ERROR_OUT,
+        UiVerbosity.NORMAL,
         clientDescription,
         runtime.getClock().currentTimeMillis(),
         /* startupOptionsTaggedWithBazelRc= */ Optional.empty(),
@@ -312,6 +315,7 @@
       InvocationPolicy invocationPolicy,
       List<String> args,
       OutErr outErr,
+      boolean quiet,
       long firstContactTime,
       String commandName,
       BlazeCommand command,
@@ -490,7 +494,7 @@
             options.getOptions(ExecutionOptions.class) != null
                 && options.getOptions(ExecutionOptions.class).statsSummary;
         EventHandler handler =
-            createEventHandler(outErr, eventHandlerOptions, env, newStatsSummary);
+            createEventHandler(outErr, eventHandlerOptions, quiet, env, newStatsSummary);
         reporter.addHandler(handler);
         env.getEventBus().register(handler);
 
@@ -500,7 +504,7 @@
         // modified.
         if (!eventHandlerOptions.useColor()) {
           UiEventHandler ansiAllowingHandler =
-              createEventHandler(colorfulOutErr, eventHandlerOptions, env, newStatsSummary);
+              createEventHandler(colorfulOutErr, eventHandlerOptions, quiet, env, newStatsSummary);
           reporter.registerAnsiAllowingHandler(handler, ansiAllowingHandler);
           env.getEventBus().register(new PassiveExperimentalEventHandler(ansiAllowingHandler));
         }
@@ -873,12 +877,17 @@
 
   /** Returns the event handler to use for this Blaze command. */
   private UiEventHandler createEventHandler(
-      OutErr outErr, UiOptions eventOptions, CommandEnvironment env, boolean newStatsSummary) {
+      OutErr outErr,
+      UiOptions eventOptions,
+      boolean quiet,
+      CommandEnvironment env,
+      boolean newStatsSummary) {
     Path workspacePath = runtime.getWorkspace().getDirectories().getWorkspace();
     PathFragment workspacePathFragment = workspacePath == null ? null : workspacePath.asFragment();
     return new UiEventHandler(
         outErr,
         eventOptions,
+        quiet,
         runtime.getClock(),
         env.getEventBus(),
         workspacePathFragment,
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index de577eb..cf18676 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -73,6 +73,7 @@
 import com.google.devtools.build.lib.query2.query.output.OutputFormatters;
 import com.google.devtools.build.lib.runtime.BlazeModule.ModuleFileSystem;
 import com.google.devtools.build.lib.runtime.CommandDispatcher.LockingMode;
+import com.google.devtools.build.lib.runtime.CommandDispatcher.UiVerbosity;
 import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
 import com.google.devtools.build.lib.server.CommandProtos.EnvironmentVariable;
 import com.google.devtools.build.lib.server.CommandProtos.ExecRequest;
@@ -1007,12 +1008,12 @@
 
     BlazeRuntime runtime;
     InvocationPolicy policy;
+    BlazeServerStartupOptions startupOptions;
+
     try {
       runtime = newRuntime(modules, commandLineOptions.getStartupArgs(), null);
-      policy =
-          InvocationPolicyParser.parsePolicy(
-              runtime.startupOptionsProvider.getOptions(BlazeServerStartupOptions.class)
-                  .invocationPolicy);
+      startupOptions = runtime.startupOptionsProvider.getOptions(BlazeServerStartupOptions.class);
+      policy = InvocationPolicyParser.parsePolicy(startupOptions.invocationPolicy);
     } catch (OptionsParsingException e) {
       OutErr.SYSTEM_OUT_ERR.printErrLn(e.getMessage());
       return ExitCode.COMMAND_LINE_ERROR.getNumericExitCode();
@@ -1040,6 +1041,7 @@
               commandLineOptions.getOtherArgs(),
               OutErr.SYSTEM_OUT_ERR,
               LockingMode.ERROR_OUT,
+              startupOptions.quiet ? UiVerbosity.QUIET : UiVerbosity.NORMAL,
               "batch client",
               runtime.clock.currentTimeMillis(),
               Optional.of(startupOptionsFromCommandLine.build()),
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandDispatcher.java
index c090a78..ffd9929 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommandDispatcher.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandDispatcher.java
@@ -33,6 +33,12 @@
     ERROR_OUT, // Return with an error
   }
 
+  /** How much output to emit on the console. */
+  enum UiVerbosity {
+    QUIET, // Only errors
+    NORMAL, // Everything
+  }
+
   /**
    * Executes a single command. Returns a {@link BlazeCommandResult} to indicate either an exit
    * code, the desire to shut down the server, or that a given binary should be executed by the
@@ -43,6 +49,7 @@
       List<String> args,
       OutErr outErr,
       LockingMode lockingMode,
+      UiVerbosity uiVerbosity,
       String clientDescription,
       long firstContactTimeMillis,
       Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
index d74d8bf..c7af1df8 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
@@ -166,6 +166,7 @@
   public UiEventHandler(
       OutErr outErr,
       UiOptions options,
+      boolean quiet,
       Clock clock,
       EventBus eventBus,
       @Nullable PathFragment workspacePathFragment,
@@ -177,7 +178,7 @@
         OutErr.create(
             new FullyBufferedOutputStream(outErr.getOutputStream()),
             new FullyBufferedOutputStream(outErr.getErrorStream()));
-    this.quiet = options.quiet;
+    this.quiet = quiet;
     this.cursorControl = options.useCursorControl();
     this.terminal = new AnsiTerminal(this.outErr.getErrorStream());
     this.showProgress = options.showProgress;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/UiOptions.java b/src/main/java/com/google/devtools/build/lib/runtime/UiOptions.java
index d8e9143..ca6e8eb 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/UiOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/UiOptions.java
@@ -128,14 +128,6 @@
   }
 
   @Option(
-      name = "quiet",
-      defaultValue = "false",
-      documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
-      effectTags = {OptionEffectTag.UNKNOWN},
-      help = "If set, Bazel prints as little output as possible.")
-  public boolean quiet;
-
-  @Option(
       name = "show_progress",
       defaultValue = "true",
       documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
diff --git a/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java b/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java
index 38c701a..03ad8b8 100644
--- a/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java
@@ -26,6 +26,7 @@
 import com.google.devtools.build.lib.runtime.BlazeCommandResult;
 import com.google.devtools.build.lib.runtime.CommandDispatcher;
 import com.google.devtools.build.lib.runtime.CommandDispatcher.LockingMode;
+import com.google.devtools.build.lib.runtime.CommandDispatcher.UiVerbosity;
 import com.google.devtools.build.lib.runtime.SafeRequestLogging;
 import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
 import com.google.devtools.build.lib.server.CommandManager.RunningCommand;
@@ -609,6 +610,7 @@
                 args,
                 rpcOutErr,
                 request.getBlockForLock() ? LockingMode.WAIT : LockingMode.ERROR_OUT,
+                request.getQuiet() ? UiVerbosity.QUIET : UiVerbosity.NORMAL,
                 request.getClientDescription(),
                 clock.currentTimeMillis(),
                 Optional.of(startupOptions.build()),
diff --git a/src/main/protobuf/command_server.proto b/src/main/protobuf/command_server.proto
index 44de0b4..208b79a 100644
--- a/src/main/protobuf/command_server.proto
+++ b/src/main/protobuf/command_server.proto
@@ -43,6 +43,10 @@
   // the server will return an error immediately.
   bool block_for_lock = 3;
 
+  // Whether the server should restrict itself to emitting only errors on the
+  // console.
+  bool quiet = 9;
+
   // A simple description of the client for reporting purposes. This value is
   // required.
   string client_description = 4;
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherTest.java
index addf2d6..b07be04 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherTest.java
@@ -35,6 +35,7 @@
 import com.google.devtools.build.lib.profiler.MemoryProfiler;
 import com.google.devtools.build.lib.profiler.Profiler;
 import com.google.devtools.build.lib.runtime.CommandDispatcher.LockingMode;
+import com.google.devtools.build.lib.runtime.CommandDispatcher.UiVerbosity;
 import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
 import com.google.devtools.build.lib.server.FailureDetails;
 import com.google.devtools.build.lib.server.FailureDetails.BuildProgress;
@@ -475,6 +476,7 @@
                     ImmutableList.of("bar"),
                     outErr,
                     LockingMode.WAIT,
+                    UiVerbosity.NORMAL,
                     "test client",
                     runtime.getClock().currentTimeMillis(),
                     /* startupOptionsTaggedWithBazelRc= */ Optional.empty(),
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/UiEventHandlerStdOutAndStdErrTest.java b/src/test/java/com/google/devtools/build/lib/runtime/UiEventHandlerStdOutAndStdErrTest.java
index ebd9eb9..7c3ae7b 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/UiEventHandlerStdOutAndStdErrTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/UiEventHandlerStdOutAndStdErrTest.java
@@ -89,6 +89,7 @@
         new UiEventHandler(
             outErr,
             uiOptions,
+            false,
             new ManualClock(),
             new EventBus(),
             /* workspacePathFragment= */ null,
diff --git a/src/test/java/com/google/devtools/build/lib/server/GrpcServerTest.java b/src/test/java/com/google/devtools/build/lib/server/GrpcServerTest.java
index c8e6deb..8260a38 100644
--- a/src/test/java/com/google/devtools/build/lib/server/GrpcServerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/server/GrpcServerTest.java
@@ -140,6 +140,7 @@
               List<String> args,
               OutErr outErr,
               LockingMode lockingMode,
+              UiVerbosity uiVerbosity,
               String clientDescription,
               long firstContactTimeMillis,
               Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -187,7 +188,16 @@
     CountDownLatch beforeThirdExtensionLatch = new CountDownLatch(1);
     CountDownLatch afterThirdExtensionLatch = new CountDownLatch(1);
     CommandDispatcher dispatcher =
-        (policy, args, outErr, lockMode, clientDesc, startMs, startOpts, cmdExts, cmdExtOut) -> {
+        (policy,
+            args,
+            outErr,
+            lockMode,
+            uiVerbosity,
+            clientDesc,
+            startMs,
+            startOpts,
+            cmdExts,
+            cmdExtOut) -> {
           // Send the first extension.
           cmdExtOut.report(commandExtension1);
           afterFirstExtensionLatch.countDown();
@@ -243,6 +253,7 @@
               List<String> args,
               OutErr outErr,
               LockingMode lockingMode,
+              UiVerbosity uiVerbosity,
               String clientDescription,
               long firstContactTimeMillis,
               Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -291,6 +302,7 @@
               List<String> args,
               OutErr outErr,
               LockingMode lockingMode,
+              UiVerbosity uiVerbosity,
               String clientDescription,
               long firstContactTimeMillis,
               Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -435,6 +447,7 @@
               List<String> args,
               OutErr outErr,
               LockingMode lockingMode,
+              UiVerbosity uiVerbosity,
               String clientDescription,
               long firstContactTimeMillis,
               Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -496,6 +509,7 @@
               List<String> args,
               OutErr outErr,
               LockingMode lockingMode,
+              UiVerbosity uiVerbosity,
               String clientDescription,
               long firstContactTimeMillis,
               Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -586,6 +600,7 @@
               List<String> args,
               OutErr outErr,
               LockingMode lockingMode,
+              UiVerbosity uiVerbosity,
               String clientDescription,
               long firstContactTimeMillis,
               Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -681,6 +696,7 @@
               List<String> args,
               OutErr outErr,
               LockingMode lockingMode,
+              UiVerbosity uiVerbosity,
               String clientDescription,
               long firstContactTimeMillis,
               Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -782,6 +798,7 @@
               List<String> args,
               OutErr outErr,
               LockingMode lockingMode,
+              UiVerbosity uiVerbosity,
               String clientDescription,
               long firstContactTimeMillis,
               Optional<List<Pair<String, String>>> startupOptionsTaggedWithBazelRc,
@@ -1147,6 +1164,7 @@
         args,
         outErr,
         lockingMode,
+        uiVerbosity,
         clientDescription,
         firstContactTimeMillis,
         startupOptionsTaggedWithBazelRc,