Skip to content

Commit

Permalink
standardize graph output indentation with 2 spaces
Browse files Browse the repository at this point in the history
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 bazelbuild#8007.

PiperOrigin-RevId: 251296052
  • Loading branch information
evie404 authored and copybara-github committed Jun 3, 2019
1 parent 3ed9d36 commit 4ca768e
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@ public void endVisit() {
public void visitEdge(Node<T> lhs, Node<T> 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<T> node) {
out.println("\"" + disp.serialize(node) + "\"");
out.println(" \"" + disp.serialize(node) + "\"");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public void visitEdge(Node<Target> lhs, Node<Target> rhs) {
getConditionsGraphLabel(
ImmutableSet.of(lhs), ImmutableSet.of(rhs), conditionalEdges);
if (!outputLabel.isEmpty()) {
out.printf(" [label=\"%s\"];\n", outputLabel);
out.printf(" [label=\"%s\"];\n", outputLabel);
}
}
},
Expand Down Expand Up @@ -195,7 +195,7 @@ public void visitEdge(Node<Set<Node<Target>>> lhs, Node<Set<Node<Target>>> rhs)
String outputLabel =
getConditionsGraphLabel(lhs.getLabel(), rhs.getLabel(), conditionalEdges);
if (!outputLabel.isEmpty()) {
out.printf(" [label=\"%s\"];\n", outputLabel);
out.printf(" [label=\"%s\"];\n", outputLabel);
}
}
},
Expand Down

0 comments on commit 4ca768e

Please sign in to comment.