[tools] cmd/digraph: use graph.NewTranspose

4 views
Skip to first unread message

Austin Clements (Gerrit)

unread,
Feb 19, 2026, 6:54:05 PM (5 days ago) Feb 19
to Alan Donovan, goph...@pubsubhelper.golang.org, Austin Clements, golang-co...@googlegroups.com
Attention needed from Alan Donovan

Austin Clements has uploaded the change for review

Austin Clements would like Alan Donovan to review this change.

Commit message

cmd/digraph: use graph.NewTranspose
Change-Id: Ie27bb2dd6bdf211860fd271d060d0bcfcc5628e2

Change diff

diff --git a/cmd/digraph/digraph.go b/cmd/digraph/digraph.go
index b11ab77..5253ae8 100644
--- a/cmd/digraph/digraph.go
+++ b/cmd/digraph/digraph.go
@@ -84,12 +84,6 @@
return nodes
}

-func (s nodeset) addAll(x nodeset) {
- for node := range x {
- s[node] = true
- }
-}
-
// A digraph maps nodes to the non-nil set of their immediate successors.
type digraph map[string]nodeset

@@ -125,17 +119,6 @@
return nodelist(slices.Collect(g.All()))
}

-func (g digraph) transpose() digraph {
- rev := make(digraph)
- for node, edges := range g {
- rev.addNode(node)
- for succ := range edges {
- rev.addEdges(succ, node)
- }
- }
- return rev
-}
-
func (g digraph) sccs() []nodeset {
var sccs []nodeset
for _, comp := range graph.SCCs(g) {
@@ -256,9 +239,13 @@
for node := range g {
nodes[node] = true
}
- rev := g.transpose()
+ rev := graph.NewTranspose(g)
for _, node := range nodes.sort() {
- fmt.Fprintf(stdout, "%d\t%d\t%s\n", len(rev[node]), len(g[node]), node)
+ inDegree := 0
+ for range rev.Out(node) {
+ inDegree++
+ }
+ fmt.Fprintf(stdout, "%d\t%d\t%s\n", inDegree, len(g[node]), node)
}

case "transpose":
@@ -266,8 +253,9 @@
return fmt.Errorf("usage: digraph transpose")
}
var revEdges []string
- for node, succs := range g.transpose() {
- for succ := range succs {
+ rev := graph.NewTranspose(g)
+ for node := range rev.All() {
+ for _, succ := range rev.Out(node) {
revEdges = append(revEdges, fmt.Sprintf("%s %s", node, succ))
}
}
@@ -280,17 +268,18 @@
if len(args) == 0 {
return fmt.Errorf("usage: digraph %s <node> ... ", cmd)
}
- g := g
+ var gr graph.Graph[string] = g
if cmd == "preds" {
- g = g.transpose()
+ gr = graph.NewTranspose(g)
}
result := make(nodeset)
for _, root := range args {
- edges := g[root]
- if edges == nil {
+ if g[root] == nil {
return fmt.Errorf("no such node %q", root)
}
- result.addAll(edges)
+ for _, succ := range gr.Out(root) {
+ result[succ] = true
+ }
}
result.sort().println("\n")

@@ -305,11 +294,11 @@
}
roots[root] = true
}
- g := g
+ var gr graph.Graph[string] = g
if cmd == "reverse" {
- g = g.transpose()
+ gr = graph.NewTranspose(g)
}
- nodeset(graph.Reachable(g, roots.sort()...)).sort().println("\n")
+ nodeset(graph.Reachable(gr, roots.sort()...)).sort().println("\n")

case "somepath":
if len(args) != 2 {
@@ -387,9 +376,9 @@
}
}

- gtrans := g.transpose()
+ gtrans := graph.NewTranspose(g)
for from := range graph.Reachable(gtrans, node) {
- for to := range gtrans[from] {
+ for _, to := range gtrans.Out(from) {
edges[fmt.Sprintf("%s %s", to, from)] = struct{}{}
}
}

Change information

Files:
  • M cmd/digraph/digraph.go
Change size: M
Delta: 1 file changed, 20 insertions(+), 31 deletions(-)
Open in Gerrit

Related details

Attention is currently required from:
  • Alan Donovan
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newchange
Gerrit-Project: tools
Gerrit-Branch: master
Gerrit-Change-Id: Ie27bb2dd6bdf211860fd271d060d0bcfcc5628e2
Gerrit-Change-Number: 747368
Gerrit-PatchSet: 1
Gerrit-Owner: Austin Clements <aus...@google.com>
Gerrit-Reviewer: Alan Donovan <adon...@google.com>
Gerrit-Reviewer: Austin Clements <aus...@google.com>
Gerrit-Attention: Alan Donovan <adon...@google.com>
unsatisfied_requirement
satisfied_requirement
open
diffy

Austin Clements (Gerrit)

unread,
Feb 24, 2026, 10:03:24 PM (7 hours ago) Feb 24
to Austin Clements, goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com
Attention needed from Alan Donovan

Austin Clements uploaded new patchset

Austin Clements uploaded patch set #2 to this change.
Following approvals got outdated and were removed:
  • TryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
Open in Gerrit

Related details

Attention is currently required from:
  • Alan Donovan
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: tools
Gerrit-Branch: master
Gerrit-Change-Id: Ie27bb2dd6bdf211860fd271d060d0bcfcc5628e2
Gerrit-Change-Number: 747368
Gerrit-PatchSet: 2
Gerrit-Owner: Austin Clements <aus...@google.com>
Gerrit-Reviewer: Alan Donovan <adon...@google.com>
Gerrit-Reviewer: Austin Clements <aus...@google.com>
Gerrit-Attention: Alan Donovan <adon...@google.com>
unsatisfied_requirement
satisfied_requirement
open
diffy
Reply all
Reply to author
Forward
0 new messages