golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
123.9k stars 17.65k forks source link

cmd/go: 'go list -m' should not require go.sum with -versions or when all args are version queries #41297

Open jayconrod opened 4 years ago

jayconrod commented 4 years ago

What version of Go are you using (go version)?

$ go version
go version go1.15.1 darwin/amd64

Does this issue reproduce with the latest release?

yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/jayconrod/Library/Caches/go-build"
GOENV="/Users/jayconrod/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/jayconrod/Code/modcache"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/jayconrod/go"
GOPRIVATE=""
GOPROXY="http://[::]:6123/mod"
GOROOT="/opt/go/installed"
GOSUMDB="off"
GOTMPDIR=""
GOTOOLDIR="/opt/go/installed/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/jayconrod/Code/test/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/rq/x0692kqj6ml8cvrhcqh5bswc008xj1/T/go-build106221923=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

go mod init m
go mod edit -require=rsc.io/quote@v1.0.0
go list -m -mod=readonly -versions rsc.io/quote
go list -m -mod=readonly rsc.io/quote@latest

What did you expect to see?

Both the go list -m commands above should succeed.

What did you see instead?

Both commands fail. This happens because go list -m loads the build list before processing arguments. go.sum is missing, so that fails.

There's no need to load the build list for these commands. They both succeed when run outside a module or when go.mod contains no requirements.

sibis commented 4 years ago

@jayconrod, Is this an up for grabs then? Because I'd like to try this one.

jayconrod commented 4 years ago

@sibis Sure, feel free to take a look. I think it can mostly be done in src/cmd/go/internal/list/list.go.

bcmills commented 3 years ago

@version turns out to be pretty easy, and I'm going to knock that out incidentally for #36460.

I think -versions will require part of the implementation for #29666, though: at the moment, we don't distinguish between -m -json -versions (which should also include information about the current version) and just -m -versions (which, without a -f template, does not need that information).

gopherbot commented 3 years ago

Change https://golang.org/cl/309191 mentions this issue: cmd/go/internal/modload: avoid loading the full module graph when listing specific modules

gopherbot commented 3 years ago

Change https://golang.org/cl/265777 mentions this issue: cmd/go/internal/modload: implement lazy loading