Skip to content

Commit

Permalink
cmd/go/internal/modload: remove the Reqs function
Browse files Browse the repository at this point in the history
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 golang#40775) and readily available
(problematic for golang#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 golang#36460
For golang#40775

Change-Id: I8674442f2a86416b0bf9c3395cb591c1e724c9d2
Reviewed-on: https://go-review.googlesource.com/c/go/+/272129
Trust: Bryan C. Mills <[email protected]>
Run-TryBot: Bryan C. Mills <[email protected]>
TryBot-Result: Go Bot <[email protected]>
Reviewed-by: Jay Conrod <[email protected]>
  • Loading branch information
Bryan C. Mills committed Nov 21, 2020
1 parent 3f5a975 commit f93ef07
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 20 deletions.
4 changes: 2 additions & 2 deletions src/cmd/go/internal/modload/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions src/cmd/go/internal/modload/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
11 changes: 0 additions & 11 deletions src/cmd/go/internal/modload/mvs.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"sort"

"cmd/go/internal/modfetch"
"cmd/go/internal/mvs"

"golang.org/x/mod/module"
"golang.org/x/mod/semver"
Expand All @@ -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
Expand Down
8 changes: 3 additions & 5 deletions src/cmd/go/internal/modload/mvs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"},
Expand All @@ -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)
}
}
}

0 comments on commit f93ef07

Please sign in to comment.