| # https://golang.org/issue/46141: 'go mod tidy' for a Go 1.17 module should by |
| # default preserve enough checksums for the module to be used by Go 1.16. |
| # |
| # We don't have a copy of Go 1.16 handy, but we can simulate it by editing the |
| # 'go' version in the go.mod file to 1.16, without actually updating the |
| # requirements to match. |
| |
| [short] skip |
| |
| env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' |
| |
| |
| # For this module, Go 1.17 produces an error for one module, and Go 1.16 |
| # produces a different error for a different module. |
| |
| cp go.mod go.mod.orig |
| |
| ! go mod tidy |
| |
| stderr '^example\.com/m imports\n\texample\.net/added: module example\.net/added@latest found \(v0\.3\.0, replaced by \./a1\), but does not contain package example\.net/added$' |
| |
| cmp go.mod go.mod.orig |
| |
| |
| # When we run 'go mod tidy -e', we should proceed past the first error and follow |
| # it with a second error describing the version descrepancy. |
| # |
| # We should not provide advice on how to push past the version descrepancy, |
| # because the '-e' flag should already do that, writing out an otherwise-tidied |
| # go.mod file. |
| |
| go mod tidy -e |
| |
| stderr '^example\.com/m imports\n\texample\.net/added: module example\.net/added@latest found \(v0\.3\.0, replaced by \./a1\), but does not contain package example\.net/added\nexample\.net/added failed to load from any module,\n\tbut go 1\.16 would load it from example\.net/added@v0\.2\.0$' |
| |
| ! stderr '\n\tgo mod tidy' |
| |
| cmp go.mod go.mod.tidy |
| |
| |
| -- go.mod -- |
| module example.com/m |
| |
| go 1.17 |
| |
| replace ( |
| example.net/added v0.1.0 => ./a1 |
| example.net/added v0.2.0 => ./a2 |
| example.net/added v0.3.0 => ./a1 |
| example.net/lazy v0.1.0 => ./lazy |
| example.net/pruned v0.1.0 => ./pruned |
| ) |
| |
| require ( |
| example.net/added v0.1.0 |
| example.net/lazy v0.1.0 |
| ) |
| -- go.mod.tidy -- |
| module example.com/m |
| |
| go 1.17 |
| |
| replace ( |
| example.net/added v0.1.0 => ./a1 |
| example.net/added v0.2.0 => ./a2 |
| example.net/added v0.3.0 => ./a1 |
| example.net/lazy v0.1.0 => ./lazy |
| example.net/pruned v0.1.0 => ./pruned |
| ) |
| |
| require example.net/lazy v0.1.0 |
| -- m.go -- |
| package m |
| |
| import ( |
| _ "example.net/added" |
| _ "example.net/lazy" |
| ) |
| |
| -- a1/go.mod -- |
| module example.net/added |
| |
| go 1.17 |
| -- a2/go.mod -- |
| module example.net/added |
| |
| go 1.17 |
| -- a2/added.go -- |
| package added |
| |
| -- lazy/go.mod -- |
| module example.net/lazy |
| |
| go 1.17 |
| |
| require example.net/pruned v0.1.0 |
| -- lazy/lazy.go -- |
| package lazy |
| |
| -- pruned/go.mod -- |
| module example.net/pruned |
| |
| go 1.17 |
| |
| require example.net/added v0.2.0 |