@@ -108,19 +108,21 @@ func buildList(target module.Version, reqs Reqs, upgrade func(module.Version) (m
108
108
node := & modGraphNode {m : m }
109
109
mu .Lock ()
110
110
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
+ }
113
115
}
114
116
mu .Unlock ()
115
117
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 {
124
126
work .Add (r )
125
127
}
126
128
}
@@ -333,12 +335,31 @@ func Upgrade(target module.Version, reqs Reqs, upgrade ...module.Version) ([]mod
333
335
if err != nil {
334
336
return nil , err
335
337
}
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
+ }
339
343
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
+ })
342
363
}
343
364
344
365
// Downgrade returns a build list for the target module
0 commit comments