diff options
3 files changed, 26 insertions, 10 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 a39db67030..a15583ac08 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 @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.runtime; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventKind; @@ -29,6 +30,7 @@ import java.io.IOException; import java.util.Calendar; import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.concurrent.ThreadLocalRandom; import java.util.logging.Logger; import java.util.regex.Matcher; @@ -95,6 +97,9 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler { "Checking for outstanding GCard expenses", "Waiting for workstation CPU temperature to decrease"); + private static final Set<Character> PUNCTUATION_CHARACTERS = + ImmutableSet.<Character>of(',', '.', ':', '?', '!', ';'); + private final Iterator<String> messageIterator = Iterators.cycle(SPECIAL_MESSAGES); private volatile boolean trySpecial; private volatile Instant skipUntil = Instant.now(); @@ -331,8 +336,7 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler { terminal.resetTerminal(); } writeTimestampAndLocation(event); - terminal.writeString(event.getMessage()); - terminal.writeString("."); + writeStringWithPotentialPeriod(event.getMessage()); crlf(); } @@ -344,8 +348,7 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler { terminal.writeString("WARNING: "); terminal.resetTerminal(); writeTimestampAndLocation(warning); - terminal.writeString(warning.getMessage()); - terminal.writeString("."); + writeStringWithPotentialPeriod(warning.getMessage()); crlf(); } @@ -357,11 +360,24 @@ public class FancyTerminalEventHandler extends BlazeCommandEventHandler { terminal.writeString(event.getKind() + ": "); terminal.resetTerminal(); writeTimestampAndLocation(event); - terminal.writeString(event.getMessage()); - // No period; info messages often end in '...'. + writeStringWithPotentialPeriod(event.getMessage()); crlf(); } + /** + * Writes the given String to the terminal. This method also writes a trailing period if the + * message doesn't end with a punctuation character. + */ + private void writeStringWithPotentialPeriod(String message) throws IOException { + terminal.writeString(message); + if (!message.isEmpty()) { + char lastChar = message.charAt(message.length() - 1); + if (!PUNCTUATION_CHARACTERS.contains(lastChar)) { + terminal.writeString("."); + } + } + } + private void subcmd(Event subcmd) throws IOException { previousLineErasable = false; if (useColor) { diff --git a/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java index 6612572dd6..670380c624 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java @@ -74,7 +74,7 @@ public final class LoadStatement extends Statement { if (current.isPrivate()) { throw new EvalException( - getLocation(), "symbol '" + current + "' is private and cannot be imported"); + getLocation(), "symbol '" + current + "' is private and cannot be imported."); } // The key is the original name that was used to define the symbol // in the loaded bzl file @@ -114,11 +114,11 @@ public final class LoadStatement extends Statement { String error = null; if (pathString.getValue().isEmpty()) { - error = "Path argument to load() must not be empty"; + error = "Path argument to load() must not be empty."; } else if (pathString.getValue().startsWith("//")) { error = "First argument of load() is a path, not a label. " - + "It should start with a single slash if it is an absolute path"; + + "It should start with a single slash if it is an absolute path."; } if (error != null) { diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java index 944204944b..e5d676969d 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java @@ -1042,7 +1042,7 @@ public class ParserTest extends EvaluationTestCase { private static final String DOUBLE_SLASH_LOAD = "load('//foo/bar/file', 'test')\n"; private static final String DOUBLE_SLASH_ERROR = "First argument of load() is a path, not a label. It should start with a " - + "single slash if it is an absolute path"; + + "single slash if it is an absolute path."; @Test public void testLoadDoubleSlashBuild() throws Exception { |