mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/go: error out of 'go mod tidy' if the go version is newer than supported
Fixes #46142 Change-Id: Ib7a0a159e53cbe476be6aa9a050add10cc750dec Reviewed-on: https://go-review.googlesource.com/c/go/+/319669 Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
parent
02699f810a
commit
ce92a2023c
2 changed files with 64 additions and 1 deletions
|
|
@ -922,7 +922,8 @@ func loadFromRoots(ctx context.Context, params loaderParams) *loader {
|
||||||
}
|
}
|
||||||
|
|
||||||
if params.GoVersion != "" {
|
if params.GoVersion != "" {
|
||||||
if semver.Compare("v"+params.GoVersion, narrowAllVersionV) < 0 && !ld.UseVendorAll {
|
goVersionV := "v" + params.GoVersion
|
||||||
|
if semver.Compare(goVersionV, narrowAllVersionV) < 0 && !ld.UseVendorAll {
|
||||||
// The module's go version explicitly predates the change in "all" for lazy
|
// The module's go version explicitly predates the change in "all" for lazy
|
||||||
// loading, so continue to use the older interpretation.
|
// loading, so continue to use the older interpretation.
|
||||||
// (If params.GoVersion is empty, we are probably not in any module at all
|
// (If params.GoVersion is empty, we are probably not in any module at all
|
||||||
|
|
@ -930,6 +931,11 @@ func loadFromRoots(ctx context.Context, params loaderParams) *loader {
|
||||||
ld.allClosesOverTests = true
|
ld.allClosesOverTests = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ld.Tidy && semver.Compare(goVersionV, "v"+latestGoVersion()) > 0 {
|
||||||
|
ld.errorf("go mod tidy: go.mod file indicates go %s, but maximum supported version is %s\n", params.GoVersion, latestGoVersion())
|
||||||
|
base.ExitIfErrors()
|
||||||
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
ld.requirements, err = convertDepth(ctx, ld.requirements, modDepthFromGoVersion(params.GoVersion))
|
ld.requirements, err = convertDepth(ctx, ld.requirements, modDepthFromGoVersion(params.GoVersion))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
57
src/cmd/go/testdata/script/mod_tidy_too_new.txt
vendored
Normal file
57
src/cmd/go/testdata/script/mod_tidy_too_new.txt
vendored
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
# https://golang.org/issue/46142: 'go mod tidy' should error out if the version
|
||||||
|
# in the go.mod file is newer than the most recent supported version.
|
||||||
|
|
||||||
|
cp go.mod go.mod.orig
|
||||||
|
|
||||||
|
|
||||||
|
# If the go.mod file specifies an unsupported Go version, 'go mod tidy' should
|
||||||
|
# refuse to edit it: we don't know what a tidy go.mod file for that version
|
||||||
|
# would look like.
|
||||||
|
|
||||||
|
! go mod tidy
|
||||||
|
stderr 'go mod tidy: go.mod file indicates go 2000.0, but maximum supported version is '$goversion'$'
|
||||||
|
cmp go.mod go.mod.orig
|
||||||
|
|
||||||
|
|
||||||
|
# The -e flag should push past the error and edit the file anyway,
|
||||||
|
# but preserve the too-high version.
|
||||||
|
|
||||||
|
cp go.mod.orig go.mod
|
||||||
|
go mod tidy -e
|
||||||
|
stderr 'go mod tidy: go.mod file indicates go 2000.0, but maximum supported version is '$goversion'$'
|
||||||
|
cmp go.mod go.mod.tidy
|
||||||
|
|
||||||
|
|
||||||
|
# Explicitly switching to a supported version should suppress the error completely.
|
||||||
|
|
||||||
|
cp go.mod.orig go.mod
|
||||||
|
go mod tidy -go=1.17
|
||||||
|
! stderr 'maximum supported version'
|
||||||
|
go mod edit -go=1.17 go.mod.tidy
|
||||||
|
cmp go.mod go.mod.tidy
|
||||||
|
|
||||||
|
|
||||||
|
-- go.mod --
|
||||||
|
module example.net/from/the/future
|
||||||
|
|
||||||
|
go 2000.0
|
||||||
|
|
||||||
|
replace example.net/m v0.0.0 => ./m
|
||||||
|
-- go.mod.tidy --
|
||||||
|
module example.net/from/the/future
|
||||||
|
|
||||||
|
go 2000.0
|
||||||
|
|
||||||
|
replace example.net/m v0.0.0 => ./m
|
||||||
|
|
||||||
|
require example.net/m v0.0.0
|
||||||
|
-- x.go --
|
||||||
|
package x
|
||||||
|
|
||||||
|
import "example.net/m"
|
||||||
|
-- m/go.mod --
|
||||||
|
module example.net/m
|
||||||
|
|
||||||
|
go 1.17
|
||||||
|
-- m/m.go --
|
||||||
|
package m
|
||||||
Loading…
Add table
Add a link
Reference in a new issue