]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: clear cmd cache to avoid duplicate loads errors
authorDmitriy Dudkin <dudkin.dmitriy@gmail.com>
Thu, 25 Feb 2016 19:48:57 +0000 (21:48 +0200)
committerAndrew Gerrand <adg@golang.org>
Thu, 14 Apr 2016 05:35:15 +0000 (05:35 +0000)
go get -u all command updates all packages including standard
commands. We need to get commands evicted from their cache to
avoid loading old versions of the packages evicted from the
packages cache.

Fixes #14444

Change-Id: Icd581a26e1db34ca634aba595fed62b097094c2f
Reviewed-on: https://go-review.googlesource.com/19899
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-on: https://go-review.googlesource.com/22040
Reviewed-by: Andrew Gerrand <adg@golang.org>
src/cmd/go/get.go
src/cmd/go/go_test.go

index a298049a9d21de2b498a3f6fa801fae8e1b4bf38..9d4b94acf18f338b4c25517a130ea6ccca5f0c05 100644 (file)
@@ -119,6 +119,14 @@ func runGet(cmd *Command, args []string) {
                delete(packageCache, name)
        }
 
+       // In order to rebuild packages information completely,
+       // we need to clear commands cache. Command packages are
+       // referring to evicted packages from the package cache.
+       // This leads to duplicated loads of the standard packages.
+       for name := range cmdCache {
+               delete(cmdCache, name)
+       }
+
        args = importPaths(args)
        packagesForBuild(args)
 
index 39e0f3e56d58b25a6dc4365bf41650fb47e4a70d..acf4a39fad8602aa5dd6e42559c6895832f271da 100644 (file)
@@ -2759,3 +2759,15 @@ func TestParallelTest(t *testing.T) {
        tg.setenv("GOPATH", tg.path("."))
        tg.run("test", "-p=4", "p1", "p2", "p3", "p4")
 }
+
+// Issue 14444: go get -u .../ duplicate loads errors
+func TestGoGetUpdateAllDoesNotTryToLoadDuplicates(t *testing.T) {
+       testenv.MustHaveExternalNetwork(t)
+
+       tg := testgo(t)
+       defer tg.cleanup()
+       tg.makeTempdir()
+       tg.setenv("GOPATH", tg.path("."))
+       tg.run("get", "-u", ".../")
+       tg.grepStderrNot("duplicate loads of", "did not remove old packages from cache")
+}