| # If 'go get -u' finds an upgrade candidate that isn't viable, |
| # but some other upgraded module's requirement moves past it |
| # (for example, to a higher prerelease), then we should accept |
| # the transitive upgrade instead of trying lower roots. |
| |
| go get -v -u . example.net/b@v0.1.0 |
| cmp go.mod go.mod.want |
| |
| -- go.mod -- |
| module example |
| |
| go 1.17 |
| |
| require ( |
| example.net/a v0.1.0 |
| example.net/b v0.1.0 |
| example.net/c v0.1.0 |
| ) |
| |
| replace ( |
| example.net/a v0.1.0 => ./a1 |
| example.net/a v0.2.0-pre => ./a2p |
| example.net/b v0.1.0 => ./b |
| example.net/b v0.2.0 => ./b |
| example.net/c v0.1.0 => ./c1 |
| example.net/c v0.2.0 => ./c2 |
| ) |
| -- go.mod.want -- |
| module example |
| |
| go 1.17 |
| |
| require ( |
| example.net/a v0.2.0-pre |
| example.net/b v0.1.0 |
| example.net/c v0.2.0 |
| ) |
| |
| replace ( |
| example.net/a v0.1.0 => ./a1 |
| example.net/a v0.2.0-pre => ./a2p |
| example.net/b v0.1.0 => ./b |
| example.net/b v0.2.0 => ./b |
| example.net/c v0.1.0 => ./c1 |
| example.net/c v0.2.0 => ./c2 |
| ) |
| -- example.go -- |
| package example |
| |
| import ( |
| _ "example.net/a" |
| _ "example.net/b" |
| _ "example.net/c" |
| ) |
| -- a1/go.mod -- |
| module example.net/a |
| |
| go 1.17 |
| |
| require example.net/b v0.2.0 |
| -- a1/a.go -- |
| package a |
| |
| import _ "example.net/b" |
| -- a2p/go.mod -- |
| module example.net/a |
| |
| go 1.17 |
| -- a2p/a.go -- |
| package a |
| -- b/go.mod -- |
| module example.net/b |
| |
| go 1.17 |
| -- b/b.go -- |
| package b |
| -- c1/go.mod -- |
| module example.net/c |
| |
| go 1.17 |
| |
| require example.net/a v0.1.0 |
| -- c1/c.go -- |
| package c |
| |
| import _ "example.net/a" |
| -- c2/go.mod -- |
| module example.net/c |
| |
| go 1.17 |
| |
| require example.net/a v0.2.0-pre |
| -- c2/c.go -- |
| package c |
| |
| import _ "example.net/c" |