Implement --remote_force_print_messages Adds a flag for always printing messages returned by remotely executed actions. Closes #15557. PiperOrigin-RevId: 455079196 Change-Id: Iae8f150c7b28b881861ae99191dedbce50540153
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java index 01c01ae..684b419 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java +++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
@@ -61,6 +61,7 @@ import com.google.devtools.build.lib.remote.common.BulkTransferException; import com.google.devtools.build.lib.remote.common.OperationObserver; import com.google.devtools.build.lib.remote.options.RemoteOptions; +import com.google.devtools.build.lib.remote.options.RemoteOptions.ExecutionMessagePrintMode; import com.google.devtools.build.lib.remote.util.Utils; import com.google.devtools.build.lib.remote.util.Utils.InMemoryOutput; import com.google.devtools.build.lib.sandbox.SandboxHelpers; @@ -274,7 +275,17 @@ FileOutErr outErr = context.getFileOutErr(); String message = result.getMessage(); - if (!result.success() && !message.isEmpty()) { + boolean printMessage = + ((!result.success() + && remoteOptions.remotePrintExecutionMessages + == ExecutionMessagePrintMode.FAILURE) + || (result.success() + && remoteOptions.remotePrintExecutionMessages + == ExecutionMessagePrintMode.SUCCESS) + || remoteOptions.remotePrintExecutionMessages + == ExecutionMessagePrintMode.ALL) + && !message.isEmpty(); + if (printMessage) { outErr.printErr(message + "\n"); }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/options/RemoteOptions.java b/src/main/java/com/google/devtools/build/lib/remote/options/RemoteOptions.java index cf5621b..507a221 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/options/RemoteOptions.java +++ b/src/main/java/com/google/devtools/build/lib/remote/options/RemoteOptions.java
@@ -574,6 +574,19 @@ help = "Maximum number of open files allowed during BEP artifact upload.") public int maximumOpenFiles; + @Option( + name = "remote_print_execution_messages", + defaultValue = "failure", + converter = ExecutionMessagePrintMode.Converter.class, + category = "remote", + documentationCategory = OptionDocumentationCategory.LOGGING, + effectTags = {OptionEffectTag.TERMINAL_OUTPUT}, + help = + "Choose when to print remote execution messages. Valid values are `failure`, " + + "to print only on failures, `success` to print only on successes and " + + "`all` to print always.") + public ExecutionMessagePrintMode remotePrintExecutionMessages; + // The below options are not configurable by users, only tests. // This is part of the effort to reduce the overall number of flags. @@ -643,4 +656,18 @@ .setRemoteExecution(RemoteExecution.newBuilder().setCode(detailedCode)) .build(); } + + /** An enum for specifying different modes for printing remote execution messages. */ + public enum ExecutionMessagePrintMode { + FAILURE, // Print execution messages only on failure + SUCCESS, // Print execution messages only on success + ALL; // Print execution messages always + + /** Converts to {@link ExecutionMessagePrintMode}. */ + public static class Converter extends EnumConverter<ExecutionMessagePrintMode> { + public Converter() { + super(ExecutionMessagePrintMode.class, "execution message print mode"); + } + } + } }