| # Regression test for https://golang.org/issue/46078: |
| # 'go mod tidy' should not panic if the main module initially |
| # requires an older version of itself. |
| |
| # A module may require an older version of itself without error. This is |
| # inconsistent (the required version is never selected), but we still get |
| # a reproducible build list. |
| go list -m all |
| stdout '^golang.org/issue/46078$' |
| |
| # 'go mod tidy' should fix this (and not crash). |
| go mod tidy |
| |
| |
| # We prune out redundant roots very early on in module loading, and at that |
| # point the indirect requirement on example.net/x v0.1.0 appears to be |
| # irrelevant. It should be pruned out; when the import of "example.net/x" is |
| # later resolved, it should resolve at the latest version (v0.2.0), not the |
| # version implied by the (former) misleading requirement on the older version of |
| # the main module. |
| |
| cmp go.mod go.mod.tidy |
| |
| |
| -- go.mod -- |
| module golang.org/issue/46078 |
| |
| go 1.17 |
| |
| replace ( |
| example.net/x v0.1.0 => ./x |
| example.net/x v0.2.0 => ./x |
| golang.org/issue/46078 v0.1.0 => ./old |
| ) |
| |
| require golang.org/issue/46078 v0.1.0 |
| -- go.mod.tidy -- |
| module golang.org/issue/46078 |
| |
| go 1.17 |
| |
| replace ( |
| example.net/x v0.1.0 => ./x |
| example.net/x v0.2.0 => ./x |
| golang.org/issue/46078 v0.1.0 => ./old |
| ) |
| |
| require example.net/x v0.2.0 |
| -- issue46078/issue.go -- |
| package issue46078 |
| |
| import _ "example.net/x" |
| |
| -- old/go.mod -- |
| module golang.org/issue/46078 |
| |
| go 1.17 |
| |
| require example.net/x v0.1.0 |
| |
| -- x/go.mod -- |
| module example.net/x |
| |
| go 1.17 |
| -- x/x.go -- |
| package x |