Register the BuildEventStreamer ...so that it gets informed about all relevant events happening during the build. For the time being, we only consider one transport, that to a text file. -- Change-Id: I429c957f39a07b795a71acbeaa1360178574a1d1 Reviewed-on: https://bazel-review.googlesource.com/#/c/6276 MOS_MIGRATED_REVID=135464059
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 5bfa87b..33d1601 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -1001,6 +1001,7 @@ "//src/main/java/com/google/devtools/build/docgen:docgen_javalib", "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto", + "//src/main/java/com/google/devtools/build/lib/buildeventstream/transports", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/query2", "//src/main/java/com/google/devtools/build/lib/query2:query-engine",
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 2cb9829..7d7f300 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
@@ -27,6 +27,8 @@ import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.io.Flushables; +import com.google.devtools.build.lib.buildeventstream.BuildEventTransport; +import com.google.devtools.build.lib.buildeventstream.transports.TextFormatFileTransport; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.Reporter; @@ -452,6 +454,18 @@ Reporter reporter = env.getReporter(); reporter.addHandler(handler); env.getEventBus().register(handler); + if (eventHandlerOptions.buildEventTextFile.length() > 0) { + try { + BuildEventStreamer streamer = + new BuildEventStreamer( + ImmutableSet.<BuildEventTransport>of( + new TextFormatFileTransport(eventHandlerOptions.buildEventTextFile))); + reporter.addHandler(streamer); + env.getEventBus().register(streamer); + } catch (IOException e) { + return ExitCode.LOCAL_ENVIRONMENTAL_ERROR.getNumericExitCode(); + } + } // We register an ANSI-allowing handler associated with {@code handler} so that ANSI control // codes can be re-introduced later even if blaze is invoked with --color=no. This is useful
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandEventHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandEventHandler.java index 60e8741..7ab613f 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandEventHandler.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandEventHandler.java
@@ -21,10 +21,6 @@ import com.google.devtools.common.options.EnumConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionsBase; - -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; - import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; @@ -32,6 +28,8 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; /** * BlazeCommandEventHandler: an event handler established for the duration of a @@ -170,6 +168,15 @@ ) public int experimentalUiActionsShown; + + @Option( + name = "experimental_build_event_text_file", + defaultValue = "", + category = "hidden", + help = "If non-empty, write a textual representation of the build event protocol to that file" + ) + public String buildEventTextFile; + public boolean useColor() { return useColorEnum == UseColor.YES || (useColorEnum == UseColor.AUTO && isATty); }