diff options
author | Klaus Aehlig <aehlig@google.com> | 2016-09-29 09:04:30 +0000 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2016-09-29 12:44:38 +0000 |
commit | 9ae766b7b6e2773f8b05a2bd2d51884305b8f82b (patch) | |
tree | bf3aac5d2f3d1d59016d18c139bba04656e0647c | |
parent | 6aaedbc031d6dad1a5d917f2324d6fb65e32a60a (diff) |
Add a BuildEventTransport writing text-format protos
This will allow a precise, but still human-readable, transcript of the
build-event protocol buffers generated.
--
Change-Id: I6284521f652b04ab6bf54e5eeed7b92f2d7e2245
Reviewed-on: https://bazel-review.googlesource.com/#/c/6273
MOS_MIGRATED_REVID=134637366
3 files changed, 68 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index f9fe01e718..71a964eb71 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -20,6 +20,7 @@ filegroup( "//src/main/java/com/google/devtools/build/lib/bazel/dash:srcs", "//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader:srcs", "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:srcs", + "//src/main/java/com/google/devtools/build/lib/buildeventstream/transports:srcs", "//src/main/java/com/google/devtools/build/lib/cmdline:srcs", "//src/main/java/com/google/devtools/build/lib/query2:srcs", "//src/main/java/com/google/devtools/build/lib/remote:srcs", diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/BUILD b/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/BUILD new file mode 100644 index 0000000000..618abca496 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/BUILD @@ -0,0 +1,16 @@ +package(default_visibility = ["//src:__subpackages__"]) + +filegroup( + name = "srcs", + srcs = glob(["**"]), +) + +java_library( + name = "transports", + srcs = glob(["*.java"]), + deps = [ + "//src/main/java/com/google/devtools/build/lib:buildeventstream", + "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto", + "//third_party/protobuf", + ], +) diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/TextFormatFileTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/TextFormatFileTransport.java new file mode 100644 index 0000000000..98b7520c33 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/TextFormatFileTransport.java @@ -0,0 +1,51 @@ +// Copyright 2016 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.buildeventstream.transports; + +import com.google.devtools.build.lib.buildeventstream.BuildEvent; +import com.google.devtools.build.lib.buildeventstream.BuildEventTransport; +import com.google.protobuf.TextFormat; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/** + * A simple {@link BuildEventTransport} that writes the text representation of the protocol-buffer + * representation of the events to a file. This is mainly useful for debugging. + */ +public final class TextFormatFileTransport implements BuildEventTransport { + private FileOutputStream out; + + public TextFormatFileTransport(String path) throws IOException { + this.out = new FileOutputStream(new File(path)); + } + + @Override + public synchronized void sendBuildEvent(BuildEvent event) throws IOException { + if (out != null) { + String protoTextRepresentation = TextFormat.printToString(event.asStreamProto()); + out.write(("event {\n" + protoTextRepresentation + "}\n\n").getBytes(StandardCharsets.UTF_8)); + out.flush(); + } + } + + @Override + public void close() throws IOException { + if (out != null) { + out.close(); + } + } +} |