From 4ca768e9f87701fb92598d0a8325a5fc8881a852 Mon Sep 17 00:00:00 2001 From: Ricky Pai Date: Mon, 3 Jun 2019 13:24:46 -0700 Subject: [PATCH] standardize graph output indentation with 2 spaces Currently, when outputting graphs from Bazel with `bazel query --output=graph`, the indentations for different types of lines are inconsistent: - `node` is indented with 2 spaces - edges and vertices are not indented - labels are indented with 1 space Example using [rules_go](https://github.com/bazelbuild/rules_go): ``` $ bazel query "deps(//gg/platform:darwin)" --output=graph digraph mygraph { node [shape=box]; "//gg/platform:darwin" "//gg/platform:darwin" -> "//gg/toolchain:darwin" "//gg/toolchain:darwin" "//gg/toolchain:darwin" -> "@bazel_tools//platforms:osx" "@bazel_tools//platforms:osx" "@bazel_tools//platforms:osx" -> "@bazel_tools//platforms:os" "@bazel_tools//platforms:os" } Loading: 0 packages loaded ``` It would be nice for the indentations to be present (for edges and vertices), and consistent. As for the indentation scheme, it seems inconclusive as to which type the language prefers: - the [DOT Language Spec](https://www.graphviz.org/doc/info/lang.html) does not really specify tabs or spaces, but the examples used either contained no indentation (!) or one with 2 spaces - the official [examples](https://www.graphviz.org/gallery/) contain samples of no indentation, tabs, or 2 spaces, with tabs being most popular - the [Wikipedia page](https://en.wikipedia.org/wiki/DOT_(graph_description_language)) uses tabs I'm using 2 spaces to conform with skylark. This is the result from the same query with this PR: ```plaintext $ /Users/ricky/workspace/bazel/bazel-bin/src/bazel query "deps(//gg/platform:darwin)" --output=graph Starting local Bazel server and connecting to it... DEBUG: /private/var/tmp/_bazel_ricky/5c63e3be3c60ec773878bdf16f25adcc/external/bazel_toolchains/rules/version_check.bzl:45:9: Current running Bazel is not a release version and one was not defined explicitly in rbe_autoconfig target. Falling back to '0.23.0' digraph mygraph { node [shape=box]; "//gg/platform:darwin" "//gg/platform:darwin" -> "//gg/toolchain:darwin" "//gg/toolchain:darwin" "//gg/toolchain:darwin" -> "@bazel_tools//platforms:osx" "@bazel_tools//platforms:osx" "@bazel_tools//platforms:osx" -> "@bazel_tools//platforms:os" "@bazel_tools//platforms:os" } Loading: 3 packages loaded ``` Closes #8007. PiperOrigin-RevId: 251296052 --- .../com/google/devtools/build/lib/graph/DotOutputVisitor.java | 4 ++-- .../build/lib/query2/query/output/GraphOutputFormatter.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/graph/DotOutputVisitor.java b/src/main/java/com/google/devtools/build/lib/graph/DotOutputVisitor.java index cc26e9b07a0dea..4238feeed48dfb 100644 --- a/src/main/java/com/google/devtools/build/lib/graph/DotOutputVisitor.java +++ b/src/main/java/com/google/devtools/build/lib/graph/DotOutputVisitor.java @@ -58,11 +58,11 @@ public void endVisit() { public void visitEdge(Node lhs, Node rhs) { String s_lhs = disp.serialize(lhs); String s_rhs = disp.serialize(rhs); - out.println("\"" + s_lhs + "\" -> \"" + s_rhs + "\""); + out.println(" \"" + s_lhs + "\" -> \"" + s_rhs + "\""); } @Override public void visitNode(Node node) { - out.println("\"" + disp.serialize(node) + "\""); + out.println(" \"" + disp.serialize(node) + "\""); } } diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/GraphOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/GraphOutputFormatter.java index dcddd82419d5c8..ecd028b0dc4c66 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/query/output/GraphOutputFormatter.java +++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/GraphOutputFormatter.java @@ -103,7 +103,7 @@ public void visitEdge(Node lhs, Node rhs) { getConditionsGraphLabel( ImmutableSet.of(lhs), ImmutableSet.of(rhs), conditionalEdges); if (!outputLabel.isEmpty()) { - out.printf(" [label=\"%s\"];\n", outputLabel); + out.printf(" [label=\"%s\"];\n", outputLabel); } } }, @@ -195,7 +195,7 @@ public void visitEdge(Node>> lhs, Node>> rhs) String outputLabel = getConditionsGraphLabel(lhs.getLabel(), rhs.getLabel(), conditionalEdges); if (!outputLabel.isEmpty()) { - out.printf(" [label=\"%s\"];\n", outputLabel); + out.printf(" [label=\"%s\"];\n", outputLabel); } } },