From 6b68f66809bbd0efac73f1f99fa48575868a8da8 Mon Sep 17 00:00:00 2001 From: Bubunyo Nyavor Date: Sun, 8 Mar 2026 05:46:15 +0100 Subject: [PATCH] dot notation --- cli/analyze.go | 4 +- cli/cli_test.go | 10 +-- cli/output.go | 140 ++++++++++++++++++++++++++++++++++++++++- testproject/impact.png | Bin 0 -> 48399 bytes 4 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 testproject/impact.png diff --git a/cli/analyze.go b/cli/analyze.go index fb40ece..5caecc6 100644 --- a/cli/analyze.go +++ b/cli/analyze.go @@ -20,7 +20,7 @@ and outputs which services are affected by the detected changes.`, } func init() { - analyzeCmd.Flags().StringP("format", "f", "text", "Output format: text, json") + analyzeCmd.Flags().StringP("format", "f", "text", "Output format: text, json, dot") analyzeCmd.Flags().StringP("output", "o", "", "Output file (default: stdout)") analyzeCmd.Flags().BoolP("verbose", "v", false, "Include debug info in output") analyzeCmd.Flags().Bool("no-cache", false, "Ignore baseline, treat everything as new") @@ -86,7 +86,7 @@ func runAnalyze(cmd *cobra.Command, _ []string) error { format, _ := cmd.Flags().GetString("format") output, _ := cmd.Flags().GetString("output") - writeOutput(result, format, output) + writeOutput(result, graph, format, output) return nil } diff --git a/cli/cli_test.go b/cli/cli_test.go index e2c747a..c0e1ff0 100644 --- a/cli/cli_test.go +++ b/cli/cli_test.go @@ -45,7 +45,7 @@ func TestWriteOutput_JSON_ToStdout(t *testing.T) { Impact: types.Impact{ServicesToBuild: []string{}}, } // Should not panic. - assert.NotPanics(t, func() { writeOutput(result, "json", "") }) + assert.NotPanics(t, func() { writeOutput(result, nil, "json", "") }) } func TestWriteOutput_Text_ToStdout(t *testing.T) { @@ -53,7 +53,7 @@ func TestWriteOutput_Text_ToStdout(t *testing.T) { HasChanges: false, Impact: types.Impact{ServicesToBuild: []string{}}, } - assert.NotPanics(t, func() { writeOutput(result, "text", "") }) + assert.NotPanics(t, func() { writeOutput(result, nil, "text", "") }) } func TestWriteOutput_JSON_ToFile(t *testing.T) { @@ -65,7 +65,7 @@ func TestWriteOutput_JSON_ToFile(t *testing.T) { Impact: types.Impact{ServicesToBuild: []string{"service-a"}}, } - writeOutput(result, "json", path) + writeOutput(result, nil, "json", path) data, err := os.ReadFile(path) require.NoError(t, err) @@ -81,7 +81,7 @@ func TestWriteOutput_Text_ToFile(t *testing.T) { Impact: types.Impact{ServicesToBuild: []string{}}, } - writeOutput(result, "text", path) + writeOutput(result, nil, "text", path) data, err := os.ReadFile(path) require.NoError(t, err) @@ -96,7 +96,7 @@ func TestWriteOutput_UnknownFormat_FallsBackToJSON(t *testing.T) { Impact: types.Impact{ServicesToBuild: []string{}}, } - writeOutput(result, "unknown", path) + writeOutput(result, nil, "unknown", path) data, err := os.ReadFile(path) require.NoError(t, err) diff --git a/cli/output.go b/cli/output.go index 1a7fa4f..4e8de23 100644 --- a/cli/output.go +++ b/cli/output.go @@ -12,11 +12,13 @@ import ( // writeOutput serialises result in the requested format and writes it to // outputPath (or stdout if outputPath is empty). -func writeOutput(result *types.Result, format, outputPath string) { +func writeOutput(result *types.Result, graph *types.CallGraph, format, outputPath string) { var output []byte switch format { case "text": output = []byte(formatText(result)) + case "dot": + output = []byte(formatDot(result, graph)) default: var marshalErr error output, marshalErr = json.MarshalIndent(result, "", " ") @@ -67,3 +69,139 @@ func formatText(result *types.Result) string { } return sb.String() } + +// formatDot renders the impact as a Graphviz DOT digraph. +// +// Layout: +// - One cluster (subgraph) per service that needs to be rebuilt. +// - Nodes are short function names; changed functions are filled red, +// transitively-affected functions are filled orange. +// - Edges represent caller → callee relationships drawn from the call graph, +// restricted to nodes that appear in the impact set. +func formatDot(result *types.Result, graph *types.CallGraph) string { + // Index changed functions for quick lookup. + changed := make(map[string]bool, len(result.Changes)) + for _, c := range result.Changes { + changed[c.Function] = true + } + + // Collect all affected functions across all owners. + affected := make(map[string]bool) + for _, fns := range result.Impact.AffectedFunctions { + for _, fn := range fns { + affected[fn] = true + } + } + // Changed functions are implicitly affected too. + for fn := range changed { + affected[fn] = true + } + + // Build a set of services to rebuild for quick lookup. + rebuiltServices := make(map[string]bool, len(result.Impact.ServicesToBuild)) + for _, s := range result.Impact.ServicesToBuild { + rebuiltServices[s] = true + } + + // dotID converts a fully-qualified function name to a safe DOT node ID. + dotID := func(fn string) string { + r := strings.NewReplacer(".", "_", "/", "_", "-", "_", "(", "_", ")", "_") + return r.Replace(fn) + } + + // shortLabel strips the module prefix for readability. + shortLabel := func(fn string) string { + // Keep only "package.Func" — last two dot-separated segments. + parts := strings.Split(fn, "/") + if len(parts) == 0 { + return fn + } + last := parts[len(parts)-1] + return last + } + + sb := &strings.Builder{} + fmt.Fprintln(sb, "digraph buildgraph {") + fmt.Fprintln(sb, ` rankdir=LR;`) + fmt.Fprintln(sb, ` node [fontname="Helvetica", fontsize=11, style=filled, fillcolor=white];`) + fmt.Fprintln(sb, ` edge [fontsize=9];`) + fmt.Fprintln(sb) + + // Emit one cluster per owner that has affected functions. + // Sort owners for deterministic output. + owners := make([]string, 0, len(result.Impact.AffectedFunctions)) + for owner := range result.Impact.AffectedFunctions { + owners = append(owners, owner) + } + sort.Strings(owners) + + clusterIdx := 0 + for _, owner := range owners { + fns := result.Impact.AffectedFunctions[owner] + if len(fns) == 0 { + continue + } + + // Determine cluster label — append "(rebuild)" for services being rebuilt. + label := owner + // Extract the last path segment as the service short name. + parts := strings.Split(owner, "/") + shortOwner := parts[len(parts)-1] + if rebuiltServices[shortOwner] { + label = owner + " [rebuild]" + } + + fmt.Fprintf(sb, " subgraph cluster_%d {\n", clusterIdx) + fmt.Fprintf(sb, " label=%q;\n", label) + fmt.Fprintln(sb, ` style=rounded;`) + if rebuiltServices[shortOwner] { + fmt.Fprintln(sb, ` color=red;`) + } else { + fmt.Fprintln(sb, ` color=orange;`) + } + fmt.Fprintln(sb) + + seen := make(map[string]bool) + for _, fn := range fns { + if seen[fn] { + continue + } + seen[fn] = true + id := dotID(fn) + lbl := shortLabel(fn) + if changed[fn] { + fmt.Fprintf(sb, " %s [label=%q, fillcolor=\"#ff6b6b\", fontcolor=white];\n", id, lbl) + } else { + fmt.Fprintf(sb, " %s [label=%q, fillcolor=\"#ffd580\"];\n", id, lbl) + } + } + fmt.Fprintln(sb, " }") + fmt.Fprintln(sb) + clusterIdx++ + } + + // Emit edges: for every affected function, draw edges to its callees + // that are also in the affected set, using the call graph. + fmt.Fprintln(sb, " // edges") + edgesSeen := make(map[string]bool) + for fn := range affected { + node, ok := graph.Nodes[fn] + if !ok { + continue + } + for _, dep := range node.Deps { + if !affected[dep.FullName] { + continue + } + key := dotID(fn) + "->" + dotID(dep.FullName) + if edgesSeen[key] { + continue + } + edgesSeen[key] = true + fmt.Fprintf(sb, " %s -> %s;\n", dotID(fn), dotID(dep.FullName)) + } + } + + fmt.Fprintln(sb, "}") + return sb.String() +} diff --git a/testproject/impact.png b/testproject/impact.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3c14bb7a88925abce115fab06d4c392822b29b GIT binary patch literal 48399 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 literal 0 HcmV?d00001