]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: skip vet when package cannot be build under "go test/vet"
authorYury Smolsky <yury@smolsky.by>
Sun, 15 Jul 2018 15:34:55 +0000 (18:34 +0300)
committerIan Lance Taylor <iant@golang.org>
Thu, 19 Jul 2018 19:16:35 +0000 (19:16 +0000)
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 <yury@smolsky.by>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/go/go_test.go
src/cmd/go/internal/work/exec.go

index 6df70a238de60be1dc4b972a04534e4d4b68c184..983698cbc11fd9cfdd5367254bbed4981c6628d3 100644 (file)
@@ -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()
index e00b528522ea63f05af6fe378e83842902fbe0ea..5d3d2ef77fc21bde7ebfbe31996a9f43aeb89a1b 100644 (file)
@@ -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