diff --git a/src/main/java/com/google/devtools/build/lib/util/CommandFailureUtils.java b/src/main/java/com/google/devtools/build/lib/util/CommandFailureUtils.java index 5e74c58b2fd7d7..0ff99ad9d5c919 100644 --- a/src/main/java/com/google/devtools/build/lib/util/CommandFailureUtils.java +++ b/src/main/java/com/google/devtools/build/lib/util/CommandFailureUtils.java @@ -218,8 +218,11 @@ public static String describeCommand( for (String commandElement : commandLineElements) { if (form == CommandDescriptionForm.ABBREVIATED && message.length() + commandElement.length() > APPROXIMATE_MAXIMUM_MESSAGE_LENGTH) { - message.append( - " ... (remaining " + numberRemaining + " argument(s) skipped)"); + message + .append(" ... (remaining ") + .append(numberRemaining) + .append(numberRemaining == 1 ? " argument" : " arguments") + .append(" skipped)"); break; } else { if (numberRemaining < size) { diff --git a/src/test/java/com/google/devtools/build/lib/util/CommandFailureUtilsTest.java b/src/test/java/com/google/devtools/build/lib/util/CommandFailureUtilsTest.java index 17798487902a32..9b960dd64b5f87 100644 --- a/src/test/java/com/google/devtools/build/lib/util/CommandFailureUtilsTest.java +++ b/src/test/java/com/google/devtools/build/lib/util/CommandFailureUtilsTest.java @@ -56,7 +56,7 @@ public void describeCommandError() throws Exception { + "arg11 arg12 arg13 arg14 arg15 arg16 arg17 arg18 " + "arg19 arg20 arg21 arg22 arg23 arg24 arg25 arg26 " + "arg27 arg28 arg29 arg30 arg31 " - + "... (remaining 8 argument(s) skipped)"); + + "... (remaining 8 arguments skipped)"); assertThat(verboseMessage) .isEqualTo( "error executing command \n" @@ -72,6 +72,28 @@ public void describeCommandError() throws Exception { + "Execution platform: //platform:exec"); } + @Test + public void describeCommandErrorWithSingleSkippedArgument() throws Exception { + String[] args = new String[35]; // Long enough to make us skip 1 argument below. + args[0] = "some_command"; + for (int i = 1; i < args.length; i++) { + args[i] = "arg" + i; + } + Map env = new LinkedHashMap<>(); + String cwd = "/my/working/directory"; + PlatformInfo executionPlatform = + PlatformInfo.builder().setLabel(Label.parseAbsoluteUnchecked("//platform:exec")).build(); + String message = + CommandFailureUtils.describeCommandError( + false, Arrays.asList(args), env, cwd, executionPlatform); + assertThat(message) + .isEqualTo( + "error executing command some_command arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9" + + " arg10 arg11 arg12 arg13 arg14 arg15 arg16 arg17 arg18 arg19 arg20 arg21 arg22" + + " arg23 arg24 arg25 arg26 arg27 arg28 arg29 arg30 arg31 arg32 arg33 ..." + + " (remaining 1 argument skipped)"); + } + @Test public void describeCommandFailure() throws Exception { String[] args = new String[3]; diff --git a/src/test/java/com/google/devtools/build/lib/util/CommandUtilsTest.java b/src/test/java/com/google/devtools/build/lib/util/CommandUtilsTest.java index 1f88c4952098e5..9acdd856d25439 100644 --- a/src/test/java/com/google/devtools/build/lib/util/CommandUtilsTest.java +++ b/src/test/java/com/google/devtools/build/lib/util/CommandUtilsTest.java @@ -43,14 +43,14 @@ public void longCommand() throws Exception { assertThrows(CommandException.class, () -> new Command(args, env, directory).execute()); String message = CommandUtils.describeCommandError(false, exception.getCommand()); String verboseMessage = CommandUtils.describeCommandError(true, exception.getCommand()); - assertThat(message) - .isEqualTo( - "error executing command this_command_will_not_be_found arg1 " - + "arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 " - + "arg11 arg12 arg13 arg14 arg15 arg16 arg17 arg18 " - + "arg19 arg20 arg21 arg22 arg23 arg24 arg25 arg26 " - + "arg27 arg28 arg29 arg30 " - + "... (remaining 9 argument(s) skipped)"); + assertThat(message) + .isEqualTo( + "error executing command this_command_will_not_be_found arg1 " + + "arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 " + + "arg11 arg12 arg13 arg14 arg15 arg16 arg17 arg18 " + + "arg19 arg20 arg21 arg22 arg23 arg24 arg25 arg26 " + + "arg27 arg28 arg29 arg30 " + + "... (remaining 9 arguments skipped)"); assertThat(verboseMessage) .isEqualTo( "error executing command \n"