1
0
mirror of https://github.com/golang/go synced 2024-11-11 21:50:21 -07:00

cmd/go/internal/modload: remove the Reqs function

The Reqs function returns an mvs.Reqs implemention for the global
build list. The API that it presents assumes that the build list is
globally consistent (problematic for #40775) and readily available
(problematic for #36460).

Fortunately, it is no longer used outside of the modload package.
We can instead use individual instances of the unexported mvsReqs
struct, making the dependency on the global build list more explicit.

For #36460
For #40775

Change-Id: I8674442f2a86416b0bf9c3395cb591c1e724c9d2
Reviewed-on: https://go-review.googlesource.com/c/go/+/272129
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:
Bryan C. Mills 2020-11-20 17:03:42 -05:00
parent 3f5a97514b
commit f93ef07b11
4 changed files with 7 additions and 20 deletions

View File

@ -853,7 +853,7 @@ func MinReqs() mvs.Reqs {
retain = append(retain, m.Path)
}
}
min, err := mvs.Req(Target, retain, Reqs())
min, err := mvs.Req(Target, retain, &mvsReqs{buildList: buildList})
if err != nil {
base.Fatalf("go: %v", err)
}
@ -985,7 +985,7 @@ func keepSums(addDirect bool) map[module.Version]bool {
keep := make(map[module.Version]bool)
var mu sync.Mutex
reqs := &keepSumReqs{
Reqs: Reqs(),
Reqs: &mvsReqs{buildList: buildList},
visit: func(m module.Version) {
// If we build using a replacement module, keep the sum for the replacement,
// since that's the code we'll actually use during a build.

View File

@ -800,7 +800,7 @@ func loadFromRoots(params loaderParams) *loader {
}
var err error
reqs := Reqs()
reqs := &mvsReqs{buildList: buildList}
buildList, err = mvs.BuildList(Target, reqs)
if err != nil {
base.Fatalf("go: %v", err)
@ -842,7 +842,7 @@ func loadFromRoots(params loaderParams) *loader {
}
// Recompute buildList with all our additions.
reqs = Reqs()
reqs = &mvsReqs{buildList: buildList}
buildList, err = mvs.BuildList(Target, reqs)
if err != nil {
// If an error was found in a newly added module, report the package

View File

@ -11,7 +11,6 @@ import (
"sort"
"cmd/go/internal/modfetch"
"cmd/go/internal/mvs"
"golang.org/x/mod/module"
"golang.org/x/mod/semver"
@ -23,16 +22,6 @@ type mvsReqs struct {
buildList []module.Version
}
// Reqs returns the current module requirement graph.
// Future calls to EditBuildList do not affect the operation
// of the returned Reqs.
func Reqs() mvs.Reqs {
r := &mvsReqs{
buildList: buildList,
}
return r
}
func (r *mvsReqs) Required(mod module.Version) ([]module.Version, error) {
if mod == Target {
// Use the build list as it existed when r was constructed, not the current

View File

@ -2,19 +2,17 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package modload_test
package modload
import (
"testing"
"cmd/go/internal/modload"
)
func TestReqsMax(t *testing.T) {
type testCase struct {
a, b, want string
}
reqs := modload.Reqs()
reqs := new(mvsReqs)
for _, tc := range []testCase{
{a: "v0.1.0", b: "v0.2.0", want: "v0.2.0"},
{a: "v0.2.0", b: "v0.1.0", want: "v0.2.0"},
@ -27,7 +25,7 @@ func TestReqsMax(t *testing.T) {
} {
max := reqs.Max(tc.a, tc.b)
if max != tc.want {
t.Errorf("Reqs().Max(%q, %q) = %q; want %q", tc.a, tc.b, max, tc.want)
t.Errorf("(%T).Max(%q, %q) = %q; want %q", reqs, tc.a, tc.b, max, tc.want)
}
}
}