1
0
mirror of https://github.com/golang/go synced 2024-11-23 20:30:04 -07:00

cmd/go/internal/modload: don't initialize build cache

modload.Init initialized the build cache with the intent of providing
a better error message in Go 1.12, when the build cache became
mandatory (in module mode, packages aren't installed outside the build
cache). Unfortunately, this didn't provide a more descriptive error
(the cache calls base.Fatalf with its own message), and it caused
errors for commands that don't use the cache (like 'go mod edit').

This CL removes the cache initialization from modload.Init. The
builder will initialize it when it's needed.

For #39882

Change-Id: Ibc01ae4e59358dcd08a07ffc97bf556514d0366f
Reviewed-on: https://go-review.googlesource.com/c/go/+/240548
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
Jay Conrod 2020-06-30 13:48:15 -04:00
parent 8766f96dd7
commit 02a7b4b4a7
2 changed files with 46 additions and 7 deletions

View File

@ -20,7 +20,6 @@ import (
"strings"
"cmd/go/internal/base"
"cmd/go/internal/cache"
"cmd/go/internal/cfg"
"cmd/go/internal/load"
"cmd/go/internal/lockedfile"
@ -162,12 +161,6 @@ func Init() {
// We're in module mode. Install the hooks to make it work.
if c := cache.Default(); c == nil {
// With modules, there are no install locations for packages
// other than the build cache.
base.Fatalf("go: cannot use modules with build cache disabled")
}
list := filepath.SplitList(cfg.BuildContext.GOPATH)
if len(list) == 0 || list[0] == "" {
base.Fatalf("missing $GOPATH")

View File

@ -0,0 +1,46 @@
# The build cache is required to build anything. It also may be needed to
# initialize the build system, which is needed for commands like 'go env'.
# However, there are lots of commands the cache is not needed for, and we
# shouldn't require it when it won't be used.
#
# TODO(golang.org/issue/39882): commands below should work, too.
# * go clean -modcache
# * go env
# * go fix
# * go fmt
# * go generate
# * go get -d
# * go list (without -export or -compiled)
env GOCACHE=off
# Commands that don't completely load packages should work.
go doc fmt
stdout Printf
go fmt .
! go tool compile -h
stderr usage:
go version
stdout '^go version'
# Module commands that don't load packages should work.
go mod init m
exists go.mod
go mod edit -require rsc.io/quote@v1.5.2
go mod download rsc.io/quote
go mod graph
stdout rsc.io/quote
go mod verify
-- main.go --
package main
func main() {}