From: Russ Cox Date: Sun, 5 Nov 2017 21:25:00 +0000 (-0500) Subject: cmd/go: do not use cache when -a is specified X-Git-Tag: go1.10beta1~378 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=eca28cc4f3ae13bfb5817419e801c8a61929bc2a;p=gostls13.git cmd/go: do not use cache when -a is specified Clearly -a means don't use the cache. An oversight that it did. Fixes #22586. Change-Id: I250b351439bd3fb5f8d6efc235b614f0a75ca64c Reviewed-on: https://go-review.googlesource.com/76016 Run-TryBot: Russ Cox Reviewed-by: David Crawshaw --- diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 6c87ce83f8..a264daa710 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -4728,6 +4728,9 @@ func TestBuildCache(t *testing.T) { tg.run("build", "-x", "complex/w") tg.grepStderrNot(`[\\/]compile|gccgo`, "ran compiler incorrectly") + tg.run("build", "-a", "-x", "complex/w") + tg.grepStderr(`[\\/]compile|gccgo`, "did not run compiler with -a") + // complex is a non-trivial main package. // the link step should not be cached. tg.run("build", "-o", os.DevNull, "-x", "complex") diff --git a/src/cmd/go/internal/work/buildid.go b/src/cmd/go/internal/work/buildid.go index 35ef1df885..b9e1bab0a3 100644 --- a/src/cmd/go/internal/work/buildid.go +++ b/src/cmd/go/internal/work/buildid.go @@ -355,17 +355,19 @@ func (b *Builder) useCache(a *Action, p *load.Package, actionHash cache.ActionID // We treat hits in this cache as being "stale" for the purposes of go list // (in effect, "stale" means whether p.Target is up-to-date), // but we're still happy to use results from the build artifact cache. - if c := cache.Default(); c != nil { - outputID, size, err := c.Get(actionHash) - if err == nil { - file := c.OutputFile(outputID) - info, err1 := os.Stat(file) - buildID, err2 := buildid.ReadFile(file) - if err1 == nil && err2 == nil && info.Size() == size { - a.built = file - a.Target = "DO NOT USE - using cache" - a.buildID = buildID - return true + if !cfg.BuildA { + if c := cache.Default(); c != nil { + outputID, size, err := c.Get(actionHash) + if err == nil { + file := c.OutputFile(outputID) + info, err1 := os.Stat(file) + buildID, err2 := buildid.ReadFile(file) + if err1 == nil && err2 == nil && info.Size() == size { + a.built = file + a.Target = "DO NOT USE - using cache" + a.buildID = buildID + return true + } } } }