| # This test illustrates a case where downgrading one module may upgrade another. |
| # Compare to the downcross2 test case in cmd/go/internal/mvs/mvs_test.go. |
| |
| # The initial package import graph used in this test looks like: |
| # |
| # a ---- b ---- d |
| # |
| # The module dependency graph originally looks like: |
| # |
| # a ---- b.2 ---- d.2 |
| # |
| # b.1 ---- c.1 |
| # |
| # If we downgrade module d to version 1, we must downgrade b as well. |
| # If that downgrade selects b version 1, we will add a new dependency on module c. |
| |
| cp go.mod go.mod.orig |
| go mod tidy |
| cmp go.mod.orig go.mod |
| |
| go get -d example.com/d@v0.1.0 |
| go list -m all |
| stdout '^example.com/b v0.1.0 ' |
| stdout '^example.com/c v0.1.0 ' |
| stdout '^example.com/d v0.1.0 ' |
| |
| -- go.mod -- |
| module example.com/a |
| |
| go 1.15 |
| |
| require example.com/b v0.2.0 |
| |
| replace ( |
| example.com/b v0.1.0 => ./b1 |
| example.com/b v0.2.0 => ./b2 |
| example.com/c v0.1.0 => ./c |
| example.com/d v0.1.0 => ./d |
| example.com/d v0.2.0 => ./d |
| ) |
| -- a.go -- |
| package a |
| |
| import _ "example.com/b" |
| |
| -- b1/go.mod -- |
| module example.com/b |
| |
| go 1.15 |
| |
| require example.com/c v0.1.0 |
| -- b1/b.go -- |
| package b |
| |
| import _ "example.com/c" |
| |
| -- b2/go.mod -- |
| module example.com/b |
| |
| go 1.15 |
| |
| require example.com/d v0.2.0 |
| -- b2/b.go -- |
| package b |
| |
| import _ "example.com/d" |
| |
| -- c/go.mod -- |
| module example.com/c |
| |
| go 1.15 |
| |
| -- c/c.go -- |
| package c |
| |
| -- d/go.mod -- |
| module example.com/d |
| |
| go 1.15 |
| -- d/d.go -- |
| package d |