If the user provides the -json flag to explicitly specify fields, but doesn't specify any *Embed* field, skip computing the embed fields.
This enhances the initial implementation of #29666.
Change-Id: I60e86fb25a445689aecbcc7f3f3f88e0f37a0fc5
GitHub-Last-Rev:
2795c195bf995f798a45e928becebc253c89b9d6
GitHub-Pull-Request: golang/go#58522
Reviewed-on: https://go-review.googlesource.com/c/go/+/468075
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
// for test variants of packages and users who have been providing format strings
// might not expect those errors to stop showing up.
// See issue #52443.
- SuppressDeps: !listJsonFields.needAny("Deps", "DepsErrors"),
- SuppressBuildInfo: !listJsonFields.needAny("Stale", "StaleReason"),
+ SuppressDeps: !listJsonFields.needAny("Deps", "DepsErrors"),
+ SuppressBuildInfo: !listJsonFields.needAny("Stale", "StaleReason"),
+ SuppressEmbedFiles: !listJsonFields.needAny("EmbedFiles", "TestEmbedFiles", "XTestEmbedFiles"),
}
pkgs := load.PackagesAndErrors(ctx, pkgOpts, args)
if !*listE {
}
p.DefaultGODEBUG = defaultGODEBUG(p, nil, nil, nil)
- p.EmbedFiles, p.Internal.Embed, err = resolveEmbed(p.Dir, p.EmbedPatterns)
- if err != nil {
- p.Incomplete = true
- setError(err)
- embedErr := err.(*EmbedError)
- p.Error.setPos(p.Internal.Build.EmbedPatternPos[embedErr.Pattern])
+ if !opts.SuppressEmbedFiles {
+ p.EmbedFiles, p.Internal.Embed, err = resolveEmbed(p.Dir, p.EmbedPatterns)
+ if err != nil {
+ p.Incomplete = true
+ setError(err)
+ embedErr := err.(*EmbedError)
+ p.Error.setPos(p.Internal.Build.EmbedPatternPos[embedErr.Pattern])
+ }
}
// Check for case-insensitive collision of input files.
// SuppressBuildInfo is true if the caller does not need p.Stale, p.StaleReason, or p.Internal.BuildInfo
// to be populated on the package.
SuppressBuildInfo bool
+
+ // SuppressEmbedFiles is true if the caller does not need any embed files to be populated on the
+ // package.
+ SuppressEmbedFiles bool
}
// PackagesAndErrors returns the packages named by the command line arguments
stdout '"Deps": \['
stdout '"errors",'
+# Test -json=<field> with *EmbedPatterns outputs embed patterns.
+cd embed
+go list -json=EmbedPatterns,TestEmbedPatterns,XTestEmbedPatterns
+stdout '"EmbedPatterns": \['
+stdout '"TestEmbedPatterns": \['
+stdout '"XTestEmbedPatterns": \['
+# Test -json=<field> with *EmbedFiles fails due to broken file reference.
+! go list -json=EmbedFiles
+stderr 'no matching files found'
+! go list -json=TestEmbedFiles
+stderr 'no matching files found'
+! go list -json=XTestEmbedFiles
+stderr 'no matching files found'
+cd ..
+
[!git] skip
# Test -json=<field> without Stale skips computing buildinfo
package main
func main() {}
+-- embed/go.mod --
+module example.com/embed
+-- embed/embed.go --
+package embed
+
+import _ "embed"
+
+//go:embed non-existing-file.txt
+var s string
+-- embed/embed_test.go --
+package embed
+
+import _ "embed"
+
+//go:embed non-existing-file.txt
+var s string
+-- embed/embed_xtest_test.go --
+package embed_test
+
+import _ "embed"
+
+//go:embed non-existing-file.txt
+var s string