diff options
author | Googler <noreply@google.com> | 2015-07-21 15:27:35 +0000 |
---|---|---|
committer | Kristina Chodorow <kchodorow@google.com> | 2015-07-21 15:13:39 -0400 |
commit | 2e7a5b47979b2679208a97a65df265be953eb595 (patch) | |
tree | 46d02b16006cc7e9ca4d258d5677abdad629044c /src/main/java/com/google/devtools/build/lib/events | |
parent | e8fcd75b80b20bcbaccddaaa106d970f1786a635 (diff) |
Fixed bug where blaze run with the --color=no flag was still printing out in color when the build fails.
--
MOS_MIGRATED_REVID=98736813
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/events')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/events/Reporter.java | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/events/Reporter.java b/src/main/java/com/google/devtools/build/lib/events/Reporter.java index e0c39250ba..a3cf6cce86 100644 --- a/src/main/java/com/google/devtools/build/lib/events/Reporter.java +++ b/src/main/java/com/google/devtools/build/lib/events/Reporter.java @@ -25,7 +25,7 @@ import java.util.List; * is not intended as a logging mechanism for developer-only messages; use a * Logger for that. * - * The reporter instance is consumed by the build system, and passes events to + * <p>The reporter instance is consumed by the build system, and passes events to * {@link EventHandler} instances. These handlers are registered via {@link * #addHandler(EventHandler)}. * @@ -42,6 +42,9 @@ public final class Reporter implements EventHandler, ExceptionListener { */ private final OutErr outErrToReporter = outErrForReporter(this); private volatile OutputFilter outputFilter = OutputFilter.OUTPUT_EVERYTHING; + private EventHandler ansiAllowingHandler; + private EventHandler ansiStrippingHandler; + private boolean ansiAllowingHandlerRegistered; public Reporter() {} @@ -143,4 +146,34 @@ public final class Reporter implements EventHandler, ExceptionListener { public void setOutputFilter(OutputFilter outputFilter) { this.outputFilter = outputFilter; } + + /** + * Registers an ANSI-control-code-allowing EventHandler with an ANSI-stripping EventHandler + * that is already registered with the reporter. The ANSI-stripping handler can then be replaced + * with the ANSI-allowing handler by calling {@code #switchToAnsiAllowingHandler} which + * calls {@code removeHandler} for the ANSI-stripping handler and then {@code addHandler} for the + * ANSI-allowing handler. + */ + public synchronized void registerAnsiAllowingHandler( + EventHandler ansiStrippingHandler, + EventHandler ansiAllowingHandler) { + this.ansiAllowingHandler = ansiAllowingHandler; + this.ansiStrippingHandler = ansiStrippingHandler; + ansiAllowingHandlerRegistered = true; + } + + /** + * Restores the ANSI-allowing EventHandler registered using + * {@code #registerAnsiAllowingHandler(...)}. + */ + public synchronized void switchToAnsiAllowingHandler() { + if (ansiAllowingHandlerRegistered) { + removeHandler(ansiStrippingHandler); + addHandler(ansiAllowingHandler); + ansiStrippingHandler = null; + ansiAllowingHandler = null; + ansiAllowingHandlerRegistered = false; + } + } + } |