cmd/go: fix "go test -n -cover" glitch with no-test packages

Invoking "go test -n -cover ./..." on a collection of packages that
includes at least one package with code but no tests can result in
spurious error of the form

  my/package: open $WORK/b112/covmeta.b07a5f2dff1231cae3a6bdd70c8cc7c19da16abf8ac59747d8e9859c03594d37: no such file or directory

This patch fixes this issue by ensuring that we stub out some of the
meta-data file handling for no-test packages if "-n" is in effect.

Fixes #67952.

Change-Id: Ic6160c275abdec5e5b8beecc6a59accb2b8cfe7d
Reviewed-on: https://go-review.googlesource.com/c/go/+/592201
Reviewed-by: Michael Matloob <matloob@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Than McIntosh 2024-06-12 19:58:36 +00:00
parent adc5b559db
commit d06c9b4ea1
2 changed files with 23 additions and 0 deletions

View File

@ -44,6 +44,9 @@ func BuildActionCoverMetaFile(runAct *Action) (string, error) {
} }
if pred.Package.ImportPath == p.ImportPath { if pred.Package.ImportPath == p.ImportPath {
metaFile := pred.Objdir + covcmd.MetaFileForPackage(p.ImportPath) metaFile := pred.Objdir + covcmd.MetaFileForPackage(p.ImportPath)
if cfg.BuildN {
return metaFile, nil
}
f, err := os.Open(metaFile) f, err := os.Open(metaFile)
if err != nil { if err != nil {
return "", err return "", err

View File

@ -0,0 +1,20 @@
# Adding -cover to "go test -n" should not cause failures,
# see issue 67952. In the regular (no "-n") case for an
# empty package test action for the package will look for
# a static meta-data file produced by the cover tool
# during the build action; when "-n" is in effect that
# meta-data file doesn't exist, so the code that reads
# the meta-data file has to be stubbed out.
go test -vet=off -n -cover ./f
-- go.mod --
module M
go 1.21
-- f/f.go --
package f
func Id() int {
return 42
}