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>
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()
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