| # This test makes checks against a regression of a bug in the Go command |
| # where the module loader hung forever because all main module dependencies |
| # kept workspace pruning instead of adopting the pruning in their go.mod |
| # files, and the loader kept adding dependencies on the queue until they |
| # were either pruned or unpruned, never breaking a module dependency cycle. |
| # |
| # This is the module graph in the test: |
| # |
| # /-------------------------\ |
| # | | |
| # V | |
| # example.com/a -> example.com/b v1.0.0 -> example.com/c v1.1.0 |
| |
| go list -m -f '{{.Version}}' example.com/c |
| |
| -- go.work -- |
| go 1.16 |
| |
| use ( |
| ./a |
| ) |
| -- a/go.mod -- |
| module example.com/a |
| |
| go 1.18 |
| |
| require example.com/b v1.0.0 |
| |
| replace example.com/b v1.0.0 => ../b |
| replace example.com/c v1.0.0 => ../c |
| -- a/foo.go -- |
| package main |
| |
| import "example.com/b" |
| |
| func main() { |
| b.B() |
| } |
| -- b/go.mod -- |
| module example.com/b |
| |
| go 1.18 |
| |
| require example.com/c v1.0.0 |
| -- b/b.go -- |
| package b |
| |
| func B() { |
| } |
| -- b/cmd/main.go -- |
| package main |
| |
| import "example.com/c" |
| |
| func main() { |
| c.C() |
| } |
| -- c/go.mod -- |
| module example.com/c |
| |
| go 1.18 |
| |
| require example.com/b v1.0.0 |
| -- c/c.go -- |
| package c |
| |
| import "example.com/b" |
| |
| func C() { |
| b.B() |
| } |