aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/runtime/FancyTerminalEventHandler.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-03-20 17:26:11 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-03-23 11:54:26 +0000
commit2f95be37dacd79c85277946a3bbe8493d0fa0ae9 (patch)
tree95952d75b6bb468cd323b782c99c5ae287839dec /src/main/java/com/google/devtools/build/lib/runtime/FancyTerminalEventHandler.java
parent41fad448fc8e70b7a51e9560d566e94ff28589e4 (diff)
Add experimental external event repository progress messages.
-- MOS_MIGRATED_REVID=89134285
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/runtime/FancyTerminalEventHandler.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/FancyTerminalEventHandler.java75
1 files changed, 74 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/FancyTerminalEventHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/FancyTerminalEventHandler.java
index 9b9b48a0b5..a2d03ae2ab 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/FancyTerminalEventHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/FancyTerminalEventHandler.java
@@ -14,13 +14,22 @@
package com.google.devtools.build.lib.runtime;
import com.google.common.base.Splitter;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.events.Event;
+import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.io.AnsiTerminal;
import com.google.devtools.build.lib.util.io.OutErr;
+import org.joda.time.Duration;
+import org.joda.time.Instant;
+
import java.io.IOException;
+import java.util.Calendar;
import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -57,6 +66,38 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler {
// [1,442 / 23,476] Compiling base/base.cc
"^\\[(?:(?:\\d\\d?\\d?%)|(?:[\\d+,]+ / [\\d,]+))\\] ");
private static final Splitter LINEBREAK_SPLITTER = Splitter.on('\n');
+ private static final List<String> SPECIAL_MESSAGES = ImmutableList.of(
+ "Reading startup options from "
+ + "HKEY_LOCAL_MACHINE\\Software\\Google\\Devtools\\Blaze\\CurrentVersion",
+ "Contacting ftp://microsoft.com/win3.1/downloadcenter",
+ "Downloading MSVCR71.DLL",
+ "Installing Windows Update 37 of 118...",
+ "Sending request to Azure server",
+ "Checking whether your copy of Blaze is Genuine",
+ "Initializing HAL",
+ "Loading NDIS2SUP.VXD",
+ "Initializing DRM",
+ "Contacting license server",
+ "Starting EC2 instances",
+ "Starting MS-DOS 6.0",
+ "Updating virus database",
+ "Linking WIN32.DLL",
+ "Linking GGL32.EXE",
+ "Starting ActiveX controls",
+ "Launching Microsoft Visual Studio 2013",
+ "Launching IEXPLORE.EXE",
+ "Initializing BASIC v2.1 interpreter",
+ "Parsing COM object monikers",
+ "Notifying field agents",
+ "Negotiating with killer robots",
+ "Searching for cellular signal",
+ "Checking for outstanding GCard expenses",
+ "Waiting for workstation CPU temperature to decrease"
+ );
+
+ private final Iterator<String> messageIterator = Iterables.cycle(SPECIAL_MESSAGES).iterator();
+ private volatile boolean trySpecial;
+ private volatile Instant skipUntil = Instant.now();
private final AnsiTerminal terminal;
@@ -76,6 +117,12 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler {
useColor = options.useColor();
useCursorControls = options.useCursorControl();
progressInTermTitle = options.progressInTermTitle;
+
+ Calendar today = Calendar.getInstance();
+ trySpecial = options.forceExternalRepositories
+ || (options.externalRepositories
+ && today.get(Calendar.MONTH) == Calendar.APRIL
+ && today.get(Calendar.DAY_OF_MONTH) == 1);
}
@Override
@@ -86,7 +133,12 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler {
if (!eventMask.contains(event.getKind())) {
return;
}
-
+ if (trySpecial && !EventKind.ERRORS_AND_WARNINGS_AND_OUTPUT.contains(event.getKind())
+ && skipUntil.isAfterNow()) {
+ // Short-circuit here to avoid wiping out previous terminal contents.
+ return;
+ }
+
try {
boolean previousLineErased = false;
if (previousLineErasable) {
@@ -100,6 +152,17 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler {
Pair<String,String> progressPair = matchProgress(message);
if (progressPair != null) {
progress(progressPair.getFirst(), progressPair.getSecond());
+ if (trySpecial && ThreadLocalRandom.current().nextInt(0, 20) == 0) {
+ message = getExtraMessage();
+ if (message != null) {
+ // Should always be true, but don't crash on that!
+ previousLineErased = maybeOverwritePreviousMessage();
+ progress(progressPair.getFirst(), message);
+ // Skip unimportant messages for a bit so that this message gets some exposure.
+ skipUntil = Instant.now().plus(
+ Duration.millis(ThreadLocalRandom.current().nextInt(3000, 8000)));
+ }
+ }
} else {
progress("INFO: ", message);
}
@@ -164,6 +227,16 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler {
terminalClosed = true;
}
}
+
+ private String getExtraMessage() {
+ synchronized (messageIterator) {
+ if (messageIterator.hasNext()) {
+ return messageIterator.next();
+ }
+ }
+ trySpecial = false;
+ return null;
+ }
/**
* Displays a progress message that may be erased by subsequent messages.