| # This test illustrates a case where downgrading one module may upgrade another. |
| # Compare to the downcross1 test case in cmd/go/internal/mvs/mvs_test.go. |
| |
| # The package import graph used in this test looks like: |
| # |
| # a ---- b |
| # \ \ |
| # \ \ |
| # ----- c ---- d |
| # |
| # The module dependency graph originally looks like: |
| # |
| # a ---- b.2 |
| # \ \ |
| # \ \ |
| # ----- c.1 ---- d.2 |
| # |
| # b.1 ---- c.2 |
| # |
| # If we downgrade module d to version 1, we must downgrade b as well. |
| # If that downgrade selects b version 1, we will upgrade module c to version 2. |
| # So 'go get d@1' should instead downgrade both b and c to "none". |
| |
| 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 ' |
| ! stdout '^example.com/c ' |
| stdout '^example.com/d v0.1.0 ' |
| |
| -- go.mod -- |
| module example.com/a |
| |
| go 1.15 |
| |
| require ( |
| example.com/b v0.2.0 |
| example.com/c v0.1.0 |
| ) |
| |
| replace ( |
| example.com/b v0.1.0 => ./b1 |
| example.com/b v0.2.0 => ./b2 |
| example.com/c v0.1.0 => ./c1 |
| example.com/c v0.2.0 => ./c2 |
| example.com/d v0.1.0 => ./d |
| example.com/d v0.2.0 => ./d |
| ) |
| -- a.go -- |
| package a |
| |
| import ( |
| _ "example.com/b" |
| _ "example.com/c" |
| ) |
| |
| -- b1/go.mod -- |
| module example.com/b |
| |
| go 1.15 |
| |
| require example.com/c v0.2.0 |
| -- b1/b.go -- |
| package b |
| |
| import _ "example.com/c" |
| |
| -- b2/go.mod -- |
| module example.com/b |
| |
| go 1.15 |
| |
| require example.com/c v0.1.0 |
| -- b2/b.go -- |
| package b |
| |
| import _ "example.com/c" |
| |
| -- c1/go.mod -- |
| module example.com/c |
| |
| go 1.15 |
| |
| require example.com/d v0.2.0 |
| -- c1/c.go -- |
| package c |
| |
| -- c2/go.mod -- |
| module example.com/c |
| |
| go 1.15 |
| -- c2/c.go -- |
| package c |
| |
| -- d/go.mod -- |
| module example.com/d |
| |
| go 1.15 |