| # This test illustrates a case where an upgrade–downgrade–upgrade cycle could |
| # add extraneous dependencies due to another module depending on an |
| # otherwise-unlisted version (such as a pseudo-version). |
| # |
| # This case corresponds to the "downhiddenartifact" test in the mvs package. |
| |
| # The initial package import graph used in the test looks like: |
| # |
| # a --- b |
| # \ \ |
| # \ \ |
| # c --- d |
| # |
| # The module dependency graph initially looks like: |
| # |
| # a --- b.3 |
| # \ \ |
| # \ \ |
| # c.2 --- d.2 |
| # |
| # c.1 --- b.2 (pseudo) |
| # |
| # b.1 --- e.1 |
| |
| cp go.mod go.mod.orig |
| go mod tidy |
| cmp go.mod.orig go.mod |
| |
| # When we downgrade d.2 to d.1, no dependency on e should be added |
| # because nothing else in the module or import graph requires it. |
| go get example.net/d@v0.1.0 |
| |
| go list -m all |
| stdout '^example.net/b v0.2.1-0.20210219000000-000000000000 ' |
| stdout '^example.net/c v0.1.0 ' |
| stdout '^example.net/d v0.1.0 ' |
| ! stdout '^example.net/e ' |
| |
| -- go.mod -- |
| module example.net/a |
| |
| go 1.16 |
| |
| require ( |
| example.net/b v0.3.0 |
| example.net/c v0.2.0 |
| ) |
| |
| replace ( |
| example.net/b v0.1.0 => ./b1 |
| example.net/b v0.2.1-0.20210219000000-000000000000 => ./b2 |
| example.net/b v0.3.0 => ./b3 |
| example.net/c v0.1.0 => ./c1 |
| example.net/c v0.2.0 => ./c2 |
| example.net/d v0.1.0 => ./d |
| example.net/d v0.2.0 => ./d |
| example.net/e v0.1.0 => ./e |
| ) |
| -- a.go -- |
| package a |
| |
| import ( |
| _ "example.net/b" |
| _ "example.net/c" |
| ) |
| |
| -- b1/go.mod -- |
| module example.net/b |
| |
| go 1.16 |
| |
| require example.net/e v0.1.0 |
| -- b1/b.go -- |
| package b |
| |
| import _ "example.net/e" |
| |
| -- b2/go.mod -- |
| module example.net/b |
| |
| go 1.16 |
| -- b2/b.go -- |
| package b |
| |
| -- b3/go.mod -- |
| module example.net/b |
| |
| go 1.16 |
| |
| require example.net/d v0.2.0 |
| -- b3/b.go -- |
| package b |
| |
| import _ "example.net/d" |
| -- c1/go.mod -- |
| module example.net/c |
| |
| go 1.16 |
| |
| require example.net/b v0.2.1-0.20210219000000-000000000000 |
| -- c1/c.go -- |
| package c |
| |
| import _ "example.net/b" |
| |
| -- c2/go.mod -- |
| module example.net/c |
| |
| go 1.16 |
| |
| require example.net/d v0.2.0 |
| -- c2/c.go -- |
| package c |
| |
| import _ "example.net/d" |
| |
| -- d/go.mod -- |
| module example.net/d |
| |
| go 1.16 |
| -- d/d.go -- |
| package d |
| |
| -- e/go.mod -- |
| module example.net/e |
| |
| go 1.16 |
| -- e/e.go -- |
| package e |