// remove roots.)
}
- min, err := mvs.Req(Target, rootPaths, &mvsReqs{buildList: final})
+ min, err := mvs.Req(Target, rootPaths, &mvsReqs{roots: final[1:]})
if err != nil {
return nil, false, err
}
// dependencies, then we can't reliably compute a minimal subset of them.
return rs, err
}
- keep = mg.BuildList()
+ keep = mg.BuildList()[1:]
for _, root := range rs.rootModules {
// If the selected version of the root is the same as what was already
}
}
} else {
- keep = append(keep, Target)
kept := map[module.Version]bool{Target: true}
for _, pkg := range pkgs {
if pkg.mod.Path != "" && !kept[pkg.mod] {
return rs, nil
}
- min, err := mvs.Req(Target, rootPaths, &mvsReqs{buildList: keep})
+ min, err := mvs.Req(Target, rootPaths, &mvsReqs{roots: keep})
if err != nil {
return rs, err
}
// 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
// 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
}
// 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
}
}
- 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
// mvsReqs implements mvs.Reqs for module semantic versions,
// with any exclusions or replacements applied internally.
type mvsReqs struct {
- buildList []module.Version
+ roots []module.Version
}
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
// global build list.
- return r.buildList[1:], nil
+ return r.roots, nil
}
if mod.Version == "none" {