From ca42f1f50e4cc26b896275673218d7376fab501d Mon Sep 17 00:00:00 2001 From: Dmitriy Dudkin Date: Thu, 25 Feb 2016 21:48:57 +0200 Subject: [PATCH] cmd/go: clear cmd cache to avoid duplicate loads errors 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 --- src/cmd/go/get.go | 8 ++++++++ src/cmd/go/go_test.go | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/cmd/go/get.go b/src/cmd/go/get.go index a298049a9d..9d4b94acf1 100644 --- a/src/cmd/go/get.go +++ b/src/cmd/go/get.go @@ -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) diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 1d6184c337..928224cee6 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -2789,3 +2789,15 @@ func TestCgoConsistentResults(t *testing.T) { t.Error("building cgotest twice did not produce the same output") } } + +// 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") +} -- 2.48.1