]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: do not collect build information for test packages when not needed
authorPierre Gimalac <pierre.gimalac@datadoghq.com>
Tue, 3 Feb 2026 13:25:23 +0000 (14:25 +0100)
committerGopher Robot <gobot@golang.org>
Thu, 12 Feb 2026 20:12:13 +0000 (12:12 -0800)
When build information is not needed for go list output (when -export=false and Stale and StaleReason fields are not printed), the "SuppressBuildInfo" option is set to true, so that cmd/go/internal/load does not collect it (in particular VCS information, which is costly to compute).
However the option is only checked in "PackagesAndErrors", not in "TestPackagesAndErrors", so when running go list -test=true, build information is still collected, significantly increasing the duration of the command.

This CL updates TestPackagesAndErrors to check SuppressBuildInfo before calling setBuildInfo, like PackagesAndErrors does.

Fixes #77419

Change-Id: I13f60d179c26d79d94899498f76ba9093566eeb6
Reviewed-on: https://go-review.googlesource.com/c/go/+/740901
Reviewed-by: Michael Matloob <matloob@google.com>
Reviewed-by: Ian Alexander <jitsu@google.com>
Auto-Submit: Ian Alexander <jitsu@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Sean Liao <sean@liao.dev>
src/cmd/go/internal/load/test.go

index e5c074fa1930373779003804ccc63c20c383627f..f9bdd5e1fc2d1ad4f0532a23bd3f51e29fc6f14d 100644 (file)
@@ -294,7 +294,7 @@ func TestPackagesAndErrors(loaderstate *modload.State, ctx context.Context, done
 
        pb := p.Internal.Build
        pmain.DefaultGODEBUG = defaultGODEBUG(loaderstate, pmain, pb.Directives, pb.TestDirectives, pb.XTestDirectives)
-       if pmain.Internal.BuildInfo == nil || pmain.DefaultGODEBUG != p.DefaultGODEBUG {
+       if !opts.SuppressBuildInfo && (pmain.Internal.BuildInfo == nil || pmain.DefaultGODEBUG != p.DefaultGODEBUG) {
                // Either we didn't generate build info for the package under test (because it wasn't package main), or
                // the DefaultGODEBUG used to build the test main package is different from the DefaultGODEBUG
                // used to build the package under test. If we didn't set build info for the package under test