# 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 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