From: Yury Smolsky Date: Sun, 15 Jul 2018 15:34:55 +0000 (+0300) Subject: cmd/go: skip vet when package cannot be build under "go test/vet" X-Git-Tag: go1.11beta2~5 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ad705baafd52089cad35791755e4b80212727a82;p=gostls13.git cmd/go: skip vet when package cannot be build under "go test/vet" If the the package cannot be built, "go test" and "go vet" should not run the "vet" tool. In that case only errors from the compilers will be displayed. Fixes #26125 Change-Id: I5da6ba64bae5f44feaf5bd4e765eea85533cddd4 Reviewed-on: https://go-review.googlesource.com/123938 Run-TryBot: Yury Smolsky TryBot-Result: Gobot Gobot Reviewed-by: Bryan C. Mills Reviewed-by: Ian Lance Taylor --- diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 6df70a238d..983698cbc1 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -5526,6 +5526,21 @@ func TestTestVet(t *testing.T) { tg.grepStderrNot(`invalid.*constraint`, "did diagnose bad build constraint in vetxonly mode") } +func TestTestSkipVetAfterFailedBuild(t *testing.T) { + tg := testgo(t) + defer tg.cleanup() + tg.parallel() + + tg.tempFile("x_test.go", `package x + func f() { + return 1 + } + `) + + tg.runFail("test", tg.path("x_test.go")) + tg.grepStderrNot(`vet`, "vet should be skipped after the failed build") +} + func TestTestVetRebuild(t *testing.T) { tg := testgo(t) defer tg.cleanup() diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go index e00b528522..5d3d2ef77f 100644 --- a/src/cmd/go/internal/work/exec.go +++ b/src/cmd/go/internal/work/exec.go @@ -915,13 +915,17 @@ func (b *Builder) vet(a *Action) error { a.Failed = false // vet of dependency may have failed but we can still succeed + if a.Deps[0].Failed { + // The build of the package has failed. Skip vet check. + // Vet could return export data for non-typecheck errors, + // but we ignore it because the package cannot be compiled. + return nil + } + vcfg := a.Deps[0].vetCfg if vcfg == nil { // Vet config should only be missing if the build failed. - if !a.Deps[0].Failed { - return fmt.Errorf("vet config not found") - } - return nil + return fmt.Errorf("vet config not found") } vcfg.VetxOnly = a.VetxOnly