Skip to content

Commit a19a4dc

Browse files
author
Bryan C. Mills
committed
cmd/go/internal/mvs: in Upgrade, pass upgrades to buildList as upgrades
This has no impact on the resulting build list, but provides clearer diagnostics if reqs.Required returns an error for one of the upgraded modules. For #37438 Change-Id: I5cd8f72a9b7b9a0b185e1a728f46fefbd2f09b4a Reviewed-on: https://go-review.googlesource.com/c/go/+/266897 Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org>
1 parent 4a33392 commit a19a4dc

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
lines changed

src/cmd/go/internal/mvs/mvs.go

+36-15
Original file line numberDiff line numberDiff line change
@@ -108,19 +108,21 @@ func buildList(target module.Version, reqs Reqs, upgrade func(module.Version) (m
108108
node := &modGraphNode{m: m}
109109
mu.Lock()
110110
modGraph[m] = node
111-
if v, ok := min[m.Path]; !ok || reqs.Max(v, m.Version) != v {
112-
min[m.Path] = m.Version
111+
if m.Version != "none" {
112+
if v, ok := min[m.Path]; !ok || reqs.Max(v, m.Version) != v {
113+
min[m.Path] = m.Version
114+
}
113115
}
114116
mu.Unlock()
115117

116-
required, err := reqs.Required(m)
117-
if err != nil {
118-
setErr(node, err)
119-
return
120-
}
121-
node.required = required
122-
for _, r := range node.required {
123-
if r.Version != "none" {
118+
if m.Version != "none" {
119+
required, err := reqs.Required(m)
120+
if err != nil {
121+
setErr(node, err)
122+
return
123+
}
124+
node.required = required
125+
for _, r := range node.required {
124126
work.Add(r)
125127
}
126128
}
@@ -333,12 +335,31 @@ func Upgrade(target module.Version, reqs Reqs, upgrade ...module.Version) ([]mod
333335
if err != nil {
334336
return nil, err
335337
}
336-
// TODO: Maybe if an error is given,
337-
// rerun with BuildList(upgrade[0], reqs) etc
338-
// to find which ones are the buggy ones.
338+
339+
pathInList := make(map[string]bool, len(list))
340+
for _, m := range list {
341+
pathInList[m.Path] = true
342+
}
339343
list = append([]module.Version(nil), list...)
340-
list = append(list, upgrade...)
341-
return BuildList(target, &override{target, list, reqs})
344+
345+
upgradeTo := make(map[string]string, len(upgrade))
346+
for _, u := range upgrade {
347+
if !pathInList[u.Path] {
348+
list = append(list, module.Version{Path: u.Path, Version: "none"})
349+
}
350+
if prev, dup := upgradeTo[u.Path]; dup {
351+
upgradeTo[u.Path] = reqs.Max(prev, u.Version)
352+
} else {
353+
upgradeTo[u.Path] = u.Version
354+
}
355+
}
356+
357+
return buildList(target, &override{target, list, reqs}, func(m module.Version) (module.Version, error) {
358+
if v, ok := upgradeTo[m.Path]; ok {
359+
return module.Version{Path: m.Path, Version: v}, nil
360+
}
361+
return m, nil
362+
})
342363
}
343364

344365
// Downgrade returns a build list for the target module

src/cmd/go/internal/mvs/mvs_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -491,9 +491,9 @@ func (r reqsMap) Max(v1, v2 string) string {
491491
}
492492

493493
func (r reqsMap) Upgrade(m module.Version) (module.Version, error) {
494-
var u module.Version
494+
u := module.Version{Version: "none"}
495495
for k := range r {
496-
if k.Path == m.Path && u.Version < k.Version && !strings.HasSuffix(k.Version, ".hidden") {
496+
if k.Path == m.Path && r.Max(u.Version, k.Version) == k.Version && !strings.HasSuffix(k.Version, ".hidden") {
497497
u = k
498498
}
499499
}

0 commit comments

Comments
 (0)