From 2e0b97dde69cb66416844dba45c084bc13bd58fa Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Thu, 6 Oct 2022 16:14:47 -0400 Subject: [PATCH] cmd/go: set dependency go versions for go install --mod=readonly mod@vers When running go install --mod=readonly module@version. modfetch.GoSumFile was not set, so the checksumOk check that's done when checking whether we need to set the GoVersion from the go mod file was failing. Bypass the checksumOk check when there's no GoSumFile. For #54908 Change-Id: I56cf9d36a505b1223e6bf82a7d455746e2f09849 Reviewed-on: https://go-review.googlesource.com/c/go/+/439855 Reviewed-by: Bryan Mills Run-TryBot: Bryan Mills TryBot-Result: Gopher Robot Reviewed-by: Michael Matloob --- src/cmd/go/internal/modload/build.go | 2 +- src/cmd/go/internal/modload/import.go | 8 ++++++- ...example.com_depends_on_generics_v1.0.0.txt | 23 +++++++++++++++++++ .../mod/example.com_generics_v1.0.0.txt | 21 +++++++++++++++++ .../testdata/script/install_dep_version.txt | 6 +++++ 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/cmd/go/testdata/mod/example.com_depends_on_generics_v1.0.0.txt create mode 100644 src/cmd/go/testdata/mod/example.com_generics_v1.0.0.txt create mode 100644 src/cmd/go/testdata/script/install_dep_version.txt diff --git a/src/cmd/go/internal/modload/build.go b/src/cmd/go/internal/modload/build.go index 9381acf798..30b248e65a 100644 --- a/src/cmd/go/internal/modload/build.go +++ b/src/cmd/go/internal/modload/build.go @@ -319,7 +319,7 @@ func moduleInfo(ctx context.Context, rs *Requirements, m module.Version, mode Li } checksumOk := func(suffix string) bool { - return rs == nil || m.Version == "" || cfg.BuildMod == "mod" || + return rs == nil || m.Version == "" || !mustHaveSums() || modfetch.HaveSum(module.Version{Path: m.Path, Version: m.Version + suffix}) } diff --git a/src/cmd/go/internal/modload/import.go b/src/cmd/go/internal/modload/import.go index b314656b96..87b0656305 100644 --- a/src/cmd/go/internal/modload/import.go +++ b/src/cmd/go/internal/modload/import.go @@ -714,7 +714,7 @@ func fetch(ctx context.Context, mod module.Version) (dir string, isLocal bool, e mod = r } - if HasModRoot() && cfg.BuildMod == "readonly" && !inWorkspaceMode() && !modfetch.HaveSum(mod) { + if mustHaveSums() && !modfetch.HaveSum(mod) { return "", false, module.VersionError(mod, &sumMissingError{}) } @@ -722,6 +722,12 @@ func fetch(ctx context.Context, mod module.Version) (dir string, isLocal bool, e return dir, false, err } +// mustHaveSums reports whether we require that all checksums +// needed to load or build packages are already present in the go.sum file. +func mustHaveSums() bool { + return HasModRoot() && cfg.BuildMod == "readonly" && !inWorkspaceMode() +} + type sumMissingError struct { suggestion string } diff --git a/src/cmd/go/testdata/mod/example.com_depends_on_generics_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_depends_on_generics_v1.0.0.txt new file mode 100644 index 0000000000..80d309552e --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_depends_on_generics_v1.0.0.txt @@ -0,0 +1,23 @@ +example.com/depends/on/generics v1.0.0 +written by hand + +-- .mod -- +module example.com/depends/on/generics + +go 1.18 + +require example.com/generics v1.0.0 +-- .info -- +{"Version":"v1.0.0"} +-- go.mod -- +module example.com/depends/on/generics + +go 1.18 + +require example.com/generics v1.0.0 +-- main.go -- +package main + +import "example.com/generics" + +func main() {generics.Bar()} \ No newline at end of file diff --git a/src/cmd/go/testdata/mod/example.com_generics_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_generics_v1.0.0.txt new file mode 100644 index 0000000000..092241e93b --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_generics_v1.0.0.txt @@ -0,0 +1,21 @@ +example.com/generics v1.0.0 +written by hand + +-- .mod -- +module example.com/generics + +go 1.18 +-- .info -- +{"Version":"v1.0.0"} +-- go.mod -- +module example.com/generics + +go 1.18 +-- generics.go -- +package generics + +type Int interface { + ~int +} + +func Bar() {} \ No newline at end of file diff --git a/src/cmd/go/testdata/script/install_dep_version.txt b/src/cmd/go/testdata/script/install_dep_version.txt new file mode 100644 index 0000000000..22b52e541e --- /dev/null +++ b/src/cmd/go/testdata/script/install_dep_version.txt @@ -0,0 +1,6 @@ +# Regression test for Issue #54908. When running a go install module@version +# with --mod=readonly moduleInfo was not setting the GoVersion for the module +# because the checksumOk function was failing because modfetch.GoSumFile +# was not set when running outside of a module. + +go install --mod=readonly example.com/depends/on/generics@v1.0.0 \ No newline at end of file -- 2.50.0