diff options
author | Bryan C. Mills <bcmills@google.com> | 2021-04-09 00:39:25 -0400 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2021-04-09 18:49:05 +0000 |
commit | c3faff7f2d62a81d612ed46204c2e6bd5f460f01 (patch) | |
tree | eba8166108670fee0a77dae58b46092a19b8d301 /src/cmd/go/internal/modload/edit.go | |
parent | 814c5ff13810e800aeb67fd0371e21984d4d2c64 (diff) | |
download | go-c3faff7f2d62a81d612ed46204c2e6bd5f460f01.tar.gz go-c3faff7f2d62a81d612ed46204c2e6bd5f460f01.zip |
cmd/go/internal/modload: change mvsReqs to store roots instead of a full build list
The mvsReqs implementation has always been a bit ambivalent about
whether the root requirements return the full build list, just the
direct requirements, or some hybrid of the two.
However, a full build list always requires the Target module as the
first entry, and it's easer to remove a redundant leading element from
a slice than to add one. Changing the mvsReqs field to contain
arbitrary roots instead of a full build list eliminates the need to
add redundant elements, at the cost of needing to remove redundant
elements in more places.
For #36460
Change-Id: Idd4c2d6bc7b66f67680037dab1fb9c2d1b40ab93
Reviewed-on: https://go-review.googlesource.com/c/go/+/308811
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/cmd/go/internal/modload/edit.go')
-rw-r--r-- | src/cmd/go/internal/modload/edit.go | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/cmd/go/internal/modload/edit.go b/src/cmd/go/internal/modload/edit.go index 0d7811a3cd..858fec5dd5 100644 --- a/src/cmd/go/internal/modload/edit.go +++ b/src/cmd/go/internal/modload/edit.go @@ -49,7 +49,7 @@ func editBuildList(ctx context.Context, initial, tryUpgrade, mustSelect []module // percieves as “downgrades” will not also result in upgrades. max := make(map[string]string) maxes, err := mvs.Upgrade(Target, &mvsReqs{ - buildList: append(capVersionSlice(initial), mustSelect...), + roots: append(capVersionSlice(initial[1:]), mustSelect...), }, tryUpgrade...) if err != nil { return nil, err @@ -108,12 +108,12 @@ func editBuildList(ctx context.Context, initial, tryUpgrade, mustSelect []module // another. The lower version may require extraneous dependencies that aren't // actually relevant, so we need to compute the actual selected versions. adjusted := make([]module.Version, 0, len(maxes)) - for _, m := range maxes { + for _, m := range maxes[1:] { if v, ok := limiter.selected[m.Path]; ok { adjusted = append(adjusted, module.Version{Path: m.Path, Version: v}) } } - consistent, err := mvs.BuildList(Target, &mvsReqs{buildList: adjusted}) + consistent, err := mvs.BuildList(Target, &mvsReqs{roots: adjusted}) if err != nil { return nil, err } @@ -122,7 +122,7 @@ func editBuildList(ctx context.Context, initial, tryUpgrade, mustSelect []module // the actually-selected versions in order to eliminate extraneous // dependencies from lower-than-selected ones. compacted := consistent[:0] - for _, m := range consistent { + for _, m := range consistent[1:] { if _, ok := limiter.selected[m.Path]; ok { // The fact that the limiter has a version for m.Path indicates that we // care about retaining that path, even if the version was upgraded for @@ -131,7 +131,7 @@ func editBuildList(ctx context.Context, initial, tryUpgrade, mustSelect []module } } - return mvs.BuildList(Target, &mvsReqs{buildList: compacted}) + return mvs.BuildList(Target, &mvsReqs{roots: compacted}) } // A versionLimiter tracks the versions that may be selected for each module |