From 189dd1a40a13bb3136cd3511bf2f67e9a60033f8 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 09:59:00 -0600 Subject: [PATCH 01/19] checkpoint aquery_git_diff --- cmd/aquerydiff/config.go | 3 ++ cmd/aquerydiff/main.go | 40 ++++++++++++++- examples/simple/BUILD.bazel | 10 ++++ pkg/action/BUILD.bazel | 1 + pkg/action/output_pair.go | 9 +++- pkg/report/html.go | 9 +++- rules/BUILD.bazel | 0 rules/defs.bzl | 100 ++++++++++++++++++++++++++++++++++++ 8 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 examples/simple/BUILD.bazel create mode 100644 rules/BUILD.bazel create mode 100644 rules/defs.bzl diff --git a/cmd/aquerydiff/config.go b/cmd/aquerydiff/config.go index d5e37b8..e80c58a 100644 --- a/cmd/aquerydiff/config.go +++ b/cmd/aquerydiff/config.go @@ -4,4 +4,7 @@ type config struct { beforeFile string afterFile string reportDir string + port string + serve bool + open bool } diff --git a/cmd/aquerydiff/main.go b/cmd/aquerydiff/main.go index 0c8fea7..0678e91 100644 --- a/cmd/aquerydiff/main.go +++ b/cmd/aquerydiff/main.go @@ -4,7 +4,10 @@ import ( "flag" "fmt" "log" + "net/http" "os" + "os/exec" + "runtime" anpb "github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2" "github.com/stackb/bazel-aquery-differ/pkg/action" @@ -27,7 +30,10 @@ func run(args []string) error { flags.StringVar(&config.beforeFile, "before", "", "filepath to aquery file (before)") flags.StringVar(&config.afterFile, "after", "", "filepath to aquery file (after)") flags.StringVar(&config.reportDir, "report_dir", "", "path to directory where report files should be written") - if err := flags.Parse(os.Args[1:]); err != nil { + flags.StringVar(&config.port, "port", "8000", "port number to use when serving content") + flags.BoolVar(&config.serve, "serve", false, "start webserver") + flags.BoolVar(&config.open, "open", false, "open browser to webserver URL") + if err := flags.Parse(args); err != nil { return err } @@ -99,5 +105,37 @@ func run(args []string) error { log.Printf("aquerydiff report available at <%s>", config.reportDir) + if config.serve { + log.Printf("Starting webserver on port %s, serving %s", config.port, config.reportDir) + http.Handle("/", http.FileServer(http.Dir(config.reportDir))) + + if config.open { + url := "http://localhost:" + config.port + log.Printf("Opening browser to %s", url) + if err := openBrowser(url); err != nil { + log.Printf("Failed to open browser: %v", err) + } + } + + return http.ListenAndServe(":"+config.port, nil) + } + return nil } + +func openBrowser(url string) error { + var cmd string + var args []string + + switch runtime.GOOS { + case "windows": + cmd = "cmd" + args = []string{"/c", "start"} + case "darwin": + cmd = "open" + default: // "linux", "freebsd", "openbsd", "netbsd" + cmd = "xdg-open" + } + args = append(args, url) + return exec.Command(cmd, args...).Start() +} diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel new file mode 100644 index 0000000..2960a83 --- /dev/null +++ b/examples/simple/BUILD.bazel @@ -0,0 +1,10 @@ +load("//rules:defs.bzl", "aquery_git_diff") + +aquery_git_diff( + name = "simple", + after = "HEAD^", + before = "HEAD", + targets = [ + "//cmd/aquerydiff", + ], +) diff --git a/pkg/action/BUILD.bazel b/pkg/action/BUILD.bazel index c5b0e44..8ce8b31 100644 --- a/pkg/action/BUILD.bazel +++ b/pkg/action/BUILD.bazel @@ -22,6 +22,7 @@ go_library( "@com_github_hexops_gotextdiff//:go_default_library", "@com_github_hexops_gotextdiff//myers:go_default_library", "@com_github_hexops_gotextdiff//span:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/pkg/action/output_pair.go b/pkg/action/output_pair.go index d8119fe..2546e73 100644 --- a/pkg/action/output_pair.go +++ b/pkg/action/output_pair.go @@ -6,6 +6,7 @@ import ( "github.com/hexops/gotextdiff" "github.com/hexops/gotextdiff/myers" "github.com/hexops/gotextdiff/span" + "google.golang.org/protobuf/proto" anpb "github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2" dipb "github.com/stackb/bazel-aquery-differ/build/stack/bazel/aquery/differ" @@ -32,10 +33,14 @@ func (p *OutputPair) UnifiedDiff() gotextdiff.Unified { var a string var b string if p.Before != nil { - a = protobuf.FormatProtoText(p.Before) + beforeCopy := proto.Clone(p.Before).(*dipb.Action) + beforeCopy.Id = "" + a = protobuf.FormatProtoText(beforeCopy) } if p.After != nil { - b = protobuf.FormatProtoText(p.After) + afterCopy := proto.Clone(p.After).(*dipb.Action) + afterCopy.Id = "" + b = protobuf.FormatProtoText(afterCopy) } edits := myers.ComputeEdits(span.URI(p.Output), a, b) return gotextdiff.ToUnified(p.Output, p.Output, a, edits) diff --git a/pkg/report/html.go b/pkg/report/html.go index d87b345..52312f3 100644 --- a/pkg/report/html.go +++ b/pkg/report/html.go @@ -129,11 +129,18 @@ func (r *Html) emitOutputPairDiff(dir string, pair *action.OutputPair) error { log.Printf("Unified Diff %s", filename) unifiedDiff := fmt.Sprint(pair.UnifiedDiff()) + if unifiedDiff == "" { + unifiedDiff = "EQUAL" + } if err := os.WriteFile(filename+".diff.txt", []byte(unifiedDiff), fs.ModePerm); err != nil { return err } log.Printf("Cmp Diff %s", filename) - if err := os.WriteFile(filename+".cmp.txt", []byte(pair.Diff()), fs.ModePerm); err != nil { + cmpDiff := pair.Diff() + if cmpDiff == "" { + cmpDiff = "EQUAL" + } + if err := os.WriteFile(filename+".cmp.txt", []byte(cmpDiff), fs.ModePerm); err != nil { return err } return nil diff --git a/rules/BUILD.bazel b/rules/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/rules/defs.bzl b/rules/defs.bzl new file mode 100644 index 0000000..ac607be --- /dev/null +++ b/rules/defs.bzl @@ -0,0 +1,100 @@ +def _aquery_git_diff_impl(ctx): + files = [ctx.outputs.executable] + runfiles = [ctx.executable._tool] + + ctx.actions.write( + ctx.outputs.executable, + """#!/bin/bash +set -euox pipefail + +# switch to WORKSPACE +cwd=$(PWD) +cd $BUILD_WORKING_DIRECTORY + +# ensure no uncommitted changes +git diff --exit-code --quiet && git diff --cached --exit-code --quiet || {{ + echo "Error: Uncommitted changes detected" + # exit 1 +}} + +# create temporary directory for aquery files +tmpdir="${{TMPDIR:-/tmp}}/aquery_diff_$$" +mkdir -p "$tmpdir" +echo "Using temporary directory: $tmpdir" + +# store current git commit +original_commit=$(git rev-parse HEAD) +echo "Original commit: $original_commit" + +# checkout before commit and run aquery +echo "Checking out before commit: {before_commit}" +git checkout {before_commit} +{bazel} aquery --output=proto {targets} > "$tmpdir/before.pb" + +# checkout after commit and run aquery +echo "Checking out after commit: {after_commit}" +git checkout {after_commit} +{bazel} aquery --output=proto {targets} > "$tmpdir/after.pb" + +# restore original commit +echo "Restoring original commit: $original_commit" +git checkout $original_commit + +# run the tool +"$cwd/{tool}" --before "$tmpdir/before.pb" --after "$tmpdir/after.pb" --report_dir=$cwd {serve_flag} {open_flag} + +# cleanup temporary directory +rm -rf "$tmpdir" +""".format( + bazel = ctx.attr.bazel, + tool = ctx.executable._tool.short_path, + targets = " ".join(ctx.attr.targets), + before_commit = ctx.attr.before, + after_commit = ctx.attr.after, + serve_flag = "--serve" if ctx.attr.serve else "", + open_flag = "--open" if ctx.attr.open else "", + ), + is_executable = True, + ) + + return [ + DefaultInfo( + files = depset(files), + runfiles = ctx.runfiles(files = runfiles), + ), + ] + +aquery_git_diff = rule( + implementation = _aquery_git_diff_impl, + attrs = { + "before": attr.string( + doc = "the baseline git commit", + ), + "after": attr.string( + doc = "the after git commit", + ), + "targets": attr.string_list( + doc = "list of targets to build", + mandatory = True, + ), + "bazel": attr.string( + doc = "the bazel executable", + default = "bazel", + ), + "serve": attr.bool( + doc = "start webserver", + default = True, + ), + "open": attr.bool( + doc = "open browser to webserver URL", + default = True, + ), + "_tool": attr.label( + doc = "the aquerydiff tool", + cfg = "exec", + default = "//cmd/aquerydiff", + executable = True, + ), + }, + executable = True, +) From 544fe18e515f0fa268567b5b6244fae756dbb7ea Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 10:01:48 -0600 Subject: [PATCH 02/19] update example --- examples/simple/BUILD.bazel | 4 ++-- rules/defs.bzl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index 2960a83..7dfe7bd 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -2,8 +2,8 @@ load("//rules:defs.bzl", "aquery_git_diff") aquery_git_diff( name = "simple", - after = "HEAD^", - before = "HEAD", + after = "HEAD", + before = "189dd1a40a13bb3136cd3511bf2f67e9a60033f8", targets = [ "//cmd/aquerydiff", ], diff --git a/rules/defs.bzl b/rules/defs.bzl index ac607be..242cfde 100644 --- a/rules/defs.bzl +++ b/rules/defs.bzl @@ -14,7 +14,7 @@ cd $BUILD_WORKING_DIRECTORY # ensure no uncommitted changes git diff --exit-code --quiet && git diff --cached --exit-code --quiet || {{ echo "Error: Uncommitted changes detected" - # exit 1 + exit 1 }} # create temporary directory for aquery files From a771ee789340aa3164d86491728828afeb5973cb Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 10:05:33 -0600 Subject: [PATCH 03/19] add target --- cmd/aquerydiff/config.go | 1 + cmd/aquerydiff/main.go | 2 ++ examples/simple/BUILD.bazel | 4 +--- pkg/report/html.go | 1 + pkg/report/index.html.tmpl | 4 ++-- rules/defs.bzl | 12 ++++++------ 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cmd/aquerydiff/config.go b/cmd/aquerydiff/config.go index e80c58a..53b4907 100644 --- a/cmd/aquerydiff/config.go +++ b/cmd/aquerydiff/config.go @@ -1,6 +1,7 @@ package main type config struct { + target string beforeFile string afterFile string reportDir string diff --git a/cmd/aquerydiff/main.go b/cmd/aquerydiff/main.go index 0678e91..ea24d23 100644 --- a/cmd/aquerydiff/main.go +++ b/cmd/aquerydiff/main.go @@ -27,6 +27,7 @@ func run(args []string) error { var config config flags := flag.NewFlagSet("aquerydiff", flag.ExitOnError) + flags.StringVar(&config.target, "target", "", "the target under analysis") flags.StringVar(&config.beforeFile, "before", "", "filepath to aquery file (before)") flags.StringVar(&config.afterFile, "after", "", "filepath to aquery file (after)") flags.StringVar(&config.reportDir, "report_dir", "", "path to directory where report files should be written") @@ -87,6 +88,7 @@ func run(args []string) error { } r := report.Html{ + Target: config.target, BeforeFile: config.beforeFile, AfterFile: config.afterFile, Before: beforeGraph, diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index 7dfe7bd..be909f8 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -4,7 +4,5 @@ aquery_git_diff( name = "simple", after = "HEAD", before = "189dd1a40a13bb3136cd3511bf2f67e9a60033f8", - targets = [ - "//cmd/aquerydiff", - ], + target = "//cmd/aquerydiff", ) diff --git a/pkg/report/html.go b/pkg/report/html.go index 52312f3..a6f2f99 100644 --- a/pkg/report/html.go +++ b/pkg/report/html.go @@ -17,6 +17,7 @@ import ( ) type Html struct { + Target string BeforeFile string AfterFile string Before *action.Graph diff --git a/pkg/report/index.html.tmpl b/pkg/report/index.html.tmpl index 22b2c04..fabf010 100644 --- a/pkg/report/index.html.tmpl +++ b/pkg/report/index.html.tmpl @@ -1,12 +1,12 @@ - Aquerydiff Report + Aquerydiff {{.Target}} -

aquerydiff report

+

aquerydiff {{.Target}}

  • --before {{.BeforeFile}}
  • --after {{.AfterFile}}
  • diff --git a/rules/defs.bzl b/rules/defs.bzl index 242cfde..b4b3a8f 100644 --- a/rules/defs.bzl +++ b/rules/defs.bzl @@ -29,26 +29,26 @@ echo "Original commit: $original_commit" # checkout before commit and run aquery echo "Checking out before commit: {before_commit}" git checkout {before_commit} -{bazel} aquery --output=proto {targets} > "$tmpdir/before.pb" +{bazel} aquery --output=proto {target} > "$tmpdir/before.pb" # checkout after commit and run aquery echo "Checking out after commit: {after_commit}" git checkout {after_commit} -{bazel} aquery --output=proto {targets} > "$tmpdir/after.pb" +{bazel} aquery --output=proto {target} > "$tmpdir/after.pb" # restore original commit echo "Restoring original commit: $original_commit" git checkout $original_commit # run the tool -"$cwd/{tool}" --before "$tmpdir/before.pb" --after "$tmpdir/after.pb" --report_dir=$cwd {serve_flag} {open_flag} +"$cwd/{tool}" --target '{target}' --before "$tmpdir/before.pb" --after "$tmpdir/after.pb" --report_dir=$cwd {serve_flag} {open_flag} # cleanup temporary directory rm -rf "$tmpdir" """.format( bazel = ctx.attr.bazel, tool = ctx.executable._tool.short_path, - targets = " ".join(ctx.attr.targets), + target = ctx.attr.target, before_commit = ctx.attr.before, after_commit = ctx.attr.after, serve_flag = "--serve" if ctx.attr.serve else "", @@ -73,8 +73,8 @@ aquery_git_diff = rule( "after": attr.string( doc = "the after git commit", ), - "targets": attr.string_list( - doc = "list of targets to build", + "target": attr.string( + doc = "bazel target to aquery", mandatory = True, ), "bazel": attr.string( From ea388df36da5df2e101779a55206f5df09c48e1a Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 10:11:17 -0600 Subject: [PATCH 04/19] Override rules_go --- MODULE.bazel | 5 +++++ pkg/report/html.go | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 2d90895..081d8a1 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -12,6 +12,11 @@ bazel_dep(name = "rules_go", version = "0.57.0") bazel_dep(name = "gazelle", version = "0.45.0") bazel_dep(name = "build_stack_rules_proto", version = "4.1.0") +local_path_override( + module_name = "rules_go", + path = "/Users/pcj/go/src/github.com/bazel-contrib/rules_go", +) + # ------------------------------------------------------------------- # Configuration: Go # ------------------------------------------------------------------- diff --git a/pkg/report/html.go b/pkg/report/html.go index a6f2f99..82aee4e 100644 --- a/pkg/report/html.go +++ b/pkg/report/html.go @@ -131,7 +131,7 @@ func (r *Html) emitOutputPairDiff(dir string, pair *action.OutputPair) error { log.Printf("Unified Diff %s", filename) unifiedDiff := fmt.Sprint(pair.UnifiedDiff()) if unifiedDiff == "" { - unifiedDiff = "EQUAL" + unifiedDiff = "NONE" } if err := os.WriteFile(filename+".diff.txt", []byte(unifiedDiff), fs.ModePerm); err != nil { return err @@ -139,7 +139,7 @@ func (r *Html) emitOutputPairDiff(dir string, pair *action.OutputPair) error { log.Printf("Cmp Diff %s", filename) cmpDiff := pair.Diff() if cmpDiff == "" { - cmpDiff = "EQUAL" + cmpDiff = "NONE" } if err := os.WriteFile(filename+".cmp.txt", []byte(cmpDiff), fs.ModePerm); err != nil { return err From 8b645fc7cdd68d44bb456b19d2b816fede695e19 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 10:22:44 -0600 Subject: [PATCH 05/19] make commits mandatory --- examples/simple/BUILD.bazel | 4 ++-- rules/defs.bzl | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index be909f8..0ebec7e 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -2,7 +2,7 @@ load("//rules:defs.bzl", "aquery_git_diff") aquery_git_diff( name = "simple", - after = "HEAD", - before = "189dd1a40a13bb3136cd3511bf2f67e9a60033f8", + after = "d2b9915f8471fc4d582955bdd2930f2f86f6f4f9", + before = "a771ee789340aa3164d86491728828afeb5973cb", target = "//cmd/aquerydiff", ) diff --git a/rules/defs.bzl b/rules/defs.bzl index b4b3a8f..5ab4880 100644 --- a/rules/defs.bzl +++ b/rules/defs.bzl @@ -69,9 +69,11 @@ aquery_git_diff = rule( attrs = { "before": attr.string( doc = "the baseline git commit", + mandatory = True, ), "after": attr.string( doc = "the after git commit", + mandatory = True, ), "target": attr.string( doc = "bazel target to aquery", From 5b5c6dd93f747c81a1fe6ec7ee45e05c96cbb50a Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 10:24:14 -0600 Subject: [PATCH 06/19] dont amend the commit you just put int --- examples/simple/BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index 0ebec7e..329b41f 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -2,7 +2,7 @@ load("//rules:defs.bzl", "aquery_git_diff") aquery_git_diff( name = "simple", - after = "d2b9915f8471fc4d582955bdd2930f2f86f6f4f9", + after = "8b645fc7cdd68d44bb456b19d2b816fede695e19", before = "a771ee789340aa3164d86491728828afeb5973cb", target = "//cmd/aquerydiff", ) From 0280a7d7d85a35c24c7e9ef500b34dfe336afe97 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 10:31:41 -0600 Subject: [PATCH 07/19] disable unified diff --- pkg/report/html.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pkg/report/html.go b/pkg/report/html.go index 82aee4e..eeb0723 100644 --- a/pkg/report/html.go +++ b/pkg/report/html.go @@ -128,13 +128,15 @@ func (r *Html) emitOutputPairDiff(dir string, pair *action.OutputPair) error { return err } - log.Printf("Unified Diff %s", filename) - unifiedDiff := fmt.Sprint(pair.UnifiedDiff()) - if unifiedDiff == "" { - unifiedDiff = "NONE" - } - if err := os.WriteFile(filename+".diff.txt", []byte(unifiedDiff), fs.ModePerm); err != nil { - return err + if false { + log.Printf("Unified Diff %s", filename) + unifiedDiff := fmt.Sprint(pair.UnifiedDiff()) + if unifiedDiff == "" { + unifiedDiff = "NONE" + } + if err := os.WriteFile(filename+".diff.txt", []byte(unifiedDiff), fs.ModePerm); err != nil { + return err + } } log.Printf("Cmp Diff %s", filename) cmpDiff := pair.Diff() From d5ec401e39274360404b4f4a12daa20cd39db97d Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 10:54:30 -0600 Subject: [PATCH 08/19] use bazel 8.4.1 --- .bazelversion | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.bazelversion b/.bazelversion index 56b6be4..8bd3530 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1,2 @@ -8.3.1 +8.4.1 + From 2d7eef6459591c7b1e2c7e6a3df960b29f36ee96 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 10:58:50 -0600 Subject: [PATCH 09/19] try all deps --- examples/simple/BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index 329b41f..dcfb12d 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -4,5 +4,5 @@ aquery_git_diff( name = "simple", after = "8b645fc7cdd68d44bb456b19d2b816fede695e19", before = "a771ee789340aa3164d86491728828afeb5973cb", - target = "//cmd/aquerydiff", + target = "deps(//cmd/aquerydiff)", ) From cb16fe09382e2d88e877d8fd819e9d0377ada663 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 11:02:31 -0600 Subject: [PATCH 10/19] update example again --- examples/simple/BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index dcfb12d..451305f 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -2,7 +2,7 @@ load("//rules:defs.bzl", "aquery_git_diff") aquery_git_diff( name = "simple", - after = "8b645fc7cdd68d44bb456b19d2b816fede695e19", + after = "2d7eef6459591c7b1e2c7e6a3df960b29f36ee96", before = "a771ee789340aa3164d86491728828afeb5973cb", target = "deps(//cmd/aquerydiff)", ) From 3c6cb70ad0ddfad275516d1adadd4d6b86a2c486 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 13:05:41 -0600 Subject: [PATCH 11/19] revert to 8.3.1 --- .bazelversion | 2 +- examples/simple/BUILD.bazel | 13 ++++-- pkg/action/action.go | 1 - pkg/depset/resolver.go | 23 +++++++++- pkg/protobuf/io.go | 2 +- rules/defs.bzl | 83 +++++++++++++++++++++++++++++++++++++ 6 files changed, 116 insertions(+), 8 deletions(-) diff --git a/.bazelversion b/.bazelversion index 8bd3530..c0f6746 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1,2 +1,2 @@ -8.4.1 +8.3.1 diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index 451305f..a0f7383 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -1,8 +1,15 @@ -load("//rules:defs.bzl", "aquery_git_diff") +load("//rules:defs.bzl", "aquery_diff", "aquery_git_diff") aquery_git_diff( - name = "simple", - after = "2d7eef6459591c7b1e2c7e6a3df960b29f36ee96", + name = "git_diff", + after = "cb16fe09382e2d88e877d8fd819e9d0377ada663", before = "a771ee789340aa3164d86491728828afeb5973cb", target = "deps(//cmd/aquerydiff)", ) + +aquery_diff( + name = "diff", + after = "after.pbtext", + before = "before.pbtext", + target = "deps(//cmd/aquerydiff)", +) diff --git a/pkg/action/action.go b/pkg/action/action.go index 4526fea..404366e 100644 --- a/pkg/action/action.go +++ b/pkg/action/action.go @@ -48,7 +48,6 @@ func NewAction(id string, in *anpb.Action, artifacts artifact.PathMap, targets t ExecutionPlatform: in.ExecutionPlatform, TemplateContent: in.TemplateContent, Substitutions: in.Substitutions, - // FileContents: in.FileContent, } return out, nil diff --git a/pkg/depset/resolver.go b/pkg/depset/resolver.go index 2a54fc4..3be29a8 100644 --- a/pkg/depset/resolver.go +++ b/pkg/depset/resolver.go @@ -2,6 +2,7 @@ package depset import ( "fmt" + "sort" anpb "github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2" "github.com/stackb/bazel-aquery-differ/pkg/artifact" @@ -62,8 +63,26 @@ func (r *Resolver) Resolve(in *anpb.DepSetOfFiles) ([]string, error) { } artifacts = append(artifacts, files...) } - - r.depSetArtifacts[in.Id] = artifacts + + r.depSetArtifacts[in.Id] = deduplicateAndSort(artifacts) return artifacts, nil } + + +// deduplicateAndSort removes duplicate entries and sorts the list +func deduplicateAndSort(in []string) (out []string) { + if len(in) == 0 { + return in + } + seen := make(map[string]bool) + for _, v := range in { + if seen[v] { + continue + } + seen[v] = true + out = append(out, v) + } + sort.Strings(out) + return +} \ No newline at end of file diff --git a/pkg/protobuf/io.go b/pkg/protobuf/io.go index 592c340..762b79e 100644 --- a/pkg/protobuf/io.go +++ b/pkg/protobuf/io.go @@ -18,7 +18,7 @@ func unmarshalerForFilename(filename string) (unmarshaler, string) { if filepath.Ext(filename) == ".json" { return protojson.Unmarshal, "json" } - if filepath.Ext(filename) == ".text" { + if filepath.Ext(filename) == ".text" || filepath.Ext(filename) == ".pbtext" || filepath.Ext(filename) == ".textproto" { return prototext.Unmarshal, "text" } return proto.Unmarshal, "proto" diff --git a/rules/defs.bzl b/rules/defs.bzl index 5ab4880..8178bd8 100644 --- a/rules/defs.bzl +++ b/rules/defs.bzl @@ -100,3 +100,86 @@ aquery_git_diff = rule( }, executable = True, ) + +def _aquery_diff_impl(ctx): + files = [ctx.outputs.executable] + runfiles = [ctx.executable._tool, ctx.file.before, ctx.file.after] + + ctx.actions.write( + ctx.outputs.executable, + """#!/bin/bash +set -euox pipefail + +# switch to WORKSPACE +cwd=$(PWD) +before="$cwd/{before}" +after="$cwd/{after}" + +cd $BUILD_WORKING_DIRECTORY + +# run the tool +"$cwd/{tool}" \ + --target '{target}' \ + --before "$before" \ + --after "$after" \ + --report_dir=$cwd \ + {serve_flag} \ + {open_flag} \ + +""".format( + bazel = ctx.attr.bazel, + tool = ctx.executable._tool.short_path, + target = ctx.attr.target, + before = ctx.file.before.short_path, + after = ctx.file.after.short_path, + serve_flag = "--serve" if ctx.attr.serve else "", + open_flag = "--open" if ctx.attr.open else "", + ), + is_executable = True, + ) + + return [ + DefaultInfo( + files = depset(files), + runfiles = ctx.runfiles(files = runfiles), + ), + ] + +aquery_diff = rule( + implementation = _aquery_diff_impl, + attrs = { + "before": attr.label( + doc = "the baseline aquery file", + allow_single_file = True, + mandatory = True, + ), + "after": attr.label( + doc = "the comparison aquery file", + allow_single_file = True, + mandatory = False, + ), + "target": attr.string( + doc = "bazel target to aquery", + mandatory = True, + ), + "bazel": attr.string( + doc = "the bazel executable", + default = "bazel", + ), + "serve": attr.bool( + doc = "start webserver", + default = True, + ), + "open": attr.bool( + doc = "open browser to webserver URL", + default = True, + ), + "_tool": attr.label( + doc = "the aquerydiff tool", + cfg = "exec", + default = "//cmd/aquerydiff", + executable = True, + ), + }, + executable = True, +) From 77bac585176f97d3f482a702db3e1155900fbacd Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 13:10:31 -0600 Subject: [PATCH 12/19] quote target --- rules/defs.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/defs.bzl b/rules/defs.bzl index 8178bd8..457cfee 100644 --- a/rules/defs.bzl +++ b/rules/defs.bzl @@ -29,12 +29,12 @@ echo "Original commit: $original_commit" # checkout before commit and run aquery echo "Checking out before commit: {before_commit}" git checkout {before_commit} -{bazel} aquery --output=proto {target} > "$tmpdir/before.pb" +{bazel} aquery --output=proto '{target}' > "$tmpdir/before.pb" # checkout after commit and run aquery echo "Checking out after commit: {after_commit}" git checkout {after_commit} -{bazel} aquery --output=proto {target} > "$tmpdir/after.pb" +{bazel} aquery --output=proto '{target}' > "$tmpdir/after.pb" # restore original commit echo "Restoring original commit: $original_commit" From 926b3fbce71bcf79ee65503a52b3dccf4f08a78f Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 13:10:46 -0600 Subject: [PATCH 13/19] update example --- examples/simple/BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index a0f7383..d2ac184 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -2,7 +2,7 @@ load("//rules:defs.bzl", "aquery_diff", "aquery_git_diff") aquery_git_diff( name = "git_diff", - after = "cb16fe09382e2d88e877d8fd819e9d0377ada663", + after = "77bac585176f97d3f482a702db3e1155900fbacd", before = "a771ee789340aa3164d86491728828afeb5973cb", target = "deps(//cmd/aquerydiff)", ) From f8ca179cddc6b11b430fa8d2fc02136b66f2f194 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 13:14:51 -0600 Subject: [PATCH 14/19] dedup artifactids --- pkg/depset/resolver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/depset/resolver.go b/pkg/depset/resolver.go index 3be29a8..87859be 100644 --- a/pkg/depset/resolver.go +++ b/pkg/depset/resolver.go @@ -34,7 +34,7 @@ func (r *Resolver) ResolveIds(depSetIds []uint32) (artifacts []string, err error } artifacts = append(artifacts, files...) } - return + return deduplicateAndSort(artifacts), err } func (r *Resolver) Resolve(in *anpb.DepSetOfFiles) ([]string, error) { From 723a14b49fe0d86255cabc91748a0e3daa854fa3 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Sat, 20 Sep 2025 13:15:12 -0600 Subject: [PATCH 15/19] update example --- examples/simple/BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index d2ac184..4ddec60 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -2,7 +2,7 @@ load("//rules:defs.bzl", "aquery_diff", "aquery_git_diff") aquery_git_diff( name = "git_diff", - after = "77bac585176f97d3f482a702db3e1155900fbacd", + after = "f8ca179cddc6b11b430fa8d2fc02136b66f2f194", before = "a771ee789340aa3164d86491728828afeb5973cb", target = "deps(//cmd/aquerydiff)", ) From 88320d819a21ad50d26fcf2511e6f3e160dbd7ec Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Thu, 9 Oct 2025 14:50:13 -0600 Subject: [PATCH 16/19] Add diff syntax hl --- MODULE.bazel | 6 +-- README.md | 4 +- cmd/aquerydiff/config.go | 17 +++++---- cmd/aquerydiff/main.go | 21 ++++++++++- pkg/action/graph.go | 4 +- pkg/action/output_map.go | 25 ++++++++++--- pkg/report/BUILD.bazel | 2 + pkg/report/assets.go | 6 +++ pkg/report/cmp.html.tmpl | 75 ++++++++++++++++++++++++++++++++++++++ pkg/report/diff.html.tmpl | 65 +++++++++++++++++++++++++++++++++ pkg/report/html.go | 57 ++++++++++++++++++++++++----- pkg/report/index.html.tmpl | 2 +- rules/defs.bzl | 30 ++++++++++++--- 13 files changed, 276 insertions(+), 38 deletions(-) create mode 100644 pkg/report/cmp.html.tmpl create mode 100644 pkg/report/diff.html.tmpl diff --git a/MODULE.bazel b/MODULE.bazel index 081d8a1..131dbbc 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -10,7 +10,7 @@ module( bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_go", version = "0.57.0") bazel_dep(name = "gazelle", version = "0.45.0") -bazel_dep(name = "build_stack_rules_proto", version = "4.1.0") +bazel_dep(name = "build_stack_rules_proto", version = "4.1.1") local_path_override( module_name = "rules_go", @@ -38,7 +38,7 @@ use_repo( # Configuration: Protobuf Deps # ------------------------------------------------------------------- -proto_repository = use_extension("@build_stack_rules_proto//extensions:proto_repository.bzl", "proto_repository", dev_dependency = True) +proto_repository = use_extension("@build_stack_rules_proto//extensions:proto_repository.bzl", "proto_repository") proto_repository.archive( name = "protobufapis", build_directives = [ @@ -56,7 +56,7 @@ proto_repository.archive( ], build_file_generation = "clean", build_file_proto_mode = "file", - cfgs = ["@//:rules_proto_config.yaml"], + cfgs = ["//:rules_proto_config.yaml"], deleted_files = [ "google/protobuf/*test*.proto", "google/protobuf/*unittest*.proto", diff --git a/README.md b/README.md index f1ef493..448fb38 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ This is a port of -to golang. +to golang with a nicer UI. ## Installation -Download and unzip a release artifact, or clone and `bazel build //cmd/aquerydiff`. +Download and unzip a release artifact, or git clone and `bazel build //cmd/aquerydiff`. ## Usage diff --git a/cmd/aquerydiff/config.go b/cmd/aquerydiff/config.go index 53b4907..1ef11b8 100644 --- a/cmd/aquerydiff/config.go +++ b/cmd/aquerydiff/config.go @@ -1,11 +1,14 @@ package main type config struct { - target string - beforeFile string - afterFile string - reportDir string - port string - serve bool - open bool + target string + beforeFile string + afterFile string + reportDir string + matchingStrategy string + port string + unidiff bool + cmpdiff bool + serve bool + open bool } diff --git a/cmd/aquerydiff/main.go b/cmd/aquerydiff/main.go index ea24d23..d9e1f7a 100644 --- a/cmd/aquerydiff/main.go +++ b/cmd/aquerydiff/main.go @@ -30,8 +30,11 @@ func run(args []string) error { flags.StringVar(&config.target, "target", "", "the target under analysis") flags.StringVar(&config.beforeFile, "before", "", "filepath to aquery file (before)") flags.StringVar(&config.afterFile, "after", "", "filepath to aquery file (after)") + flags.StringVar(&config.matchingStrategy, "match", "output_files", "method used to build mapping of before & after actions (output_files|mnemonic)") flags.StringVar(&config.reportDir, "report_dir", "", "path to directory where report files should be written") flags.StringVar(&config.port, "port", "8000", "port number to use when serving content") + flags.BoolVar(&config.unidiff, "unidiff", false, "compute unidiffs (can be slow)") + flags.BoolVar(&config.cmpdiff, "cmpdiff", true, "compute go-cmp diffs (usually fast)") flags.BoolVar(&config.serve, "serve", false, "start webserver") flags.BoolVar(&config.open, "open", false, "open browser to webserver URL") if err := flags.Parse(args); err != nil { @@ -71,7 +74,21 @@ func run(args []string) error { return err } - beforeOnly, afterOnly, both := action.Partition(beforeGraph.OutputMap, afterGraph.OutputMap) + var mapper action.ActionMapper + switch config.matchingStrategy { + case "output_files": + mapper = action.NewOutputFilesMap + case "mnemonic": + mapper = action.NewMnemonicFileMap + default: + return fmt.Errorf("unknown matching strategy '%s'", config.matchingStrategy) + } + + beforeOnly, afterOnly, both := action.Partition( + mapper(beforeGraph.Actions), + mapper(afterGraph.Actions), + ) + var equal action.OutputPairs var nonEqual action.OutputPairs @@ -97,6 +114,8 @@ func run(args []string) error { AfterOnly: afterOnly, Equal: equal, NonEqual: nonEqual, + Unidiff: config.unidiff, + Cmpdiff: config.cmpdiff, } log.Printf("Generating report in: %s", config.reportDir) diff --git a/pkg/action/graph.go b/pkg/action/graph.go index afaf6ea..87ce139 100644 --- a/pkg/action/graph.go +++ b/pkg/action/graph.go @@ -20,7 +20,6 @@ type Graph struct { DepSetOfFiles depset.Map DepSetResolver depset.Resolver Actions []*dipb.Action - OutputMap OutputMap } func NewGraph(name string, container *anpb.ActionGraphContainer) (*Graph, error) { @@ -50,11 +49,10 @@ func NewGraph(name string, container *anpb.ActionGraphContainer) (*Graph, error) DepSetOfFiles: depSetOfFiles, DepSetResolver: *depSetResolver, Actions: actions, - OutputMap: NewOutputMap(actions), }, nil } -func Partition(before, after OutputMap) (beforeOnly, afterOnly, both OutputPairs) { +func Partition(before, after ActionMap) (beforeOnly, afterOnly, both OutputPairs) { a := make(map[string]bool) b := make(map[string]bool) for output := range before { diff --git a/pkg/action/output_map.go b/pkg/action/output_map.go index e6831b9..6e8544e 100644 --- a/pkg/action/output_map.go +++ b/pkg/action/output_map.go @@ -4,15 +4,28 @@ import ( dipb "github.com/stackb/bazel-aquery-differ/build/stack/bazel/aquery/differ" ) -// OutputMap is a map of string -> action were the key is the primary -// output file(s) of the action. -type OutputMap map[string]*dipb.Action +// ActionMap is a map of string -> action. +type ActionMap map[string]*dipb.Action + +// ActionMapper is a function that creates an ActionMap from a list of Actions. +type ActionMapper func([]*dipb.Action) ActionMap -// NewOutputMap creates a new actionOutputMap. -func NewOutputMap(actions []*dipb.Action) OutputMap { - result := make(OutputMap) +// NewOutputFilesMap creates a new actionOutputMap were the key is the primary +// output file(s) of the action. +func NewOutputFilesMap(actions []*dipb.Action) ActionMap { + result := make(ActionMap) for _, action := range actions { result[action.OutputFiles] = action } return result } + +// NewMnemonicFileMap creates a new actionOutputMap were the key is the primary +// output file(s) of the action. In the strategy, the last action having the mnemonic wins. +func NewMnemonicFileMap(actions []*dipb.Action) ActionMap { + result := make(ActionMap) + for _, action := range actions { + result[action.Mnemonic] = action + } + return result +} diff --git a/pkg/report/BUILD.bazel b/pkg/report/BUILD.bazel index 4d0d7f9..10c9ba3 100644 --- a/pkg/report/BUILD.bazel +++ b/pkg/report/BUILD.bazel @@ -9,6 +9,8 @@ go_library( ], embedsrcs = [ "index.html.tmpl", + "diff.html.tmpl", + "cmp.html.tmpl", "style.css", ], importpath = "github.com/stackb/bazel-aquery-differ/pkg/report", diff --git a/pkg/report/assets.go b/pkg/report/assets.go index 4bb5a36..b7b9110 100644 --- a/pkg/report/assets.go +++ b/pkg/report/assets.go @@ -7,5 +7,11 @@ import ( //go:embed index.html.tmpl var indexHtmlFs embed.FS +//go:embed diff.html.tmpl +var diffHtmlFs embed.FS + +//go:embed cmp.html.tmpl +var cmpHtmlFs embed.FS + //go:embed style.css var styleCss []byte diff --git a/pkg/report/cmp.html.tmpl b/pkg/report/cmp.html.tmpl new file mode 100644 index 0000000..0f66465 --- /dev/null +++ b/pkg/report/cmp.html.tmpl @@ -0,0 +1,75 @@ + + + + + + Cmp Diff - Aquerydiff + + + + + + + +
    +

    Diff (go-cmp)

    + ← Back to index +
    +
    +
    {{.Content}}
    +
    + + + + diff --git a/pkg/report/diff.html.tmpl b/pkg/report/diff.html.tmpl new file mode 100644 index 0000000..96d239c --- /dev/null +++ b/pkg/report/diff.html.tmpl @@ -0,0 +1,65 @@ + + + + + + Unidiff - Aquerydiff + + + + + + + +
    +

    Diff

    + ← Back to index +
    +
    + + + + diff --git a/pkg/report/html.go b/pkg/report/html.go index eeb0723..ac9c8ed 100644 --- a/pkg/report/html.go +++ b/pkg/report/html.go @@ -3,7 +3,6 @@ package report import ( "fmt" "io" - "io/fs" "io/ioutil" "log" "os" @@ -26,6 +25,8 @@ type Html struct { AfterOnly action.OutputPairs Equal action.OutputPairs NonEqual action.OutputPairs + Unidiff bool + Cmpdiff bool } func (r *Html) Emit(dir string) error { @@ -128,23 +129,25 @@ func (r *Html) emitOutputPairDiff(dir string, pair *action.OutputPair) error { return err } - if false { + if r.Unidiff { log.Printf("Unified Diff %s", filename) unifiedDiff := fmt.Sprint(pair.UnifiedDiff()) if unifiedDiff == "" { unifiedDiff = "NONE" } - if err := os.WriteFile(filename+".diff.txt", []byte(unifiedDiff), fs.ModePerm); err != nil { + if err := r.emitDiffHtml(filename+".diff.html", unifiedDiff); err != nil { return err } } - log.Printf("Cmp Diff %s", filename) - cmpDiff := pair.Diff() - if cmpDiff == "" { - cmpDiff = "NONE" - } - if err := os.WriteFile(filename+".cmp.txt", []byte(cmpDiff), fs.ModePerm); err != nil { - return err + if r.Cmpdiff { + log.Printf("Cmp Diff %s", filename) + cmpDiff := pair.Diff() + if cmpDiff == "" { + cmpDiff = "NONE" + } + if err := r.emitCmpHtml(filename+".cmp.html", cmpDiff); err != nil { + return err + } } return nil } @@ -170,3 +173,37 @@ func (r *Html) renderIndexHtml(out io.Writer) error { tmpl := template.Must(template.New("index.html.tmpl").ParseFS(indexHtmlFs, "index.html.tmpl")) return tmpl.Execute(out, r) } + +type diffData struct { + Content string +} + +func (r *Html) emitDiffHtml(filename string, content string) error { + out, err := os.Create(filename) + if err != nil { + return err + } + defer out.Close() + + data := diffData{ + Content: content, + } + + tmpl := template.Must(template.New("diff.html.tmpl").ParseFS(diffHtmlFs, "diff.html.tmpl")) + return tmpl.Execute(out, data) +} + +func (r *Html) emitCmpHtml(filename string, content string) error { + out, err := os.Create(filename) + if err != nil { + return err + } + defer out.Close() + + data := diffData{ + Content: content, + } + + tmpl := template.Must(template.New("cmp.html.tmpl").ParseFS(cmpHtmlFs, "cmp.html.tmpl")) + return tmpl.Execute(out, data) +} diff --git a/pkg/report/index.html.tmpl b/pkg/report/index.html.tmpl index fabf010..d676efd 100644 --- a/pkg/report/index.html.tmpl +++ b/pkg/report/index.html.tmpl @@ -60,7 +60,7 @@ after: [json] [text] {{ end }} {{ if and .Before .After }} - diff: [unidiff] [go-cmp] + diff: [unidiff] [go-cmp] {{ end }} diff --git a/rules/defs.bzl b/rules/defs.bzl index 457cfee..6cee0ca 100644 --- a/rules/defs.bzl +++ b/rules/defs.bzl @@ -79,6 +79,11 @@ aquery_git_diff = rule( doc = "bazel target to aquery", mandatory = True, ), + "match": attr.string( + doc = "strategy to compare before and after actions", + default = "output_files", + values = ["output_files", "mnemonic"], + ), "bazel": attr.string( doc = "the bazel executable", default = "bazel", @@ -118,22 +123,24 @@ after="$cwd/{after}" cd $BUILD_WORKING_DIRECTORY # run the tool -"$cwd/{tool}" \ +"$cwd/{tool}"{cmpdiff_flag}{unidiff_flag}{serve_flag}{open_flag} \ + --match '{match}' \ --target '{target}' \ --before "$before" \ --after "$after" \ --report_dir=$cwd \ - {serve_flag} \ - {open_flag} \ """.format( bazel = ctx.attr.bazel, tool = ctx.executable._tool.short_path, + match = ctx.attr.match, target = ctx.attr.target, before = ctx.file.before.short_path, after = ctx.file.after.short_path, - serve_flag = "--serve" if ctx.attr.serve else "", - open_flag = "--open" if ctx.attr.open else "", + unidiff_flag = " --unidiff" if ctx.attr.unidiff else "", + cmpdiff_flag = " --cmpdiff" if ctx.attr.cmpdiff else "", + serve_flag = " --serve" if ctx.attr.serve else "", + open_flag = " --open" if ctx.attr.open else "", ), is_executable = True, ) @@ -162,6 +169,11 @@ aquery_diff = rule( doc = "bazel target to aquery", mandatory = True, ), + "match": attr.string( + doc = "strategy to compare before and after actions", + default = "output_files", + values = ["output_files", "mnemonic"], + ), "bazel": attr.string( doc = "the bazel executable", default = "bazel", @@ -170,6 +182,14 @@ aquery_diff = rule( doc = "start webserver", default = True, ), + "unidiff": attr.bool( + doc = "whether to compute unidiffs (can be slow)", + default = False, + ), + "cmpdiff": attr.bool( + doc = "whether to compute go-cmp diff (typically fast)", + default = True, + ), "open": attr.bool( doc = "open browser to webserver URL", default = True, From b410abbe0c3a685c8df0df8b8defd759d72be79e Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Fri, 10 Oct 2025 22:54:56 -0600 Subject: [PATCH 17/19] Remove "target" attr --- README.md | 207 +++++++++++++++++++++++++++++++++--- cmd/aquerydiff/config.go | 1 - cmd/aquerydiff/main.go | 12 ++- examples/simple/BUILD.bazel | 1 - pkg/action/graph.go | 28 +++++ pkg/action/output_pair.go | 28 +++-- pkg/protobuf/io.go | 26 +++-- rules/defs.bzl | 145 +++++++++++-------------- 8 files changed, 329 insertions(+), 119 deletions(-) diff --git a/README.md b/README.md index 448fb38..2d050fe 100644 --- a/README.md +++ b/README.md @@ -2,39 +2,212 @@ # bazel-aquery-differ -This is a port of - -to golang with a nicer UI. +A tool to compare Bazel action query outputs with an interactive HTML report. +This is a re-imagination of the [Bazel +aquery_differ.py](https://github.com/bazelbuild/bazel/blob/master/tools/aquery_differ/aquery_differ.py) +in Go with enhanced visualization features. + +## Features + +- Compare Bazel action graphs between builds or git commits +- Interactive HTML reports with GitHub-style diff visualization +- Syntax-highlighted diffs (unified diff and go-cmp formats) +- Built-in web server with auto-open browser support +- Native Bazel rules for integration into your build ## Installation -Download and unzip a release artifact, or git clone and `bazel build //cmd/aquerydiff`. +### As a Bazel Module -## Usage +Add to your `MODULE.bazel`: + +```starlark +bazel_dep(name = "bazel-aquery-differ", version = "0.0.0") +``` + +> **Note**: This module is not yet published to the Bazel Central Registry. For +> now, use an `archive_override` or `git_override` pointing to this repository. + +### As a Standalone Binary + +Download a release artifact, or build from source: ```bash -aquerydiff --before --after --report_dir +git clone https://github.com/stackb/bazel-aquery-differ.git +cd bazel-aquery-differ +bazel build //cmd/aquerydiff +``` + +## Usage + +### Using Bazel Rules + +Load the rules in your `BUILD.bazel` file: + +```starlark +load("@bazel-aquery-differ//rules:defs.bzl", "aquery_diff", "aquery_git_diff") ``` -You can generate the `` (and ``) using: +#### Rule: `aquery_diff` + +Compare two aquery output files: + +```starlark +aquery_diff( + name = "compare_actions", + before = "before.pb", + after = "after.pb", +) +``` + +**Attributes:** + +| Attribute | Type | Default | Description | +|-----------|----------|------------------|------------------------------------------------------------------------------| +| `before` | `label` | **required** | Baseline aquery file (`.pb`, `.proto`, `.textproto`, `.json`, `.jsonproto`) | +| `after` | `label` | **required** | Comparison aquery file (same format options) | +| `match` | `string` | `"output_files"` | Strategy to match before and after actions: `"output_files"` or `"mnemonic"` | +| `serve` | `bool` | `True` | Start web server to view report | +| `open` | `bool` | `True` | Automatically open browser to report | +| `unidiff` | `bool` | `False` | Generate unified diffs (can be slow for large actions) | +| `cmpdiff` | `bool` | `True` | Generate go-cmp diffs (fast, structural comparison) | + +Run the comparison: ```bash -bazel aquery //pkg:target-name --output jsonproto > before.json -bazel aquery //pkg:target-name --output textproto > before.textproto -bazel aquery //pkg:target-name --output proto > before.pb +bazel run //path/to:compare_actions +``` + +> **Performance Note**: The `unidiff` attribute defaults to `False` because generating unified diffs can be prohibitively slow for large actions with many inputs/outputs. The `cmpdiff` format (enabled by default) is much faster and provides good structural comparison for most use cases. Only enable `unidiff` if you need the traditional unified diff format and are willing to wait for the additional processing time. + +**Choosing a Match Strategy:** + +The `match` attribute determines how actions are paired between the before and +after builds: + +- **`output_files`** (default): Actions are matched by their output file paths. + Use this when comparing the same target across different commits or + configurations. This is the most common use case and ensures you're comparing + the exact same action that produces the same outputs. + +- **`mnemonic`**: Actions are matched by their mnemonic (action type, e.g., + "GoCompile", "CppCompile"). Use this when comparing different targets that use + similar build rules. For example, comparing `//old/pkg:binary` vs + `//new/pkg:binary` where both are `go_binary` targets but produce different + output paths. This helps identify how the same type of action differs between + targets. + +Example using mnemonic matching: + +```starlark +aquery_diff( + name = "compare_go_binaries", + before = "old_binary.pb", + after = "new_binary.pb", + match = "mnemonic", # Compare by action type instead of output path +) ``` -> The file extensions are relevant; the proto decoder will be `protojson` if -`.json`, `prototext` if `.textproto` and `proto` otherwise. +#### Rule: `aquery_git_diff` + +Compare aquery outputs between git commits: + +```starlark +aquery_git_diff( + name = "git_compare", + before = "main", + after = "feature-branch", + target = "//my/package:target", +) +``` + +**Attributes:** + +Same as `aquery_diff`, plus: + +| Attribute | Type | Default | Description | +|-----------|----------|--------------|------------------------------------------------------------| +| `target` | `string` | **required** | Bazel target to aquery (e.g., `//pkg:binary`, `deps(...)`) | +| `bazel` | `string` | `"bazel"` | Path to bazel executable | +| `before` | `string` | **required** | Git commit/branch/tag for baseline | +| `after` | `string` | **required** | Git commit/branch/tag for comparison | +This rule will: +1. Check for uncommitted changes (fails if found) +2. Checkout `before` commit and run `bazel aquery` +3. Checkout `after` commit and run `bazel aquery` +4. Restore original commit +5. Generate comparison report -An HTML report and accessory files will be written to the given `--report_dir`, -which you could serve as follows: +### Using the CLI +Generate aquery files using Bazel: + +```bash +# Binary proto format (recommended for large graphs) +bazel aquery //pkg:target --output=proto > before.pb + +# Text proto format (human-readable) +bazel aquery //pkg:target --output=textproto > before.textproto + +# JSON proto format +bazel aquery //pkg:target --output=jsonproto > before.json ``` -(cd && python3 -m http.server 8000) & + +> **Supported formats**: The tool automatically detects format based on file extension: +> - Binary: `.pb`, `.proto` +> - Text: `.textproto` +> - JSON: `.json`, `.jsonproto` + +Run the comparison: + +```bash +aquerydiff \ + --before before.pb \ + --after after.pb \ + --report_dir ./output \ + --serve \ + --open ``` -> Report will look something like: +**CLI Flags:** + +- `--before` - Path to baseline aquery file +- `--after` - Path to comparison aquery file +- `--report_dir` - Directory to write HTML report +- `--match` - Matching strategy: `output_files` (default) or `mnemonic` +- `--serve` - Start web server (default: true) +- `--open` - Open browser automatically (default: true) +- `--unidiff` - Generate unified diffs (default: false) +- `--cmpdiff` - Generate go-cmp diffs (default: true) + +> **Note**: The report title is automatically derived from the most common target in the action graph. + +### Report Output + +The HTML report shows: + +- **Actions only in before** - Removed actions +- **Actions only in after** - New actions +- **Non-equal actions** - Actions with changes +- **Equal actions** - Unchanged actions + +Each action displays: +- Mnemonic (action type) +- Output files +- Links to before/after JSON/textproto representations +- Colorized diffs (unified and/or go-cmp format) + +Example report showing action comparison + +## Example + +See the [examples/simple](examples/simple) directory for working examples using both rules. + +## Contributing + +Contributions welcome! Please open an issue or pull request. + +## License -image +Apache 2.0 diff --git a/cmd/aquerydiff/config.go b/cmd/aquerydiff/config.go index 1ef11b8..60b2fbf 100644 --- a/cmd/aquerydiff/config.go +++ b/cmd/aquerydiff/config.go @@ -1,7 +1,6 @@ package main type config struct { - target string beforeFile string afterFile string reportDir string diff --git a/cmd/aquerydiff/main.go b/cmd/aquerydiff/main.go index d9e1f7a..a274aaf 100644 --- a/cmd/aquerydiff/main.go +++ b/cmd/aquerydiff/main.go @@ -27,7 +27,6 @@ func run(args []string) error { var config config flags := flag.NewFlagSet("aquerydiff", flag.ExitOnError) - flags.StringVar(&config.target, "target", "", "the target under analysis") flags.StringVar(&config.beforeFile, "before", "", "filepath to aquery file (before)") flags.StringVar(&config.afterFile, "after", "", "filepath to aquery file (after)") flags.StringVar(&config.matchingStrategy, "match", "output_files", "method used to build mapping of before & after actions (output_files|mnemonic)") @@ -104,8 +103,17 @@ func run(args []string) error { } } + // Derive target from the action graph (prefer before, fallback to after) + target := beforeGraph.GetPrimaryTarget() + if target == "" { + target = afterGraph.GetPrimaryTarget() + } + if target == "" { + target = "unknown" + } + r := report.Html{ - Target: config.target, + Target: target, BeforeFile: config.beforeFile, AfterFile: config.afterFile, Before: beforeGraph, diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index 4ddec60..f3ed91a 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -11,5 +11,4 @@ aquery_diff( name = "diff", after = "after.pbtext", before = "before.pbtext", - target = "deps(//cmd/aquerydiff)", ) diff --git a/pkg/action/graph.go b/pkg/action/graph.go index 87ce139..fd7d2ad 100644 --- a/pkg/action/graph.go +++ b/pkg/action/graph.go @@ -52,6 +52,34 @@ func NewGraph(name string, container *anpb.ActionGraphContainer) (*Graph, error) }, nil } +// GetPrimaryTarget returns the most common target from the actions in the graph, +// or empty string if there are no actions. +func (g *Graph) GetPrimaryTarget() string { + if len(g.Actions) == 0 { + return "" + } + + // Count target occurrences + targetCounts := make(map[string]int) + for _, action := range g.Actions { + if action.Target != "" { + targetCounts[action.Target]++ + } + } + + // Find the most common target + var maxTarget string + var maxCount int + for target, count := range targetCounts { + if count > maxCount { + maxTarget = target + maxCount = count + } + } + + return maxTarget +} + func Partition(before, after ActionMap) (beforeOnly, afterOnly, both OutputPairs) { a := make(map[string]bool) b := make(map[string]bool) diff --git a/pkg/action/output_pair.go b/pkg/action/output_pair.go index 2546e73..ca93945 100644 --- a/pkg/action/output_pair.go +++ b/pkg/action/output_pair.go @@ -18,6 +18,11 @@ type OutputPair struct { Action *dipb.Action // representative of before/after Before *dipb.Action After *dipb.Action + + // Cached formatted text for unified diff (lazy initialized) + beforeText string + afterText string + textCached bool } func (p *OutputPair) Diff() string { @@ -29,21 +34,30 @@ func (p *OutputPair) Diff() string { ) } -func (p *OutputPair) UnifiedDiff() gotextdiff.Unified { - var a string - var b string +// formatTexts computes and caches the formatted text for before/after actions. +// This is done lazily and only once to avoid repeated proto cloning and formatting. +func (p *OutputPair) formatTexts() { + if p.textCached { + return + } + if p.Before != nil { beforeCopy := proto.Clone(p.Before).(*dipb.Action) beforeCopy.Id = "" - a = protobuf.FormatProtoText(beforeCopy) + p.beforeText = protobuf.FormatProtoText(beforeCopy) } if p.After != nil { afterCopy := proto.Clone(p.After).(*dipb.Action) afterCopy.Id = "" - b = protobuf.FormatProtoText(afterCopy) + p.afterText = protobuf.FormatProtoText(afterCopy) } - edits := myers.ComputeEdits(span.URI(p.Output), a, b) - return gotextdiff.ToUnified(p.Output, p.Output, a, edits) + p.textCached = true +} + +func (p *OutputPair) UnifiedDiff() gotextdiff.Unified { + p.formatTexts() + edits := myers.ComputeEdits(span.URI(p.Output), p.beforeText, p.afterText) + return gotextdiff.ToUnified(p.Output, p.Output, p.beforeText, edits) } type OutputPairs []*OutputPair diff --git a/pkg/protobuf/io.go b/pkg/protobuf/io.go index 762b79e..adfd6d2 100644 --- a/pkg/protobuf/io.go +++ b/pkg/protobuf/io.go @@ -15,23 +15,33 @@ type marshaler func(m protoreflect.ProtoMessage) ([]byte, error) type unmarshaler func(b []byte, m protoreflect.ProtoMessage) error func unmarshalerForFilename(filename string) (unmarshaler, string) { - if filepath.Ext(filename) == ".json" { + ext := filepath.Ext(filename) + switch ext { + case ".json", ".jsonproto": return protojson.Unmarshal, "json" - } - if filepath.Ext(filename) == ".text" || filepath.Ext(filename) == ".pbtext" || filepath.Ext(filename) == ".textproto" { + case ".textproto": return prototext.Unmarshal, "text" + case ".proto", ".pb": + return proto.Unmarshal, "proto" + default: + // Default to binary proto for unknown extensions + return proto.Unmarshal, "proto" } - return proto.Unmarshal, "proto" } func marshalerForFilename(filename string) marshaler { - if filepath.Ext(filename) == ".json" { + ext := filepath.Ext(filename) + switch ext { + case ".json", ".jsonproto": return protojson.Marshal - } - if filepath.Ext(filename) == ".textproto" { + case ".textproto": return prototext.Marshal + case ".proto", ".pb": + return proto.Marshal + default: + // Default to binary proto for unknown extensions + return proto.Marshal } - return proto.Marshal } func ReadFile(filename string, message protoreflect.ProtoMessage) error { diff --git a/rules/defs.bzl b/rules/defs.bzl index 6cee0ca..504085a 100644 --- a/rules/defs.bzl +++ b/rules/defs.bzl @@ -1,3 +1,46 @@ +def _build_flags(ctx): + """Helper to build common CLI flags.""" + flags = [] + if ctx.attr.unidiff: + flags.append("--unidiff") + if ctx.attr.cmpdiff: + flags.append("--cmpdiff") + if ctx.attr.serve: + flags.append("--serve") + if ctx.attr.open: + flags.append("--open") + return " ".join(flags) + +_COMMON_TOOL_ATTRS = { + "match": attr.string( + doc = "strategy to compare before and after actions", + default = "output_files", + values = ["output_files", "mnemonic"], + ), + "serve": attr.bool( + doc = "start webserver", + default = True, + ), + "open": attr.bool( + doc = "open browser to webserver URL", + default = True, + ), + "unidiff": attr.bool( + doc = "whether to compute unidiffs (can be slow)", + default = False, + ), + "cmpdiff": attr.bool( + doc = "whether to compute go-cmp diff (typically fast)", + default = True, + ), + "_tool": attr.label( + doc = "the aquerydiff tool", + cfg = "exec", + default = "//cmd/aquerydiff", + executable = True, + ), +} + def _aquery_git_diff_impl(ctx): files = [ctx.outputs.executable] runfiles = [ctx.executable._tool] @@ -41,18 +84,18 @@ echo "Restoring original commit: $original_commit" git checkout $original_commit # run the tool -"$cwd/{tool}" --target '{target}' --before "$tmpdir/before.pb" --after "$tmpdir/after.pb" --report_dir=$cwd {serve_flag} {open_flag} +"$cwd/{tool}" {flags} --match '{match}' --before "$tmpdir/before.pb" --after "$tmpdir/after.pb" --report_dir=$cwd # cleanup temporary directory rm -rf "$tmpdir" """.format( bazel = ctx.attr.bazel, tool = ctx.executable._tool.short_path, + match = ctx.attr.match, target = ctx.attr.target, before_commit = ctx.attr.before, after_commit = ctx.attr.after, - serve_flag = "--serve" if ctx.attr.serve else "", - open_flag = "--open" if ctx.attr.open else "", + flags = _build_flags(ctx), ), is_executable = True, ) @@ -66,43 +109,24 @@ rm -rf "$tmpdir" aquery_git_diff = rule( implementation = _aquery_git_diff_impl, - attrs = { - "before": attr.string( - doc = "the baseline git commit", - mandatory = True, - ), - "after": attr.string( - doc = "the after git commit", - mandatory = True, - ), + attrs = dict(_COMMON_TOOL_ATTRS, **{ "target": attr.string( doc = "bazel target to aquery", mandatory = True, ), - "match": attr.string( - doc = "strategy to compare before and after actions", - default = "output_files", - values = ["output_files", "mnemonic"], - ), "bazel": attr.string( doc = "the bazel executable", default = "bazel", ), - "serve": attr.bool( - doc = "start webserver", - default = True, - ), - "open": attr.bool( - doc = "open browser to webserver URL", - default = True, + "before": attr.string( + doc = "the baseline git commit", + mandatory = True, ), - "_tool": attr.label( - doc = "the aquerydiff tool", - cfg = "exec", - default = "//cmd/aquerydiff", - executable = True, + "after": attr.string( + doc = "the after git commit", + mandatory = True, ), - }, + }), executable = True, ) @@ -123,24 +147,14 @@ after="$cwd/{after}" cd $BUILD_WORKING_DIRECTORY # run the tool -"$cwd/{tool}"{cmpdiff_flag}{unidiff_flag}{serve_flag}{open_flag} \ - --match '{match}' \ - --target '{target}' \ - --before "$before" \ - --after "$after" \ - --report_dir=$cwd \ +"$cwd/{tool}" {flags} --match '{match}' --before "$before" --after "$after" --report_dir=$cwd """.format( - bazel = ctx.attr.bazel, tool = ctx.executable._tool.short_path, match = ctx.attr.match, - target = ctx.attr.target, before = ctx.file.before.short_path, after = ctx.file.after.short_path, - unidiff_flag = " --unidiff" if ctx.attr.unidiff else "", - cmpdiff_flag = " --cmpdiff" if ctx.attr.cmpdiff else "", - serve_flag = " --serve" if ctx.attr.serve else "", - open_flag = " --open" if ctx.attr.open else "", + flags = _build_flags(ctx), ), is_executable = True, ) @@ -154,52 +168,17 @@ cd $BUILD_WORKING_DIRECTORY aquery_diff = rule( implementation = _aquery_diff_impl, - attrs = { + attrs = dict(_COMMON_TOOL_ATTRS, **{ "before": attr.label( - doc = "the baseline aquery file", - allow_single_file = True, + doc = "the baseline aquery file (proto, textproto, or jsonproto format)", + allow_single_file = [".pb", ".proto", ".textproto", ".json", ".jsonproto"], mandatory = True, ), "after": attr.label( - doc = "the comparison aquery file", - allow_single_file = True, - mandatory = False, - ), - "target": attr.string( - doc = "bazel target to aquery", + doc = "the comparison aquery file (proto, textproto, or jsonproto format)", + allow_single_file = [".pb", ".proto", ".textproto", ".json", ".jsonproto"], mandatory = True, ), - "match": attr.string( - doc = "strategy to compare before and after actions", - default = "output_files", - values = ["output_files", "mnemonic"], - ), - "bazel": attr.string( - doc = "the bazel executable", - default = "bazel", - ), - "serve": attr.bool( - doc = "start webserver", - default = True, - ), - "unidiff": attr.bool( - doc = "whether to compute unidiffs (can be slow)", - default = False, - ), - "cmpdiff": attr.bool( - doc = "whether to compute go-cmp diff (typically fast)", - default = True, - ), - "open": attr.bool( - doc = "open browser to webserver URL", - default = True, - ), - "_tool": attr.label( - doc = "the aquerydiff tool", - cfg = "exec", - default = "//cmd/aquerydiff", - executable = True, - ), - }, + }), executable = True, ) From 0d1b811b95a0fbd4fa1fad87d8b19ab652347514 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Fri, 10 Oct 2025 23:06:21 -0600 Subject: [PATCH 18/19] update example --- examples/simple/BUILD.bazel | 8 +- examples/simple/after.textproto | 1718 ++++++++++++++++++++++++++++ examples/simple/before.textproto | 1841 ++++++++++++++++++++++++++++++ 3 files changed, 3565 insertions(+), 2 deletions(-) create mode 100644 examples/simple/after.textproto create mode 100644 examples/simple/before.textproto diff --git a/examples/simple/BUILD.bazel b/examples/simple/BUILD.bazel index f3ed91a..28b136c 100644 --- a/examples/simple/BUILD.bazel +++ b/examples/simple/BUILD.bazel @@ -9,6 +9,10 @@ aquery_git_diff( aquery_diff( name = "diff", - after = "after.pbtext", - before = "before.pbtext", + # bazel aquery //cmd/aquerydiff:aquerydiff_darwin_amd64 --output textproto > examples/simple/before.textproto + after = "after.textproto", + # bazel aquery //cmd/aquerydiff:aquerydiff_linux_amd64 --output textproto > examples/simple/after.textproto + before = "before.textproto", + match = "mnemonic", + unidiff = True, ) diff --git a/examples/simple/after.textproto b/examples/simple/after.textproto new file mode 100644 index 0000000..7049b8d --- /dev/null +++ b/examples/simple/after.textproto @@ -0,0 +1,1718 @@ +rule_classes { +id: 1 +name: "go_binary" +} +targets { +id: 1 +label: "//cmd/aquerydiff:aquerydiff_linux_amd64" +rule_class_id: 1 +} +configuration { +id: 1 +mnemonic: "darwin_arm64-fastbuild-ST-28c832439b7e" +platform_name: "darwin_arm64" +checksum: "2612556a17660b242edb7af5a57d19afb48547338430438ba8847dc2b6fa13be" +} +path_fragments { +id: 5 +label: "external" +} +path_fragments { +id: 4 +label: "rules_go++go_sdk+main___download_0" +parent_id: 5 +} +path_fragments { +id: 3 +label: "pkg" +parent_id: 4 +} +path_fragments { +id: 2 +label: "include" +parent_id: 3 +} +path_fragments { +id: 1 +label: "asm_amd64.h" +parent_id: 2 +} +artifacts { +id: 1 +path_fragment_id: 1 +} +path_fragments { +id: 6 +label: "asm_ppc64x.h" +parent_id: 2 +} +artifacts { +id: 2 +path_fragment_id: 6 +} +path_fragments { +id: 7 +label: "funcdata.h" +parent_id: 2 +} +artifacts { +id: 3 +path_fragment_id: 7 +} +path_fragments { +id: 8 +label: "textflag.h" +parent_id: 2 +} +artifacts { +id: 4 +path_fragment_id: 8 +} +dep_set_of_files { +id: 3 +direct_artifact_ids: 1 +direct_artifact_ids: 2 +direct_artifact_ids: 3 +direct_artifact_ids: 4 +} +path_fragments { +id: 10 +label: "bin" +parent_id: 4 +} +path_fragments { +id: 9 +label: "gofmt" +parent_id: 10 +} +artifacts { +id: 5 +path_fragment_id: 9 +} +path_fragments { +id: 13 +label: "tool" +parent_id: 3 +} +path_fragments { +id: 12 +label: "darwin_arm64" +parent_id: 13 +} +path_fragments { +id: 11 +label: "addr2line" +parent_id: 12 +} +artifacts { +id: 6 +path_fragment_id: 11 +} +path_fragments { +id: 14 +label: "asm" +parent_id: 12 +} +artifacts { +id: 7 +path_fragment_id: 14 +} +path_fragments { +id: 15 +label: "buildid" +parent_id: 12 +} +artifacts { +id: 8 +path_fragment_id: 15 +} +path_fragments { +id: 16 +label: "cgo" +parent_id: 12 +} +artifacts { +id: 9 +path_fragment_id: 16 +} +path_fragments { +id: 17 +label: "compile" +parent_id: 12 +} +artifacts { +id: 10 +path_fragment_id: 17 +} +path_fragments { +id: 18 +label: "covdata" +parent_id: 12 +} +artifacts { +id: 11 +path_fragment_id: 18 +} +path_fragments { +id: 19 +label: "cover" +parent_id: 12 +} +artifacts { +id: 12 +path_fragment_id: 19 +} +path_fragments { +id: 20 +label: "doc" +parent_id: 12 +} +artifacts { +id: 13 +path_fragment_id: 20 +} +path_fragments { +id: 21 +label: "fix" +parent_id: 12 +} +artifacts { +id: 14 +path_fragment_id: 21 +} +path_fragments { +id: 22 +label: "link" +parent_id: 12 +} +artifacts { +id: 15 +path_fragment_id: 22 +} +path_fragments { +id: 23 +label: "nm" +parent_id: 12 +} +artifacts { +id: 16 +path_fragment_id: 23 +} +path_fragments { +id: 24 +label: "objdump" +parent_id: 12 +} +artifacts { +id: 17 +path_fragment_id: 24 +} +path_fragments { +id: 25 +label: "pack" +parent_id: 12 +} +artifacts { +id: 18 +path_fragment_id: 25 +} +path_fragments { +id: 26 +label: "pprof" +parent_id: 12 +} +artifacts { +id: 19 +path_fragment_id: 26 +} +path_fragments { +id: 27 +label: "preprofile" +parent_id: 12 +} +artifacts { +id: 20 +path_fragment_id: 27 +} +path_fragments { +id: 28 +label: "test2json" +parent_id: 12 +} +artifacts { +id: 21 +path_fragment_id: 28 +} +path_fragments { +id: 29 +label: "trace" +parent_id: 12 +} +artifacts { +id: 22 +path_fragment_id: 29 +} +path_fragments { +id: 30 +label: "vet" +parent_id: 12 +} +artifacts { +id: 23 +path_fragment_id: 30 +} +path_fragments { +id: 31 +label: "go.env" +parent_id: 4 +} +artifacts { +id: 24 +path_fragment_id: 31 +} +dep_set_of_files { +id: 4 +direct_artifact_ids: 5 +direct_artifact_ids: 6 +direct_artifact_ids: 7 +direct_artifact_ids: 8 +direct_artifact_ids: 9 +direct_artifact_ids: 10 +direct_artifact_ids: 11 +direct_artifact_ids: 12 +direct_artifact_ids: 13 +direct_artifact_ids: 14 +direct_artifact_ids: 15 +direct_artifact_ids: 16 +direct_artifact_ids: 17 +direct_artifact_ids: 18 +direct_artifact_ids: 19 +direct_artifact_ids: 20 +direct_artifact_ids: 21 +direct_artifact_ids: 22 +direct_artifact_ids: 23 +direct_artifact_ids: 24 +} +path_fragments { +id: 38 +label: "bazel-out" +} +path_fragments { +id: 37 +label: "darwin_arm64-fastbuild-ST-0a57218378ec" +parent_id: 38 +} +path_fragments { +id: 36 +label: "bin" +parent_id: 37 +} +path_fragments { +id: 35 +label: "external" +parent_id: 36 +} +path_fragments { +id: 34 +label: "rules_go+" +parent_id: 35 +} +path_fragments { +id: 33 +label: "stdlib_" +parent_id: 34 +} +path_fragments { +id: 32 +label: "pkg" +parent_id: 33 +} +artifacts { +id: 25 +path_fragment_id: 32 +is_tree_artifact: true +} +path_fragments { +id: 41 +label: "cmd" +} +path_fragments { +id: 40 +label: "aquerydiff" +parent_id: 41 +} +path_fragments { +id: 39 +label: "config.go" +parent_id: 40 +} +artifacts { +id: 26 +path_fragment_id: 39 +} +path_fragments { +id: 42 +label: "main.go" +parent_id: 40 +} +artifacts { +id: 27 +path_fragment_id: 42 +} +path_fragments { +id: 47 +label: "darwin_arm64-opt-exec-ST-d6cc8b84a7bb" +parent_id: 38 +} +path_fragments { +id: 46 +label: "bin" +parent_id: 47 +} +path_fragments { +id: 45 +label: "external" +parent_id: 46 +} +path_fragments { +id: 44 +label: "rules_go++go_sdk+main___download_0" +parent_id: 45 +} +path_fragments { +id: 43 +label: "packages.txt" +parent_id: 44 +} +artifacts { +id: 28 +path_fragment_id: 43 +} +path_fragments { +id: 49 +label: "pack_reset" +parent_id: 44 +} +path_fragments { +id: 48 +label: "pack.exe" +parent_id: 49 +} +artifacts { +id: 29 +path_fragment_id: 48 +} +path_fragments { +id: 54 +label: "darwin_arm64-fastbuild-ST-28c832439b7e" +parent_id: 38 +} +path_fragments { +id: 53 +label: "bin" +parent_id: 54 +} +path_fragments { +id: 52 +label: "pkg" +parent_id: 53 +} +path_fragments { +id: 51 +label: "action" +parent_id: 52 +} +path_fragments { +id: 50 +label: "action.x" +parent_id: 51 +} +artifacts { +id: 30 +path_fragment_id: 50 +} +path_fragments { +id: 56 +label: "protobuf" +parent_id: 52 +} +path_fragments { +id: 55 +label: "protobuf.x" +parent_id: 56 +} +artifacts { +id: 31 +path_fragment_id: 55 +} +path_fragments { +id: 58 +label: "report" +parent_id: 52 +} +path_fragments { +id: 57 +label: "report.x" +parent_id: 58 +} +artifacts { +id: 32 +path_fragment_id: 57 +} +path_fragments { +id: 64 +label: "external" +parent_id: 53 +} +path_fragments { +id: 63 +label: "build_stack_rules_proto++proto_repository+bazelapis" +parent_id: 64 +} +path_fragments { +id: 62 +label: "src" +parent_id: 63 +} +path_fragments { +id: 61 +label: "main" +parent_id: 62 +} +path_fragments { +id: 60 +label: "protobuf" +parent_id: 61 +} +path_fragments { +id: 59 +label: "analysis_v2_go_proto.x" +parent_id: 60 +} +artifacts { +id: 33 +path_fragment_id: 59 +} +dep_set_of_files { +id: 2 +transitive_dep_set_ids: 3 +transitive_dep_set_ids: 4 +direct_artifact_ids: 25 +direct_artifact_ids: 26 +direct_artifact_ids: 27 +direct_artifact_ids: 28 +direct_artifact_ids: 29 +direct_artifact_ids: 30 +direct_artifact_ids: 31 +direct_artifact_ids: 32 +direct_artifact_ids: 33 +} +path_fragments { +id: 66 +label: "builder_reset" +parent_id: 44 +} +path_fragments { +id: 65 +label: "builder" +parent_id: 66 +} +artifacts { +id: 34 +path_fragment_id: 65 +} +dep_set_of_files { +id: 1 +transitive_dep_set_ids: 2 +direct_artifact_ids: 34 +} +path_fragments { +id: 69 +label: "cmd" +parent_id: 53 +} +path_fragments { +id: 68 +label: "aquerydiff" +parent_id: 69 +} +path_fragments { +id: 67 +label: "aquerydiff_linux_amd64.a" +parent_id: 68 +} +artifacts { +id: 35 +path_fragment_id: 67 +} +path_fragments { +id: 70 +label: "aquerydiff_linux_amd64.x" +parent_id: 68 +} +artifacts { +id: 36 +path_fragment_id: 70 +} +actions { +target_id: 1 +action_key: "4ebca3b43f2594f05cf5f615259fa91bb8bf517e79097308642dea529f9ba2f9" +mnemonic: "GoCompilePkg" +configuration_id: 1 +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/builder_reset/builder" +arguments: "compilepkg" +arguments: "-sdk" +arguments: "external/rules_go++go_sdk+main___download_0" +arguments: "-goroot" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-0a57218378ec/bin/external/rules_go+/stdlib_" +arguments: "-installsuffix" +arguments: "linux_amd64" +arguments: "-src" +arguments: "cmd/aquerydiff/config.go" +arguments: "-src" +arguments: "cmd/aquerydiff/main.go" +arguments: "-arc" +arguments: "github.com/stackb/bazel-aquery-differ/pkg/action=github.com/stackb/bazel-aquery-differ/pkg/action=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/action/action.x" +arguments: "-arc" +arguments: "github.com/stackb/bazel-aquery-differ/pkg/protobuf=github.com/stackb/bazel-aquery-differ/pkg/protobuf=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/protobuf/protobuf.x" +arguments: "-arc" +arguments: "github.com/stackb/bazel-aquery-differ/pkg/report=github.com/stackb/bazel-aquery-differ/pkg/report=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/report/report.x" +arguments: "-arc" +arguments: "github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2=github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/build_stack_rules_proto++proto_repository+bazelapis/src/main/protobuf/analysis_v2_go_proto.x" +arguments: "-importpath" +arguments: "github.com/stackb/bazel-aquery-differ/cmd/aquerydiff" +arguments: "-p" +arguments: "main" +arguments: "-package_list" +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/packages.txt" +arguments: "-pack" +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/pack_reset/pack.exe" +arguments: "-embedroot" +arguments: "" +arguments: "-embedroot" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin" +arguments: "-embedlookupdir" +arguments: "cmd/aquerydiff" +arguments: "-lo" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/cmd/aquerydiff/aquerydiff_linux_amd64.a" +arguments: "-o" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/cmd/aquerydiff/aquerydiff_linux_amd64.x" +arguments: "-gcflags" +arguments: "" +environment_variables { + key: "GOARCH" + value: "amd64" +} +environment_variables { + key: "GOOS" + value: "linux" +} +environment_variables { + key: "GOEXPERIMENT" +} +environment_variables { + key: "GOROOT_FINAL" + value: "GOROOT" +} +environment_variables { + key: "CGO_ENABLED" + value: "0" +} +environment_variables { + key: "GOPATH" +} +environment_variables { + key: "GOTOOLCHAIN" + value: "local" +} +environment_variables { + key: "GODEBUG" + value: "winsymlink=0" +} +input_dep_set_ids: 1 +output_ids: 35 +output_ids: 36 +execution_info { + key: "supports-path-mapping" + value: "1" +} +primary_output_id: 35 +execution_platform: "@@platforms//host:host" +} +path_fragments { +id: 74 +label: "gazelle++go_deps+org_golang_google_protobuf" +parent_id: 64 +} +path_fragments { +id: 73 +label: "internal" +parent_id: 74 +} +path_fragments { +id: 72 +label: "detrand" +parent_id: 73 +} +path_fragments { +id: 71 +label: "detrand.a" +parent_id: 72 +} +artifacts { +id: 37 +path_fragment_id: 71 +} +path_fragments { +id: 76 +label: "errors" +parent_id: 73 +} +path_fragments { +id: 75 +label: "errors.a" +parent_id: 76 +} +artifacts { +id: 38 +path_fragment_id: 75 +} +path_fragments { +id: 79 +label: "encoding" +parent_id: 74 +} +path_fragments { +id: 78 +label: "protowire" +parent_id: 79 +} +path_fragments { +id: 77 +label: "protowire.a" +parent_id: 78 +} +artifacts { +id: 39 +path_fragment_id: 77 +} +path_fragments { +id: 81 +label: "flags" +parent_id: 73 +} +path_fragments { +id: 80 +label: "flags.a" +parent_id: 81 +} +artifacts { +id: 40 +path_fragment_id: 80 +} +path_fragments { +id: 83 +label: "pragma" +parent_id: 73 +} +path_fragments { +id: 82 +label: "pragma.a" +parent_id: 83 +} +artifacts { +id: 41 +path_fragment_id: 82 +} +path_fragments { +id: 86 +label: "reflect" +parent_id: 74 +} +path_fragments { +id: 85 +label: "protoreflect" +parent_id: 86 +} +path_fragments { +id: 84 +label: "protoreflect.a" +parent_id: 85 +} +artifacts { +id: 42 +path_fragment_id: 84 +} +path_fragments { +id: 88 +label: "strs" +parent_id: 73 +} +path_fragments { +id: 87 +label: "strs.a" +parent_id: 88 +} +artifacts { +id: 43 +path_fragment_id: 87 +} +path_fragments { +id: 91 +label: "encoding" +parent_id: 73 +} +path_fragments { +id: 90 +label: "json" +parent_id: 91 +} +path_fragments { +id: 89 +label: "json.a" +parent_id: 90 +} +artifacts { +id: 44 +path_fragment_id: 89 +} +path_fragments { +id: 93 +label: "messageset" +parent_id: 91 +} +path_fragments { +id: 92 +label: "messageset.a" +parent_id: 93 +} +artifacts { +id: 45 +path_fragment_id: 92 +} +path_fragments { +id: 95 +label: "descfmt" +parent_id: 73 +} +path_fragments { +id: 94 +label: "descfmt.a" +parent_id: 95 +} +artifacts { +id: 46 +path_fragment_id: 94 +} +path_fragments { +id: 97 +label: "descopts" +parent_id: 73 +} +path_fragments { +id: 96 +label: "descopts.a" +parent_id: 97 +} +artifacts { +id: 47 +path_fragment_id: 96 +} +path_fragments { +id: 99 +label: "editiondefaults" +parent_id: 73 +} +path_fragments { +id: 98 +label: "editiondefaults.a" +parent_id: 99 +} +artifacts { +id: 48 +path_fragment_id: 98 +} +path_fragments { +id: 101 +label: "text" +parent_id: 91 +} +path_fragments { +id: 100 +label: "text.a" +parent_id: 101 +} +artifacts { +id: 49 +path_fragment_id: 100 +} +path_fragments { +id: 103 +label: "defval" +parent_id: 91 +} +path_fragments { +id: 102 +label: "defval.a" +parent_id: 103 +} +artifacts { +id: 50 +path_fragment_id: 102 +} +path_fragments { +id: 105 +label: "genid" +parent_id: 73 +} +path_fragments { +id: 104 +label: "genid.a" +parent_id: 105 +} +artifacts { +id: 51 +path_fragment_id: 104 +} +path_fragments { +id: 107 +label: "order" +parent_id: 73 +} +path_fragments { +id: 106 +label: "order.a" +parent_id: 107 +} +artifacts { +id: 52 +path_fragment_id: 106 +} +path_fragments { +id: 109 +label: "protoregistry" +parent_id: 86 +} +path_fragments { +id: 108 +label: "protoregistry.a" +parent_id: 109 +} +artifacts { +id: 53 +path_fragment_id: 108 +} +path_fragments { +id: 112 +label: "runtime" +parent_id: 74 +} +path_fragments { +id: 111 +label: "protoiface" +parent_id: 112 +} +path_fragments { +id: 110 +label: "protoiface.a" +parent_id: 111 +} +artifacts { +id: 54 +path_fragment_id: 110 +} +path_fragments { +id: 114 +label: "proto" +parent_id: 74 +} +path_fragments { +id: 113 +label: "proto.a" +parent_id: 114 +} +artifacts { +id: 55 +path_fragment_id: 113 +} +path_fragments { +id: 116 +label: "filedesc" +parent_id: 73 +} +path_fragments { +id: 115 +label: "filedesc.a" +parent_id: 116 +} +artifacts { +id: 56 +path_fragment_id: 115 +} +path_fragments { +id: 118 +label: "set" +parent_id: 73 +} +path_fragments { +id: 117 +label: "set.a" +parent_id: 118 +} +artifacts { +id: 57 +path_fragment_id: 117 +} +path_fragments { +id: 120 +label: "protojson" +parent_id: 79 +} +path_fragments { +id: 119 +label: "protojson.a" +parent_id: 120 +} +artifacts { +id: 58 +path_fragment_id: 119 +} +path_fragments { +id: 122 +label: "prototext" +parent_id: 79 +} +path_fragments { +id: 121 +label: "prototext.a" +parent_id: 122 +} +artifacts { +id: 59 +path_fragment_id: 121 +} +path_fragments { +id: 124 +label: "tag" +parent_id: 91 +} +path_fragments { +id: 123 +label: "tag.a" +parent_id: 124 +} +artifacts { +id: 60 +path_fragment_id: 123 +} +path_fragments { +id: 126 +label: "protolazy" +parent_id: 73 +} +path_fragments { +id: 125 +label: "protolazy.a" +parent_id: 126 +} +artifacts { +id: 61 +path_fragment_id: 125 +} +path_fragments { +id: 128 +label: "impl" +parent_id: 73 +} +path_fragments { +id: 127 +label: "impl.a" +parent_id: 128 +} +artifacts { +id: 62 +path_fragment_id: 127 +} +path_fragments { +id: 130 +label: "filetype" +parent_id: 73 +} +path_fragments { +id: 129 +label: "filetype.a" +parent_id: 130 +} +artifacts { +id: 63 +path_fragment_id: 129 +} +path_fragments { +id: 132 +label: "version" +parent_id: 73 +} +path_fragments { +id: 131 +label: "version.a" +parent_id: 132 +} +artifacts { +id: 64 +path_fragment_id: 131 +} +path_fragments { +id: 134 +label: "protoimpl" +parent_id: 112 +} +path_fragments { +id: 133 +label: "protoimpl.a" +parent_id: 134 +} +artifacts { +id: 65 +path_fragment_id: 133 +} +path_fragments { +id: 135 +label: "stardoc_output_go_proto.a" +parent_id: 60 +} +artifacts { +id: 66 +path_fragment_id: 135 +} +path_fragments { +id: 136 +label: "build_go_proto.a" +parent_id: 60 +} +artifacts { +id: 67 +path_fragment_id: 136 +} +path_fragments { +id: 137 +label: "analysis_v2_go_proto.a" +parent_id: 60 +} +artifacts { +id: 68 +path_fragment_id: 137 +} +path_fragments { +id: 143 +label: "build" +parent_id: 53 +} +path_fragments { +id: 142 +label: "stack" +parent_id: 143 +} +path_fragments { +id: 141 +label: "bazel" +parent_id: 142 +} +path_fragments { +id: 140 +label: "aquery" +parent_id: 141 +} +path_fragments { +id: 139 +label: "differ" +parent_id: 140 +} +path_fragments { +id: 138 +label: "differ.a" +parent_id: 139 +} +artifacts { +id: 69 +path_fragment_id: 138 +} +path_fragments { +id: 145 +label: "pathfragment" +parent_id: 52 +} +path_fragments { +id: 144 +label: "pathfragment.a" +parent_id: 145 +} +artifacts { +id: 70 +path_fragment_id: 144 +} +path_fragments { +id: 147 +label: "artifact" +parent_id: 52 +} +path_fragments { +id: 146 +label: "artifact.a" +parent_id: 147 +} +artifacts { +id: 71 +path_fragment_id: 146 +} +path_fragments { +id: 149 +label: "depset" +parent_id: 52 +} +path_fragments { +id: 148 +label: "depset.a" +parent_id: 149 +} +artifacts { +id: 72 +path_fragment_id: 148 +} +path_fragments { +id: 150 +label: "protobuf.a" +parent_id: 56 +} +artifacts { +id: 73 +path_fragment_id: 150 +} +path_fragments { +id: 152 +label: "target" +parent_id: 52 +} +path_fragments { +id: 151 +label: "target.a" +parent_id: 152 +} +artifacts { +id: 74 +path_fragment_id: 151 +} +path_fragments { +id: 157 +label: "gazelle++go_deps+com_github_google_go_cmp" +parent_id: 64 +} +path_fragments { +id: 156 +label: "cmp" +parent_id: 157 +} +path_fragments { +id: 155 +label: "internal" +parent_id: 156 +} +path_fragments { +id: 154 +label: "flags" +parent_id: 155 +} +path_fragments { +id: 153 +label: "flags.a" +parent_id: 154 +} +artifacts { +id: 75 +path_fragment_id: 153 +} +path_fragments { +id: 159 +label: "diff" +parent_id: 155 +} +path_fragments { +id: 158 +label: "diff.a" +parent_id: 159 +} +artifacts { +id: 76 +path_fragment_id: 158 +} +path_fragments { +id: 161 +label: "function" +parent_id: 155 +} +path_fragments { +id: 160 +label: "function.a" +parent_id: 161 +} +artifacts { +id: 77 +path_fragment_id: 160 +} +path_fragments { +id: 163 +label: "value" +parent_id: 155 +} +path_fragments { +id: 162 +label: "value.a" +parent_id: 163 +} +artifacts { +id: 78 +path_fragment_id: 162 +} +path_fragments { +id: 164 +label: "cmp.a" +parent_id: 156 +} +artifacts { +id: 79 +path_fragment_id: 164 +} +path_fragments { +id: 166 +label: "cmpopts" +parent_id: 156 +} +path_fragments { +id: 165 +label: "cmpopts.a" +parent_id: 166 +} +artifacts { +id: 80 +path_fragment_id: 165 +} +path_fragments { +id: 169 +label: "gazelle++go_deps+com_github_hexops_gotextdiff" +parent_id: 64 +} +path_fragments { +id: 168 +label: "span" +parent_id: 169 +} +path_fragments { +id: 167 +label: "span.a" +parent_id: 168 +} +artifacts { +id: 81 +path_fragment_id: 167 +} +path_fragments { +id: 170 +label: "gotextdiff.a" +parent_id: 169 +} +artifacts { +id: 82 +path_fragment_id: 170 +} +path_fragments { +id: 172 +label: "myers" +parent_id: 169 +} +path_fragments { +id: 171 +label: "myers.a" +parent_id: 172 +} +artifacts { +id: 83 +path_fragment_id: 171 +} +path_fragments { +id: 173 +label: "action.a" +parent_id: 51 +} +artifacts { +id: 84 +path_fragment_id: 173 +} +path_fragments { +id: 174 +label: "report.a" +parent_id: 58 +} +artifacts { +id: 85 +path_fragment_id: 174 +} +dep_set_of_files { +id: 6 +direct_artifact_ids: 37 +direct_artifact_ids: 38 +direct_artifact_ids: 39 +direct_artifact_ids: 40 +direct_artifact_ids: 41 +direct_artifact_ids: 42 +direct_artifact_ids: 43 +direct_artifact_ids: 44 +direct_artifact_ids: 45 +direct_artifact_ids: 46 +direct_artifact_ids: 47 +direct_artifact_ids: 48 +direct_artifact_ids: 49 +direct_artifact_ids: 50 +direct_artifact_ids: 51 +direct_artifact_ids: 52 +direct_artifact_ids: 53 +direct_artifact_ids: 54 +direct_artifact_ids: 55 +direct_artifact_ids: 56 +direct_artifact_ids: 57 +direct_artifact_ids: 58 +direct_artifact_ids: 59 +direct_artifact_ids: 60 +direct_artifact_ids: 61 +direct_artifact_ids: 62 +direct_artifact_ids: 63 +direct_artifact_ids: 64 +direct_artifact_ids: 65 +direct_artifact_ids: 66 +direct_artifact_ids: 67 +direct_artifact_ids: 68 +direct_artifact_ids: 69 +direct_artifact_ids: 70 +direct_artifact_ids: 71 +direct_artifact_ids: 72 +direct_artifact_ids: 73 +direct_artifact_ids: 74 +direct_artifact_ids: 75 +direct_artifact_ids: 76 +direct_artifact_ids: 77 +direct_artifact_ids: 78 +direct_artifact_ids: 79 +direct_artifact_ids: 80 +direct_artifact_ids: 81 +direct_artifact_ids: 82 +direct_artifact_ids: 83 +direct_artifact_ids: 84 +direct_artifact_ids: 85 +direct_artifact_ids: 35 +direct_artifact_ids: 5 +direct_artifact_ids: 6 +direct_artifact_ids: 7 +direct_artifact_ids: 8 +direct_artifact_ids: 9 +direct_artifact_ids: 10 +direct_artifact_ids: 11 +direct_artifact_ids: 12 +direct_artifact_ids: 13 +direct_artifact_ids: 14 +direct_artifact_ids: 15 +direct_artifact_ids: 16 +direct_artifact_ids: 17 +direct_artifact_ids: 18 +direct_artifact_ids: 19 +direct_artifact_ids: 20 +direct_artifact_ids: 21 +direct_artifact_ids: 22 +direct_artifact_ids: 23 +direct_artifact_ids: 24 +direct_artifact_ids: 25 +direct_artifact_ids: 28 +} +dep_set_of_files { +id: 5 +transitive_dep_set_ids: 6 +direct_artifact_ids: 34 +} +path_fragments { +id: 176 +label: "aquerydiff_linux_amd64_" +parent_id: 68 +} +path_fragments { +id: 175 +label: "aquerydiff_linux_amd64" +parent_id: 176 +} +artifacts { +id: 86 +path_fragment_id: 175 +} +actions { +target_id: 1 +action_key: "5801836c97e6927e0cadce2f1aa4d79379d971337e6f667b366f3d6580518d9e" +mnemonic: "GoLink" +configuration_id: 1 +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/builder_reset/builder" +arguments: "link" +arguments: "-sdk" +arguments: "external/rules_go++go_sdk+main___download_0" +arguments: "-goroot" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-0a57218378ec/bin/external/rules_go+/stdlib_" +arguments: "-installsuffix" +arguments: "linux_amd64" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/detrand:detrand=google.golang.org/protobuf/internal/detrand=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/detrand/detrand.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/errors:errors=google.golang.org/protobuf/internal/errors=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/errors/errors.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//encoding/protowire:protowire=google.golang.org/protobuf/encoding/protowire=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/encoding/protowire/protowire.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/flags:flags=google.golang.org/protobuf/internal/flags=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/flags/flags.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/pragma:pragma=google.golang.org/protobuf/internal/pragma=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/pragma/pragma.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//reflect/protoreflect:protoreflect=google.golang.org/protobuf/reflect/protoreflect=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/reflect/protoreflect/protoreflect.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/strs:strs=google.golang.org/protobuf/internal/strs=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/strs/strs.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/json:json=google.golang.org/protobuf/internal/encoding/json=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/json/json.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/messageset:messageset=google.golang.org/protobuf/internal/encoding/messageset=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/messageset/messageset.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/descfmt:descfmt=google.golang.org/protobuf/internal/descfmt=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/descfmt/descfmt.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/descopts:descopts=google.golang.org/protobuf/internal/descopts=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/descopts/descopts.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/editiondefaults:editiondefaults=google.golang.org/protobuf/internal/editiondefaults=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/editiondefaults/editiondefaults.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/text:text=google.golang.org/protobuf/internal/encoding/text=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/text/text.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/defval:defval=google.golang.org/protobuf/internal/encoding/defval=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/defval/defval.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/genid:genid=google.golang.org/protobuf/internal/genid=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/genid/genid.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/order:order=google.golang.org/protobuf/internal/order=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/order/order.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//reflect/protoregistry:protoregistry=google.golang.org/protobuf/reflect/protoregistry=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/reflect/protoregistry/protoregistry.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//runtime/protoiface:protoiface=google.golang.org/protobuf/runtime/protoiface=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/runtime/protoiface/protoiface.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//proto:proto=google.golang.org/protobuf/proto=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/proto/proto.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/filedesc:filedesc=google.golang.org/protobuf/internal/filedesc=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/filedesc/filedesc.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/set:set=google.golang.org/protobuf/internal/set=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/set/set.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//encoding/protojson:protojson=google.golang.org/protobuf/encoding/protojson=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/encoding/protojson/protojson.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//encoding/prototext:prototext=google.golang.org/protobuf/encoding/prototext=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/encoding/prototext/prototext.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/tag:tag=google.golang.org/protobuf/internal/encoding/tag=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/tag/tag.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/protolazy:protolazy=google.golang.org/protobuf/internal/protolazy=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/protolazy/protolazy.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/impl:impl=google.golang.org/protobuf/internal/impl=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/impl/impl.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/filetype:filetype=google.golang.org/protobuf/internal/filetype=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/filetype/filetype.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/version:version=google.golang.org/protobuf/internal/version=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/version/version.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//runtime/protoimpl:protoimpl=google.golang.org/protobuf/runtime/protoimpl=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+org_golang_google_protobuf/runtime/protoimpl/protoimpl.a" +arguments: "-arc" +arguments: "@@build_stack_rules_proto++proto_repository+bazelapis//src/main/protobuf:stardoc_output_go_proto=github.com/bazelbuild/bazel/src/main/protobuf/stardoc_output=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/build_stack_rules_proto++proto_repository+bazelapis/src/main/protobuf/stardoc_output_go_proto.a" +arguments: "-arc" +arguments: "@@build_stack_rules_proto++proto_repository+bazelapis//src/main/protobuf:build_go_proto=github.com/bazelbuild/bazelapis/src/main/protobuf/build=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/build_stack_rules_proto++proto_repository+bazelapis/src/main/protobuf/build_go_proto.a" +arguments: "-arc" +arguments: "@@build_stack_rules_proto++proto_repository+bazelapis//src/main/protobuf:analysis_v2_go_proto=github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/build_stack_rules_proto++proto_repository+bazelapis/src/main/protobuf/analysis_v2_go_proto.a" +arguments: "-arc" +arguments: "@@//build/stack/bazel/aquery/differ:differ=github.com/stackb/bazel-aquery-differ/build/stack/bazel/aquery/differ=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/build/stack/bazel/aquery/differ/differ.a" +arguments: "-arc" +arguments: "@@//pkg/pathfragment:pathfragment=github.com/stackb/bazel-aquery-differ/pkg/pathfragment=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/pathfragment/pathfragment.a" +arguments: "-arc" +arguments: "@@//pkg/artifact:artifact=github.com/stackb/bazel-aquery-differ/pkg/artifact=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/artifact/artifact.a" +arguments: "-arc" +arguments: "@@//pkg/depset:depset=github.com/stackb/bazel-aquery-differ/pkg/depset=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/depset/depset.a" +arguments: "-arc" +arguments: "@@//pkg/protobuf:protobuf=github.com/stackb/bazel-aquery-differ/pkg/protobuf=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/protobuf/protobuf.a" +arguments: "-arc" +arguments: "@@//pkg/target:target=github.com/stackb/bazel-aquery-differ/pkg/target=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/target/target.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/internal/flags:flags=github.com/google/go-cmp/cmp/internal/flags=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/internal/flags/flags.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/internal/diff:diff=github.com/google/go-cmp/cmp/internal/diff=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/internal/diff/diff.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/internal/function:function=github.com/google/go-cmp/cmp/internal/function=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/internal/function/function.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/internal/value:value=github.com/google/go-cmp/cmp/internal/value=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/internal/value/value.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp:cmp=github.com/google/go-cmp/cmp=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/cmp.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/cmpopts:cmpopts=github.com/google/go-cmp/cmp/cmpopts=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/cmpopts/cmpopts.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_hexops_gotextdiff//span:span=github.com/hexops/gotextdiff/span=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_hexops_gotextdiff/span/span.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_hexops_gotextdiff//:gotextdiff=github.com/hexops/gotextdiff=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_hexops_gotextdiff/gotextdiff.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_hexops_gotextdiff//myers:myers=github.com/hexops/gotextdiff/myers=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/external/gazelle++go_deps+com_github_hexops_gotextdiff/myers/myers.a" +arguments: "-arc" +arguments: "@@//pkg/action:action=github.com/stackb/bazel-aquery-differ/pkg/action=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/action/action.a" +arguments: "-arc" +arguments: "@@//pkg/report:report=github.com/stackb/bazel-aquery-differ/pkg/report=bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/pkg/report/report.a" +arguments: "-package_list" +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/packages.txt" +arguments: "-o" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/cmd/aquerydiff/aquerydiff_linux_amd64_/aquerydiff_linux_amd64" +arguments: "-main" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-28c832439b7e/bin/cmd/aquerydiff/aquerydiff_linux_amd64.a" +arguments: "-p" +arguments: "github.com/stackb/bazel-aquery-differ/cmd/aquerydiff" +arguments: "--" +arguments: "-linkmode" +arguments: "internal" +arguments: "-s" +arguments: "-w" +arguments: "-buildid=redacted" +arguments: "-s" +arguments: "-w" +arguments: "-extldflags" +arguments: "-static" +environment_variables { + key: "GOARCH" + value: "amd64" +} +environment_variables { + key: "GOOS" + value: "linux" +} +environment_variables { + key: "GOEXPERIMENT" +} +environment_variables { + key: "GOROOT" + value: "bazel-out/darwin_arm64-fastbuild-ST-0a57218378ec/bin/external/rules_go+/stdlib_" +} +environment_variables { + key: "GOROOT_FINAL" + value: "GOROOT" +} +environment_variables { + key: "CGO_ENABLED" + value: "0" +} +environment_variables { + key: "GOPATH" +} +environment_variables { + key: "GOTOOLCHAIN" + value: "local" +} +environment_variables { + key: "GODEBUG" + value: "winsymlink=0" +} +input_dep_set_ids: 5 +output_ids: 86 +primary_output_id: 86 +execution_platform: "@@platforms//host:host" +} +path_fragments { +id: 177 +label: "aquerydiff_linux_amd64.repo_mapping" +parent_id: 176 +} +artifacts { +id: 87 +path_fragment_id: 177 +} +actions { +target_id: 1 +action_key: "caeefa8c9a27b325f1a4db4b78f6bef9264fc95ae32cd3e023650443df340e2b" +mnemonic: "RepoMappingManifest" +configuration_id: 1 +output_ids: 87 +primary_output_id: 87 +execution_platform: "@@platforms//host:host" +} +path_fragments { +id: 178 +label: "aquerydiff_linux_amd64.runfiles_manifest" +parent_id: 176 +} +artifacts { +id: 88 +path_fragment_id: 178 +} +actions { +target_id: 1 +action_key: "2ed97eb6f2f7c5f3c7d6b7387ea5b31419eba46c0a432f2fb550c2f4c0b85911" +mnemonic: "SourceSymlinkManifest" +configuration_id: 1 +output_ids: 88 +primary_output_id: 88 +execution_platform: "@@platforms//host:host" +} +dep_set_of_files { +id: 7 +direct_artifact_ids: 88 +} +path_fragments { +id: 180 +label: "aquerydiff_linux_amd64.runfiles" +parent_id: 176 +} +path_fragments { +id: 179 +label: "MANIFEST" +parent_id: 180 +} +artifacts { +id: 89 +path_fragment_id: 179 +} +actions { +target_id: 1 +action_key: "2acfeafbe09d892a6494ee4e4cc8ff9cf87b5306645f0cfc937d1be7e4d5fda2" +mnemonic: "SymlinkTree" +configuration_id: 1 +input_dep_set_ids: 7 +output_ids: 89 +primary_output_id: 89 +execution_platform: "@@platforms//host:host" +} +dep_set_of_files { +id: 8 +direct_artifact_ids: 86 +direct_artifact_ids: 89 +direct_artifact_ids: 87 +} +path_fragments { +id: 183 +label: "internal" +parent_id: 54 +} +path_fragments { +id: 182 +label: "_middlemen" +parent_id: 183 +} +path_fragments { +id: 181 +label: "cmd_Saquerydiff_Saquerydiff_Ulinux_Uamd64_U_Saquerydiff_Ulinux_Uamd64-runfiles" +parent_id: 182 +} +artifacts { +id: 90 +path_fragment_id: 181 +} +actions { +target_id: 1 +action_key: "709e80c88487a2411e1ee4dfb9f22a861492d20c4765150c0c794abd70f8147c" +mnemonic: "Middleman" +configuration_id: 1 +input_dep_set_ids: 8 +output_ids: 90 +primary_output_id: 90 +execution_platform: "@@platforms//host:host" +} diff --git a/examples/simple/before.textproto b/examples/simple/before.textproto new file mode 100644 index 0000000..26f0ea5 --- /dev/null +++ b/examples/simple/before.textproto @@ -0,0 +1,1841 @@ +rule_classes { +id: 1 +name: "go_binary" +} +targets { +id: 1 +label: "//cmd/aquerydiff:aquerydiff_darwin_amd64" +rule_class_id: 1 +} +configuration { +id: 1 +mnemonic: "darwin_arm64-fastbuild-ST-429f90df6b5d" +platform_name: "darwin_arm64" +checksum: "cdd13c6e945e04345180e5e5a8032419badf8239189beb14506d151600426049" +} +path_fragments { +id: 5 +label: "external" +} +path_fragments { +id: 4 +label: "rules_go++go_sdk+main___download_0" +parent_id: 5 +} +path_fragments { +id: 3 +label: "pkg" +parent_id: 4 +} +path_fragments { +id: 2 +label: "include" +parent_id: 3 +} +path_fragments { +id: 1 +label: "asm_amd64.h" +parent_id: 2 +} +artifacts { +id: 1 +path_fragment_id: 1 +} +path_fragments { +id: 6 +label: "asm_ppc64x.h" +parent_id: 2 +} +artifacts { +id: 2 +path_fragment_id: 6 +} +path_fragments { +id: 7 +label: "funcdata.h" +parent_id: 2 +} +artifacts { +id: 3 +path_fragment_id: 7 +} +path_fragments { +id: 8 +label: "textflag.h" +parent_id: 2 +} +artifacts { +id: 4 +path_fragment_id: 8 +} +dep_set_of_files { +id: 3 +direct_artifact_ids: 1 +direct_artifact_ids: 2 +direct_artifact_ids: 3 +direct_artifact_ids: 4 +} +path_fragments { +id: 10 +label: "bin" +parent_id: 4 +} +path_fragments { +id: 9 +label: "gofmt" +parent_id: 10 +} +artifacts { +id: 5 +path_fragment_id: 9 +} +path_fragments { +id: 13 +label: "tool" +parent_id: 3 +} +path_fragments { +id: 12 +label: "darwin_arm64" +parent_id: 13 +} +path_fragments { +id: 11 +label: "addr2line" +parent_id: 12 +} +artifacts { +id: 6 +path_fragment_id: 11 +} +path_fragments { +id: 14 +label: "asm" +parent_id: 12 +} +artifacts { +id: 7 +path_fragment_id: 14 +} +path_fragments { +id: 15 +label: "buildid" +parent_id: 12 +} +artifacts { +id: 8 +path_fragment_id: 15 +} +path_fragments { +id: 16 +label: "cgo" +parent_id: 12 +} +artifacts { +id: 9 +path_fragment_id: 16 +} +path_fragments { +id: 17 +label: "compile" +parent_id: 12 +} +artifacts { +id: 10 +path_fragment_id: 17 +} +path_fragments { +id: 18 +label: "covdata" +parent_id: 12 +} +artifacts { +id: 11 +path_fragment_id: 18 +} +path_fragments { +id: 19 +label: "cover" +parent_id: 12 +} +artifacts { +id: 12 +path_fragment_id: 19 +} +path_fragments { +id: 20 +label: "doc" +parent_id: 12 +} +artifacts { +id: 13 +path_fragment_id: 20 +} +path_fragments { +id: 21 +label: "fix" +parent_id: 12 +} +artifacts { +id: 14 +path_fragment_id: 21 +} +path_fragments { +id: 22 +label: "link" +parent_id: 12 +} +artifacts { +id: 15 +path_fragment_id: 22 +} +path_fragments { +id: 23 +label: "nm" +parent_id: 12 +} +artifacts { +id: 16 +path_fragment_id: 23 +} +path_fragments { +id: 24 +label: "objdump" +parent_id: 12 +} +artifacts { +id: 17 +path_fragment_id: 24 +} +path_fragments { +id: 25 +label: "pack" +parent_id: 12 +} +artifacts { +id: 18 +path_fragment_id: 25 +} +path_fragments { +id: 26 +label: "pprof" +parent_id: 12 +} +artifacts { +id: 19 +path_fragment_id: 26 +} +path_fragments { +id: 27 +label: "preprofile" +parent_id: 12 +} +artifacts { +id: 20 +path_fragment_id: 27 +} +path_fragments { +id: 28 +label: "test2json" +parent_id: 12 +} +artifacts { +id: 21 +path_fragment_id: 28 +} +path_fragments { +id: 29 +label: "trace" +parent_id: 12 +} +artifacts { +id: 22 +path_fragment_id: 29 +} +path_fragments { +id: 30 +label: "vet" +parent_id: 12 +} +artifacts { +id: 23 +path_fragment_id: 30 +} +path_fragments { +id: 31 +label: "go.env" +parent_id: 4 +} +artifacts { +id: 24 +path_fragment_id: 31 +} +dep_set_of_files { +id: 4 +direct_artifact_ids: 5 +direct_artifact_ids: 6 +direct_artifact_ids: 7 +direct_artifact_ids: 8 +direct_artifact_ids: 9 +direct_artifact_ids: 10 +direct_artifact_ids: 11 +direct_artifact_ids: 12 +direct_artifact_ids: 13 +direct_artifact_ids: 14 +direct_artifact_ids: 15 +direct_artifact_ids: 16 +direct_artifact_ids: 17 +direct_artifact_ids: 18 +direct_artifact_ids: 19 +direct_artifact_ids: 20 +direct_artifact_ids: 21 +direct_artifact_ids: 22 +direct_artifact_ids: 23 +direct_artifact_ids: 24 +} +path_fragments { +id: 38 +label: "bazel-out" +} +path_fragments { +id: 37 +label: "darwin_arm64-fastbuild-ST-ad4c399ec9e6" +parent_id: 38 +} +path_fragments { +id: 36 +label: "bin" +parent_id: 37 +} +path_fragments { +id: 35 +label: "external" +parent_id: 36 +} +path_fragments { +id: 34 +label: "rules_go+" +parent_id: 35 +} +path_fragments { +id: 33 +label: "stdlib_" +parent_id: 34 +} +path_fragments { +id: 32 +label: "pkg" +parent_id: 33 +} +artifacts { +id: 25 +path_fragment_id: 32 +is_tree_artifact: true +} +path_fragments { +id: 41 +label: "cmd" +} +path_fragments { +id: 40 +label: "aquerydiff" +parent_id: 41 +} +path_fragments { +id: 39 +label: "config.go" +parent_id: 40 +} +artifacts { +id: 26 +path_fragment_id: 39 +} +path_fragments { +id: 42 +label: "main.go" +parent_id: 40 +} +artifacts { +id: 27 +path_fragment_id: 42 +} +path_fragments { +id: 47 +label: "darwin_arm64-opt-exec-ST-d6cc8b84a7bb" +parent_id: 38 +} +path_fragments { +id: 46 +label: "bin" +parent_id: 47 +} +path_fragments { +id: 45 +label: "external" +parent_id: 46 +} +path_fragments { +id: 44 +label: "rules_go++go_sdk+main___download_0" +parent_id: 45 +} +path_fragments { +id: 43 +label: "packages.txt" +parent_id: 44 +} +artifacts { +id: 28 +path_fragment_id: 43 +} +path_fragments { +id: 49 +label: "pack_reset" +parent_id: 44 +} +path_fragments { +id: 48 +label: "pack.exe" +parent_id: 49 +} +artifacts { +id: 29 +path_fragment_id: 48 +} +path_fragments { +id: 54 +label: "darwin_arm64-fastbuild-ST-429f90df6b5d" +parent_id: 38 +} +path_fragments { +id: 53 +label: "bin" +parent_id: 54 +} +path_fragments { +id: 52 +label: "pkg" +parent_id: 53 +} +path_fragments { +id: 51 +label: "action" +parent_id: 52 +} +path_fragments { +id: 50 +label: "action.x" +parent_id: 51 +} +artifacts { +id: 30 +path_fragment_id: 50 +} +path_fragments { +id: 56 +label: "protobuf" +parent_id: 52 +} +path_fragments { +id: 55 +label: "protobuf.x" +parent_id: 56 +} +artifacts { +id: 31 +path_fragment_id: 55 +} +path_fragments { +id: 58 +label: "report" +parent_id: 52 +} +path_fragments { +id: 57 +label: "report.x" +parent_id: 58 +} +artifacts { +id: 32 +path_fragment_id: 57 +} +path_fragments { +id: 64 +label: "external" +parent_id: 53 +} +path_fragments { +id: 63 +label: "build_stack_rules_proto++proto_repository+bazelapis" +parent_id: 64 +} +path_fragments { +id: 62 +label: "src" +parent_id: 63 +} +path_fragments { +id: 61 +label: "main" +parent_id: 62 +} +path_fragments { +id: 60 +label: "protobuf" +parent_id: 61 +} +path_fragments { +id: 59 +label: "analysis_v2_go_proto.x" +parent_id: 60 +} +artifacts { +id: 33 +path_fragment_id: 59 +} +dep_set_of_files { +id: 2 +transitive_dep_set_ids: 3 +transitive_dep_set_ids: 4 +direct_artifact_ids: 25 +direct_artifact_ids: 26 +direct_artifact_ids: 27 +direct_artifact_ids: 28 +direct_artifact_ids: 29 +direct_artifact_ids: 30 +direct_artifact_ids: 31 +direct_artifact_ids: 32 +direct_artifact_ids: 33 +} +path_fragments { +id: 66 +label: "builder_reset" +parent_id: 44 +} +path_fragments { +id: 65 +label: "builder" +parent_id: 66 +} +artifacts { +id: 34 +path_fragment_id: 65 +} +dep_set_of_files { +id: 1 +transitive_dep_set_ids: 2 +direct_artifact_ids: 34 +} +path_fragments { +id: 69 +label: "cmd" +parent_id: 53 +} +path_fragments { +id: 68 +label: "aquerydiff" +parent_id: 69 +} +path_fragments { +id: 67 +label: "aquerydiff_darwin_amd64.a" +parent_id: 68 +} +artifacts { +id: 35 +path_fragment_id: 67 +} +path_fragments { +id: 70 +label: "aquerydiff_darwin_amd64.x" +parent_id: 68 +} +artifacts { +id: 36 +path_fragment_id: 70 +} +actions { +target_id: 1 +action_key: "a978026c38e76634174cad8859c8753352b1b2718cc3beae838b7139d8d94818" +mnemonic: "GoCompilePkg" +configuration_id: 1 +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/builder_reset/builder" +arguments: "compilepkg" +arguments: "-sdk" +arguments: "external/rules_go++go_sdk+main___download_0" +arguments: "-goroot" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-ad4c399ec9e6/bin/external/rules_go+/stdlib_" +arguments: "-installsuffix" +arguments: "darwin_amd64" +arguments: "-src" +arguments: "cmd/aquerydiff/config.go" +arguments: "-src" +arguments: "cmd/aquerydiff/main.go" +arguments: "-arc" +arguments: "github.com/stackb/bazel-aquery-differ/pkg/action=github.com/stackb/bazel-aquery-differ/pkg/action=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/action/action.x" +arguments: "-arc" +arguments: "github.com/stackb/bazel-aquery-differ/pkg/protobuf=github.com/stackb/bazel-aquery-differ/pkg/protobuf=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/protobuf/protobuf.x" +arguments: "-arc" +arguments: "github.com/stackb/bazel-aquery-differ/pkg/report=github.com/stackb/bazel-aquery-differ/pkg/report=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/report/report.x" +arguments: "-arc" +arguments: "github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2=github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/build_stack_rules_proto++proto_repository+bazelapis/src/main/protobuf/analysis_v2_go_proto.x" +arguments: "-importpath" +arguments: "github.com/stackb/bazel-aquery-differ/cmd/aquerydiff" +arguments: "-p" +arguments: "main" +arguments: "-package_list" +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/packages.txt" +arguments: "-pack" +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/pack_reset/pack.exe" +arguments: "-embedroot" +arguments: "" +arguments: "-embedroot" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin" +arguments: "-embedlookupdir" +arguments: "cmd/aquerydiff" +arguments: "-lo" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/cmd/aquerydiff/aquerydiff_darwin_amd64.a" +arguments: "-o" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/cmd/aquerydiff/aquerydiff_darwin_amd64.x" +arguments: "-gcflags" +arguments: "" +environment_variables { + key: "GOARCH" + value: "amd64" +} +environment_variables { + key: "GOOS" + value: "darwin" +} +environment_variables { + key: "GOEXPERIMENT" +} +environment_variables { + key: "GOROOT_FINAL" + value: "GOROOT" +} +environment_variables { + key: "CGO_ENABLED" + value: "0" +} +environment_variables { + key: "GOPATH" +} +environment_variables { + key: "GOTOOLCHAIN" + value: "local" +} +environment_variables { + key: "GODEBUG" + value: "winsymlink=0" +} +environment_variables { + key: "XCODE_VERSION_OVERRIDE" + value: "26.0.0.17A324" +} +environment_variables { + key: "APPLE_SDK_VERSION_OVERRIDE" + value: "26.0" +} +environment_variables { + key: "APPLE_SDK_PLATFORM" + value: "MacOSX" +} +environment_variables { + key: "ZERO_AR_DATE" + value: "1" +} +environment_variables { + key: "RELATIVE_AST_PATH" + value: "true" +} +environment_variables { + key: "PATH" + value: "external/apple_support++apple_cc_configure_extension+local_config_apple_cc:/bin:/usr/bin" +} +input_dep_set_ids: 1 +output_ids: 35 +output_ids: 36 +execution_info { + key: "supports-path-mapping" + value: "1" +} +primary_output_id: 35 +execution_platform: "@@platforms//host:host" +} +path_fragments { +id: 74 +label: "gazelle++go_deps+org_golang_google_protobuf" +parent_id: 64 +} +path_fragments { +id: 73 +label: "internal" +parent_id: 74 +} +path_fragments { +id: 72 +label: "detrand" +parent_id: 73 +} +path_fragments { +id: 71 +label: "detrand.a" +parent_id: 72 +} +artifacts { +id: 37 +path_fragment_id: 71 +} +path_fragments { +id: 76 +label: "errors" +parent_id: 73 +} +path_fragments { +id: 75 +label: "errors.a" +parent_id: 76 +} +artifacts { +id: 38 +path_fragment_id: 75 +} +path_fragments { +id: 79 +label: "encoding" +parent_id: 74 +} +path_fragments { +id: 78 +label: "protowire" +parent_id: 79 +} +path_fragments { +id: 77 +label: "protowire.a" +parent_id: 78 +} +artifacts { +id: 39 +path_fragment_id: 77 +} +path_fragments { +id: 81 +label: "flags" +parent_id: 73 +} +path_fragments { +id: 80 +label: "flags.a" +parent_id: 81 +} +artifacts { +id: 40 +path_fragment_id: 80 +} +path_fragments { +id: 83 +label: "pragma" +parent_id: 73 +} +path_fragments { +id: 82 +label: "pragma.a" +parent_id: 83 +} +artifacts { +id: 41 +path_fragment_id: 82 +} +path_fragments { +id: 86 +label: "reflect" +parent_id: 74 +} +path_fragments { +id: 85 +label: "protoreflect" +parent_id: 86 +} +path_fragments { +id: 84 +label: "protoreflect.a" +parent_id: 85 +} +artifacts { +id: 42 +path_fragment_id: 84 +} +path_fragments { +id: 88 +label: "strs" +parent_id: 73 +} +path_fragments { +id: 87 +label: "strs.a" +parent_id: 88 +} +artifacts { +id: 43 +path_fragment_id: 87 +} +path_fragments { +id: 91 +label: "encoding" +parent_id: 73 +} +path_fragments { +id: 90 +label: "json" +parent_id: 91 +} +path_fragments { +id: 89 +label: "json.a" +parent_id: 90 +} +artifacts { +id: 44 +path_fragment_id: 89 +} +path_fragments { +id: 93 +label: "messageset" +parent_id: 91 +} +path_fragments { +id: 92 +label: "messageset.a" +parent_id: 93 +} +artifacts { +id: 45 +path_fragment_id: 92 +} +path_fragments { +id: 95 +label: "descfmt" +parent_id: 73 +} +path_fragments { +id: 94 +label: "descfmt.a" +parent_id: 95 +} +artifacts { +id: 46 +path_fragment_id: 94 +} +path_fragments { +id: 97 +label: "descopts" +parent_id: 73 +} +path_fragments { +id: 96 +label: "descopts.a" +parent_id: 97 +} +artifacts { +id: 47 +path_fragment_id: 96 +} +path_fragments { +id: 99 +label: "editiondefaults" +parent_id: 73 +} +path_fragments { +id: 98 +label: "editiondefaults.a" +parent_id: 99 +} +artifacts { +id: 48 +path_fragment_id: 98 +} +path_fragments { +id: 101 +label: "text" +parent_id: 91 +} +path_fragments { +id: 100 +label: "text.a" +parent_id: 101 +} +artifacts { +id: 49 +path_fragment_id: 100 +} +path_fragments { +id: 103 +label: "defval" +parent_id: 91 +} +path_fragments { +id: 102 +label: "defval.a" +parent_id: 103 +} +artifacts { +id: 50 +path_fragment_id: 102 +} +path_fragments { +id: 105 +label: "genid" +parent_id: 73 +} +path_fragments { +id: 104 +label: "genid.a" +parent_id: 105 +} +artifacts { +id: 51 +path_fragment_id: 104 +} +path_fragments { +id: 107 +label: "order" +parent_id: 73 +} +path_fragments { +id: 106 +label: "order.a" +parent_id: 107 +} +artifacts { +id: 52 +path_fragment_id: 106 +} +path_fragments { +id: 109 +label: "protoregistry" +parent_id: 86 +} +path_fragments { +id: 108 +label: "protoregistry.a" +parent_id: 109 +} +artifacts { +id: 53 +path_fragment_id: 108 +} +path_fragments { +id: 112 +label: "runtime" +parent_id: 74 +} +path_fragments { +id: 111 +label: "protoiface" +parent_id: 112 +} +path_fragments { +id: 110 +label: "protoiface.a" +parent_id: 111 +} +artifacts { +id: 54 +path_fragment_id: 110 +} +path_fragments { +id: 114 +label: "proto" +parent_id: 74 +} +path_fragments { +id: 113 +label: "proto.a" +parent_id: 114 +} +artifacts { +id: 55 +path_fragment_id: 113 +} +path_fragments { +id: 116 +label: "filedesc" +parent_id: 73 +} +path_fragments { +id: 115 +label: "filedesc.a" +parent_id: 116 +} +artifacts { +id: 56 +path_fragment_id: 115 +} +path_fragments { +id: 118 +label: "set" +parent_id: 73 +} +path_fragments { +id: 117 +label: "set.a" +parent_id: 118 +} +artifacts { +id: 57 +path_fragment_id: 117 +} +path_fragments { +id: 120 +label: "protojson" +parent_id: 79 +} +path_fragments { +id: 119 +label: "protojson.a" +parent_id: 120 +} +artifacts { +id: 58 +path_fragment_id: 119 +} +path_fragments { +id: 122 +label: "prototext" +parent_id: 79 +} +path_fragments { +id: 121 +label: "prototext.a" +parent_id: 122 +} +artifacts { +id: 59 +path_fragment_id: 121 +} +path_fragments { +id: 124 +label: "tag" +parent_id: 91 +} +path_fragments { +id: 123 +label: "tag.a" +parent_id: 124 +} +artifacts { +id: 60 +path_fragment_id: 123 +} +path_fragments { +id: 126 +label: "protolazy" +parent_id: 73 +} +path_fragments { +id: 125 +label: "protolazy.a" +parent_id: 126 +} +artifacts { +id: 61 +path_fragment_id: 125 +} +path_fragments { +id: 128 +label: "impl" +parent_id: 73 +} +path_fragments { +id: 127 +label: "impl.a" +parent_id: 128 +} +artifacts { +id: 62 +path_fragment_id: 127 +} +path_fragments { +id: 130 +label: "filetype" +parent_id: 73 +} +path_fragments { +id: 129 +label: "filetype.a" +parent_id: 130 +} +artifacts { +id: 63 +path_fragment_id: 129 +} +path_fragments { +id: 132 +label: "version" +parent_id: 73 +} +path_fragments { +id: 131 +label: "version.a" +parent_id: 132 +} +artifacts { +id: 64 +path_fragment_id: 131 +} +path_fragments { +id: 134 +label: "protoimpl" +parent_id: 112 +} +path_fragments { +id: 133 +label: "protoimpl.a" +parent_id: 134 +} +artifacts { +id: 65 +path_fragment_id: 133 +} +path_fragments { +id: 135 +label: "stardoc_output_go_proto.a" +parent_id: 60 +} +artifacts { +id: 66 +path_fragment_id: 135 +} +path_fragments { +id: 136 +label: "build_go_proto.a" +parent_id: 60 +} +artifacts { +id: 67 +path_fragment_id: 136 +} +path_fragments { +id: 137 +label: "analysis_v2_go_proto.a" +parent_id: 60 +} +artifacts { +id: 68 +path_fragment_id: 137 +} +path_fragments { +id: 143 +label: "build" +parent_id: 53 +} +path_fragments { +id: 142 +label: "stack" +parent_id: 143 +} +path_fragments { +id: 141 +label: "bazel" +parent_id: 142 +} +path_fragments { +id: 140 +label: "aquery" +parent_id: 141 +} +path_fragments { +id: 139 +label: "differ" +parent_id: 140 +} +path_fragments { +id: 138 +label: "differ.a" +parent_id: 139 +} +artifacts { +id: 69 +path_fragment_id: 138 +} +path_fragments { +id: 145 +label: "pathfragment" +parent_id: 52 +} +path_fragments { +id: 144 +label: "pathfragment.a" +parent_id: 145 +} +artifacts { +id: 70 +path_fragment_id: 144 +} +path_fragments { +id: 147 +label: "artifact" +parent_id: 52 +} +path_fragments { +id: 146 +label: "artifact.a" +parent_id: 147 +} +artifacts { +id: 71 +path_fragment_id: 146 +} +path_fragments { +id: 149 +label: "depset" +parent_id: 52 +} +path_fragments { +id: 148 +label: "depset.a" +parent_id: 149 +} +artifacts { +id: 72 +path_fragment_id: 148 +} +path_fragments { +id: 150 +label: "protobuf.a" +parent_id: 56 +} +artifacts { +id: 73 +path_fragment_id: 150 +} +path_fragments { +id: 152 +label: "target" +parent_id: 52 +} +path_fragments { +id: 151 +label: "target.a" +parent_id: 152 +} +artifacts { +id: 74 +path_fragment_id: 151 +} +path_fragments { +id: 157 +label: "gazelle++go_deps+com_github_google_go_cmp" +parent_id: 64 +} +path_fragments { +id: 156 +label: "cmp" +parent_id: 157 +} +path_fragments { +id: 155 +label: "internal" +parent_id: 156 +} +path_fragments { +id: 154 +label: "flags" +parent_id: 155 +} +path_fragments { +id: 153 +label: "flags.a" +parent_id: 154 +} +artifacts { +id: 75 +path_fragment_id: 153 +} +path_fragments { +id: 159 +label: "diff" +parent_id: 155 +} +path_fragments { +id: 158 +label: "diff.a" +parent_id: 159 +} +artifacts { +id: 76 +path_fragment_id: 158 +} +path_fragments { +id: 161 +label: "function" +parent_id: 155 +} +path_fragments { +id: 160 +label: "function.a" +parent_id: 161 +} +artifacts { +id: 77 +path_fragment_id: 160 +} +path_fragments { +id: 163 +label: "value" +parent_id: 155 +} +path_fragments { +id: 162 +label: "value.a" +parent_id: 163 +} +artifacts { +id: 78 +path_fragment_id: 162 +} +path_fragments { +id: 164 +label: "cmp.a" +parent_id: 156 +} +artifacts { +id: 79 +path_fragment_id: 164 +} +path_fragments { +id: 166 +label: "cmpopts" +parent_id: 156 +} +path_fragments { +id: 165 +label: "cmpopts.a" +parent_id: 166 +} +artifacts { +id: 80 +path_fragment_id: 165 +} +path_fragments { +id: 169 +label: "gazelle++go_deps+com_github_hexops_gotextdiff" +parent_id: 64 +} +path_fragments { +id: 168 +label: "span" +parent_id: 169 +} +path_fragments { +id: 167 +label: "span.a" +parent_id: 168 +} +artifacts { +id: 81 +path_fragment_id: 167 +} +path_fragments { +id: 170 +label: "gotextdiff.a" +parent_id: 169 +} +artifacts { +id: 82 +path_fragment_id: 170 +} +path_fragments { +id: 172 +label: "myers" +parent_id: 169 +} +path_fragments { +id: 171 +label: "myers.a" +parent_id: 172 +} +artifacts { +id: 83 +path_fragment_id: 171 +} +path_fragments { +id: 173 +label: "action.a" +parent_id: 51 +} +artifacts { +id: 84 +path_fragment_id: 173 +} +path_fragments { +id: 174 +label: "report.a" +parent_id: 58 +} +artifacts { +id: 85 +path_fragment_id: 174 +} +path_fragments { +id: 176 +label: "apple_support++apple_cc_configure_extension+local_config_apple_cc" +parent_id: 5 +} +path_fragments { +id: 175 +label: "cc_wrapper.sh" +parent_id: 176 +} +artifacts { +id: 86 +path_fragment_id: 175 +} +path_fragments { +id: 177 +label: "libtool" +parent_id: 176 +} +artifacts { +id: 87 +path_fragment_id: 177 +} +path_fragments { +id: 178 +label: "libtool_check_unique" +parent_id: 176 +} +artifacts { +id: 88 +path_fragment_id: 178 +} +path_fragments { +id: 179 +label: "make_hashed_objlist.py" +parent_id: 176 +} +artifacts { +id: 89 +path_fragment_id: 179 +} +path_fragments { +id: 180 +label: "wrapped_clang" +parent_id: 176 +} +artifacts { +id: 90 +path_fragment_id: 180 +} +path_fragments { +id: 181 +label: "wrapped_clang_pp" +parent_id: 176 +} +artifacts { +id: 91 +path_fragment_id: 181 +} +path_fragments { +id: 182 +label: "xcrunwrapper.sh" +parent_id: 176 +} +artifacts { +id: 92 +path_fragment_id: 182 +} +dep_set_of_files { +id: 6 +direct_artifact_ids: 37 +direct_artifact_ids: 38 +direct_artifact_ids: 39 +direct_artifact_ids: 40 +direct_artifact_ids: 41 +direct_artifact_ids: 42 +direct_artifact_ids: 43 +direct_artifact_ids: 44 +direct_artifact_ids: 45 +direct_artifact_ids: 46 +direct_artifact_ids: 47 +direct_artifact_ids: 48 +direct_artifact_ids: 49 +direct_artifact_ids: 50 +direct_artifact_ids: 51 +direct_artifact_ids: 52 +direct_artifact_ids: 53 +direct_artifact_ids: 54 +direct_artifact_ids: 55 +direct_artifact_ids: 56 +direct_artifact_ids: 57 +direct_artifact_ids: 58 +direct_artifact_ids: 59 +direct_artifact_ids: 60 +direct_artifact_ids: 61 +direct_artifact_ids: 62 +direct_artifact_ids: 63 +direct_artifact_ids: 64 +direct_artifact_ids: 65 +direct_artifact_ids: 66 +direct_artifact_ids: 67 +direct_artifact_ids: 68 +direct_artifact_ids: 69 +direct_artifact_ids: 70 +direct_artifact_ids: 71 +direct_artifact_ids: 72 +direct_artifact_ids: 73 +direct_artifact_ids: 74 +direct_artifact_ids: 75 +direct_artifact_ids: 76 +direct_artifact_ids: 77 +direct_artifact_ids: 78 +direct_artifact_ids: 79 +direct_artifact_ids: 80 +direct_artifact_ids: 81 +direct_artifact_ids: 82 +direct_artifact_ids: 83 +direct_artifact_ids: 84 +direct_artifact_ids: 85 +direct_artifact_ids: 35 +direct_artifact_ids: 86 +direct_artifact_ids: 87 +direct_artifact_ids: 88 +direct_artifact_ids: 89 +direct_artifact_ids: 90 +direct_artifact_ids: 91 +direct_artifact_ids: 92 +direct_artifact_ids: 5 +direct_artifact_ids: 6 +direct_artifact_ids: 7 +direct_artifact_ids: 8 +direct_artifact_ids: 9 +direct_artifact_ids: 10 +direct_artifact_ids: 11 +direct_artifact_ids: 12 +direct_artifact_ids: 13 +direct_artifact_ids: 14 +direct_artifact_ids: 15 +direct_artifact_ids: 16 +direct_artifact_ids: 17 +direct_artifact_ids: 18 +direct_artifact_ids: 19 +direct_artifact_ids: 20 +direct_artifact_ids: 21 +direct_artifact_ids: 22 +direct_artifact_ids: 23 +direct_artifact_ids: 24 +direct_artifact_ids: 25 +direct_artifact_ids: 28 +} +dep_set_of_files { +id: 5 +transitive_dep_set_ids: 6 +direct_artifact_ids: 34 +} +path_fragments { +id: 184 +label: "aquerydiff_darwin_amd64_" +parent_id: 68 +} +path_fragments { +id: 183 +label: "aquerydiff_darwin_amd64" +parent_id: 184 +} +artifacts { +id: 93 +path_fragment_id: 183 +} +actions { +target_id: 1 +action_key: "bcc99bb8a6a643ada581d0cbcf0d2aa2b38a93249c7637cd55418fcfe9001390" +mnemonic: "GoLink" +configuration_id: 1 +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/builder_reset/builder" +arguments: "link" +arguments: "-sdk" +arguments: "external/rules_go++go_sdk+main___download_0" +arguments: "-goroot" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-ad4c399ec9e6/bin/external/rules_go+/stdlib_" +arguments: "-installsuffix" +arguments: "darwin_amd64" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/detrand:detrand=google.golang.org/protobuf/internal/detrand=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/detrand/detrand.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/errors:errors=google.golang.org/protobuf/internal/errors=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/errors/errors.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//encoding/protowire:protowire=google.golang.org/protobuf/encoding/protowire=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/encoding/protowire/protowire.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/flags:flags=google.golang.org/protobuf/internal/flags=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/flags/flags.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/pragma:pragma=google.golang.org/protobuf/internal/pragma=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/pragma/pragma.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//reflect/protoreflect:protoreflect=google.golang.org/protobuf/reflect/protoreflect=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/reflect/protoreflect/protoreflect.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/strs:strs=google.golang.org/protobuf/internal/strs=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/strs/strs.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/json:json=google.golang.org/protobuf/internal/encoding/json=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/json/json.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/messageset:messageset=google.golang.org/protobuf/internal/encoding/messageset=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/messageset/messageset.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/descfmt:descfmt=google.golang.org/protobuf/internal/descfmt=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/descfmt/descfmt.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/descopts:descopts=google.golang.org/protobuf/internal/descopts=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/descopts/descopts.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/editiondefaults:editiondefaults=google.golang.org/protobuf/internal/editiondefaults=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/editiondefaults/editiondefaults.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/text:text=google.golang.org/protobuf/internal/encoding/text=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/text/text.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/defval:defval=google.golang.org/protobuf/internal/encoding/defval=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/defval/defval.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/genid:genid=google.golang.org/protobuf/internal/genid=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/genid/genid.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/order:order=google.golang.org/protobuf/internal/order=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/order/order.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//reflect/protoregistry:protoregistry=google.golang.org/protobuf/reflect/protoregistry=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/reflect/protoregistry/protoregistry.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//runtime/protoiface:protoiface=google.golang.org/protobuf/runtime/protoiface=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/runtime/protoiface/protoiface.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//proto:proto=google.golang.org/protobuf/proto=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/proto/proto.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/filedesc:filedesc=google.golang.org/protobuf/internal/filedesc=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/filedesc/filedesc.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/set:set=google.golang.org/protobuf/internal/set=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/set/set.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//encoding/protojson:protojson=google.golang.org/protobuf/encoding/protojson=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/encoding/protojson/protojson.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//encoding/prototext:prototext=google.golang.org/protobuf/encoding/prototext=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/encoding/prototext/prototext.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/encoding/tag:tag=google.golang.org/protobuf/internal/encoding/tag=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/encoding/tag/tag.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/protolazy:protolazy=google.golang.org/protobuf/internal/protolazy=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/protolazy/protolazy.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/impl:impl=google.golang.org/protobuf/internal/impl=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/impl/impl.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/filetype:filetype=google.golang.org/protobuf/internal/filetype=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/filetype/filetype.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//internal/version:version=google.golang.org/protobuf/internal/version=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/internal/version/version.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+org_golang_google_protobuf//runtime/protoimpl:protoimpl=google.golang.org/protobuf/runtime/protoimpl=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+org_golang_google_protobuf/runtime/protoimpl/protoimpl.a" +arguments: "-arc" +arguments: "@@build_stack_rules_proto++proto_repository+bazelapis//src/main/protobuf:stardoc_output_go_proto=github.com/bazelbuild/bazel/src/main/protobuf/stardoc_output=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/build_stack_rules_proto++proto_repository+bazelapis/src/main/protobuf/stardoc_output_go_proto.a" +arguments: "-arc" +arguments: "@@build_stack_rules_proto++proto_repository+bazelapis//src/main/protobuf:build_go_proto=github.com/bazelbuild/bazelapis/src/main/protobuf/build=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/build_stack_rules_proto++proto_repository+bazelapis/src/main/protobuf/build_go_proto.a" +arguments: "-arc" +arguments: "@@build_stack_rules_proto++proto_repository+bazelapis//src/main/protobuf:analysis_v2_go_proto=github.com/bazelbuild/bazelapis/src/main/protobuf/analysis_v2=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/build_stack_rules_proto++proto_repository+bazelapis/src/main/protobuf/analysis_v2_go_proto.a" +arguments: "-arc" +arguments: "@@//build/stack/bazel/aquery/differ:differ=github.com/stackb/bazel-aquery-differ/build/stack/bazel/aquery/differ=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/build/stack/bazel/aquery/differ/differ.a" +arguments: "-arc" +arguments: "@@//pkg/pathfragment:pathfragment=github.com/stackb/bazel-aquery-differ/pkg/pathfragment=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/pathfragment/pathfragment.a" +arguments: "-arc" +arguments: "@@//pkg/artifact:artifact=github.com/stackb/bazel-aquery-differ/pkg/artifact=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/artifact/artifact.a" +arguments: "-arc" +arguments: "@@//pkg/depset:depset=github.com/stackb/bazel-aquery-differ/pkg/depset=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/depset/depset.a" +arguments: "-arc" +arguments: "@@//pkg/protobuf:protobuf=github.com/stackb/bazel-aquery-differ/pkg/protobuf=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/protobuf/protobuf.a" +arguments: "-arc" +arguments: "@@//pkg/target:target=github.com/stackb/bazel-aquery-differ/pkg/target=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/target/target.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/internal/flags:flags=github.com/google/go-cmp/cmp/internal/flags=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/internal/flags/flags.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/internal/diff:diff=github.com/google/go-cmp/cmp/internal/diff=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/internal/diff/diff.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/internal/function:function=github.com/google/go-cmp/cmp/internal/function=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/internal/function/function.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/internal/value:value=github.com/google/go-cmp/cmp/internal/value=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/internal/value/value.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp:cmp=github.com/google/go-cmp/cmp=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/cmp.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_google_go_cmp//cmp/cmpopts:cmpopts=github.com/google/go-cmp/cmp/cmpopts=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_google_go_cmp/cmp/cmpopts/cmpopts.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_hexops_gotextdiff//span:span=github.com/hexops/gotextdiff/span=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_hexops_gotextdiff/span/span.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_hexops_gotextdiff//:gotextdiff=github.com/hexops/gotextdiff=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_hexops_gotextdiff/gotextdiff.a" +arguments: "-arc" +arguments: "@@gazelle++go_deps+com_github_hexops_gotextdiff//myers:myers=github.com/hexops/gotextdiff/myers=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/external/gazelle++go_deps+com_github_hexops_gotextdiff/myers/myers.a" +arguments: "-arc" +arguments: "@@//pkg/action:action=github.com/stackb/bazel-aquery-differ/pkg/action=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/action/action.a" +arguments: "-arc" +arguments: "@@//pkg/report:report=github.com/stackb/bazel-aquery-differ/pkg/report=bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/pkg/report/report.a" +arguments: "-package_list" +arguments: "bazel-out/darwin_arm64-opt-exec-ST-d6cc8b84a7bb/bin/external/rules_go++go_sdk+main___download_0/packages.txt" +arguments: "-o" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/cmd/aquerydiff/aquerydiff_darwin_amd64_/aquerydiff_darwin_amd64" +arguments: "-main" +arguments: "bazel-out/darwin_arm64-fastbuild-ST-429f90df6b5d/bin/cmd/aquerydiff/aquerydiff_darwin_amd64.a" +arguments: "-p" +arguments: "github.com/stackb/bazel-aquery-differ/cmd/aquerydiff" +arguments: "--" +arguments: "-linkmode" +arguments: "internal" +arguments: "-s" +arguments: "-w" +arguments: "-buildid=redacted" +arguments: "-s" +arguments: "-w" +arguments: "-extldflags" +arguments: "-Wl,-oso_prefix,__BAZEL_EXECUTION_ROOT_NO_SANDBOX__/ -headerpad_max_install_names -no-canonical-prefixes -target x86_64-apple-macosx26.0 -fobjc-link-runtime -Xlinker -no_deduplicate -framework Foundation -Wl,-no_warn_duplicate_libraries -static" +environment_variables { + key: "GOARCH" + value: "amd64" +} +environment_variables { + key: "GOOS" + value: "darwin" +} +environment_variables { + key: "GOEXPERIMENT" +} +environment_variables { + key: "GOROOT" + value: "bazel-out/darwin_arm64-fastbuild-ST-ad4c399ec9e6/bin/external/rules_go+/stdlib_" +} +environment_variables { + key: "GOROOT_FINAL" + value: "GOROOT" +} +environment_variables { + key: "CGO_ENABLED" + value: "0" +} +environment_variables { + key: "GOPATH" +} +environment_variables { + key: "GOTOOLCHAIN" + value: "local" +} +environment_variables { + key: "GODEBUG" + value: "winsymlink=0" +} +environment_variables { + key: "XCODE_VERSION_OVERRIDE" + value: "26.0.0.17A324" +} +environment_variables { + key: "APPLE_SDK_VERSION_OVERRIDE" + value: "26.0" +} +environment_variables { + key: "APPLE_SDK_PLATFORM" + value: "MacOSX" +} +environment_variables { + key: "ZERO_AR_DATE" + value: "1" +} +environment_variables { + key: "RELATIVE_AST_PATH" + value: "true" +} +environment_variables { + key: "PATH" + value: "external/apple_support++apple_cc_configure_extension+local_config_apple_cc:/bin:/usr/bin" +} +input_dep_set_ids: 5 +output_ids: 93 +primary_output_id: 93 +execution_platform: "@@platforms//host:host" +} +path_fragments { +id: 185 +label: "aquerydiff_darwin_amd64.repo_mapping" +parent_id: 184 +} +artifacts { +id: 94 +path_fragment_id: 185 +} +actions { +target_id: 1 +action_key: "5341c994bc161a38310a3e9f12d01ced4881371288a50e0cac0dfe45b048aa28" +mnemonic: "RepoMappingManifest" +configuration_id: 1 +output_ids: 94 +primary_output_id: 94 +execution_platform: "@@platforms//host:host" +} +path_fragments { +id: 186 +label: "aquerydiff_darwin_amd64.runfiles_manifest" +parent_id: 184 +} +artifacts { +id: 95 +path_fragment_id: 186 +} +actions { +target_id: 1 +action_key: "17035b7253a5f99714c64b54a6bad3920a7bb703d7c50fc640e281e12d47fa9b" +mnemonic: "SourceSymlinkManifest" +configuration_id: 1 +output_ids: 95 +primary_output_id: 95 +execution_platform: "@@platforms//host:host" +} +dep_set_of_files { +id: 7 +direct_artifact_ids: 95 +} +path_fragments { +id: 188 +label: "aquerydiff_darwin_amd64.runfiles" +parent_id: 184 +} +path_fragments { +id: 187 +label: "MANIFEST" +parent_id: 188 +} +artifacts { +id: 96 +path_fragment_id: 187 +} +actions { +target_id: 1 +action_key: "08f02e125d7ddecc99b26d8f93984d71fa1e16ac6c8d3a68195ad077fd92f124" +mnemonic: "SymlinkTree" +configuration_id: 1 +input_dep_set_ids: 7 +output_ids: 96 +primary_output_id: 96 +execution_platform: "@@platforms//host:host" +} +dep_set_of_files { +id: 8 +direct_artifact_ids: 93 +direct_artifact_ids: 96 +direct_artifact_ids: 94 +} +path_fragments { +id: 191 +label: "internal" +parent_id: 54 +} +path_fragments { +id: 190 +label: "_middlemen" +parent_id: 191 +} +path_fragments { +id: 189 +label: "cmd_Saquerydiff_Saquerydiff_Udarwin_Uamd64_U_Saquerydiff_Udarwin_Uamd64-runfiles" +parent_id: 190 +} +artifacts { +id: 97 +path_fragment_id: 189 +} +actions { +target_id: 1 +action_key: "709e80c88487a2411e1ee4dfb9f22a861492d20c4765150c0c794abd70f8147c" +mnemonic: "Middleman" +configuration_id: 1 +input_dep_set_ids: 8 +output_ids: 97 +primary_output_id: 97 +execution_platform: "@@platforms//host:host" +} From 7cb5ad7c6a06e93f77bdcc8add57d2b7aac145b3 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Fri, 10 Oct 2025 23:09:27 -0600 Subject: [PATCH 19/19] remove local override --- MODULE.bazel | 5 ----- 1 file changed, 5 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 131dbbc..f9f0a44 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -12,11 +12,6 @@ bazel_dep(name = "rules_go", version = "0.57.0") bazel_dep(name = "gazelle", version = "0.45.0") bazel_dep(name = "build_stack_rules_proto", version = "4.1.1") -local_path_override( - module_name = "rules_go", - path = "/Users/pcj/go/src/github.com/bazel-contrib/rules_go", -) - # ------------------------------------------------------------------- # Configuration: Go # -------------------------------------------------------------------