From be31bb8527a93659fb7540d8f4fc087e3b60411c Mon Sep 17 00:00:00 2001 From: ahumesky Date: Thu, 26 Jul 2018 13:37:45 -0700 Subject: Modify --subcommands to allow pretty printing the arguments of a subcommand as a list, rather than as a single line (i.e., newline delimited rather than space delimited). Before: SUBCOMMAND: # //src/main/java/com/google/devtools/build/lib:string_util [action 'Building src/main/java/com/google/devtools/build/lib/libstring_util.jar (2 source files) [for host]'] (cd /tmp/devbazel_output_base/execroot/io_bazel && \ exec env - \ LC_CTYPE=en_US.UTF-8 \ external/embedded_jdk/bin/java -XX:+UseParallelOldGC -XX:-CompactStrings '--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED' '--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED' '--patch-module=java.compiler=external/bazel_tools/third_party/java/jdk/langtools/java_compiler.jar' '--patch-module=jdk.compiler=external/bazel_tools/third_party/java/jdk/langtools/jdk_compiler.jar' '--add-opens=java.base/java.nio=ALL-UNNAMED' -jar external/bazel_tools/tools/jdk/JavaBuilder_deploy.jar @bazel-out/host/bin/src/main/java/com/google/devtools/build/lib/libstring_util.jar-2.params) After: SUBCOMMAND: # //src/main/java/com/google/devtools/build/lib:string_util [action 'Building src/main/java/com/google/devtools/build/lib/libstring_util.jar (2 source files) [for host]'] (cd /tmp/devbazel_output_base/execroot/io_bazel && \ exec env - \ LC_CTYPE=en_US.UTF-8 \ external/embedded_jdk/bin/java \ -XX:+UseParallelOldGC \ -XX:-CompactStrings \ '--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED' \ '--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED' \ '--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED' \ '--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED' \ '--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED' \ '--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED' \ '--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED' \ '--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED' \ '--patch-module=java.compiler=external/bazel_tools/third_party/java/jdk/langtools/java_compiler.jar' \ '--patch-module=jdk.compiler=external/bazel_tools/third_party/java/jdk/langtools/jdk_compiler.jar' \ '--add-opens=java.base/java.nio=ALL-UNNAMED' \ -jar \ external/bazel_tools/tools/jdk/JavaBuilder_deploy.jar \ @bazel-out/host/bin/src/main/java/com/google/devtools/build/lib/libstring_util.jar-2.params) RELNOTES: --subcommands can now take a "pretty_print" value ("--subcommands=pretty_print") to print the arguments of subcommands as a list for easier reading. PiperOrigin-RevId: 206213009 --- .../build/lib/actions/util/DummyExecutor.java | 3 +- .../build/lib/util/CommandFailureUtilsTest.java | 41 +++++++++++++++++++--- 2 files changed, 39 insertions(+), 5 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/DummyExecutor.java b/src/test/java/com/google/devtools/build/lib/actions/util/DummyExecutor.java index 7b09b6b3f5..6703fdd413 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/util/DummyExecutor.java +++ b/src/test/java/com/google/devtools/build/lib/actions/util/DummyExecutor.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.actions.util; import com.google.common.eventbus.EventBus; import com.google.devtools.build.lib.actions.ActionContext; +import com.google.devtools.build.lib.actions.ActionExecutionContext.ShowSubcommands; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.clock.Clock; @@ -87,7 +88,7 @@ public final class DummyExecutor implements Executor { } @Override - public boolean reportsSubcommands() { + public ShowSubcommands reportsSubcommands() { throw new UnsupportedOperationException(); } } 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 7ce30ec51d..f13758eecc 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 @@ -16,7 +16,7 @@ package com.google.devtools.build.lib.util; import static com.google.common.truth.Truth.assertThat; import java.util.Arrays; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,9 +34,9 @@ public class CommandFailureUtilsTest { } args[7] = "with spaces"; // Test embedded spaces in argument. args[9] = "*"; // Test shell meta characters. - Map env = new HashMap<>(); - env.put("PATH", "/usr/bin:/bin:/sbin"); + Map env = new LinkedHashMap<>(); env.put("FOO", "foo"); + env.put("PATH", "/usr/bin:/bin:/sbin"); String cwd = "/my/working/directory"; String message = CommandFailureUtils.describeCommandError(false, Arrays.asList(args), env, cwd); String verboseMessage = @@ -69,7 +69,7 @@ public class CommandFailureUtilsTest { args[0] = "/bin/sh"; args[1] = "-c"; args[2] = "echo Some errors 1>&2; echo Some output; exit 42"; - Map env = new HashMap<>(); + Map env = new LinkedHashMap<>(); env.put("FOO", "foo"); env.put("PATH", "/usr/bin:/bin:/sbin"); String cwd = null; @@ -89,4 +89,37 @@ public class CommandFailureUtilsTest { + " PATH=/usr/bin:/bin:/sbin \\\n" + " /bin/sh -c 'echo Some errors 1>&2; echo Some output; exit 42')"); } + + @Test + public void describeCommandPrettyPrintArgs() throws Exception { + + String[] args = new String[6]; + args[0] = "some_command"; + for (int i = 1; i < args.length; i++) { + args[i] = "arg" + i; + } + args[3] = "with spaces"; // Test embedded spaces in argument. + args[4] = "*"; // Test shell meta characters. + + Map env = new LinkedHashMap<>(); + env.put("FOO", "foo"); + env.put("PATH", "/usr/bin:/bin:/sbin"); + + String cwd = "/my/working/directory"; + String message = CommandFailureUtils.describeCommand( + CommandDescriptionForm.COMPLETE, true, Arrays.asList(args), env, cwd); + + assertThat(message) + .isEqualTo( + "(cd /my/working/directory && \\\n" + + " exec env - \\\n" + + " FOO=foo \\\n" + + " PATH=/usr/bin:/bin:/sbin \\\n" + + " some_command \\\n" + + " arg1 \\\n" + + " arg2 \\\n" + + " 'with spaces' \\\n" + + " '*' \\\n" + + " arg5)"); + } } -- cgit v1.2.3