| env GO111MODULE=on |
| [short] skip |
| |
| # -mod=readonly must not resolve missing modules nor update go.mod |
| env GOFLAGS=-mod=readonly |
| go mod edit -fmt |
| cp go.mod go.mod.empty |
| ! go list all |
| stderr '^x.go:2:8: cannot find module providing package rsc\.io/quote: import lookup disabled by -mod=readonly' |
| ! stderr '\(\)' # If we don't have a reason for -mod=readonly, don't log an empty one. |
| cmp go.mod go.mod.empty |
| |
| # -mod=readonly should be set by default. |
| env GOFLAGS= |
| ! go list all |
| stderr '^x.go:2:8: no required module provides package rsc\.io/quote; to add it:\n\tgo get rsc\.io/quote$' |
| cmp go.mod go.mod.empty |
| |
| env GOFLAGS=-mod=readonly |
| |
| # update go.mod - go get allowed |
| go get -d rsc.io/quote |
| grep rsc.io/quote go.mod |
| |
| # update go.mod - go mod tidy allowed |
| cp go.mod.empty go.mod |
| go mod tidy |
| cp go.mod go.mod.tidy |
| |
| # -mod=readonly must succeed once go.mod is up-to-date... |
| go list all |
| |
| # ... even if it needs downloads |
| go clean -modcache |
| go list all |
| |
| # -mod=readonly must not cause 'go list -m' to fail. |
| # (golang.org/issue/36478) |
| go list -m all |
| ! stderr 'cannot query module' |
| |
| # -mod=readonly should reject inconsistent go.mod files |
| # (ones that would be rewritten). |
| go get -d rsc.io/sampler@v1.2.0 |
| go mod edit -require rsc.io/quote@v1.5.2 |
| cp go.mod go.mod.inconsistent |
| ! go list |
| stderr 'go: updates to go.mod needed, disabled by -mod=readonly' |
| cmp go.mod go.mod.inconsistent |
| |
| # We get a different message when -mod=readonly is used by default. |
| env GOFLAGS= |
| ! go list |
| stderr '^go: updates to go.mod needed; to update it:\n\tgo mod tidy' |
| |
| # However, it should not reject files missing a 'go' directive, |
| # since that was not always required. |
| cp go.mod.nogo go.mod |
| go list all |
| cmp go.mod go.mod.nogo |
| |
| # Nor should it reject files with redundant (not incorrect) |
| # requirements. |
| cp go.mod.redundant go.mod |
| go list all |
| cmp go.mod go.mod.redundant |
| |
| cp go.mod.indirect go.mod |
| go list all |
| cmp go.mod go.mod.indirect |
| |
| |
| # If we identify a missing package as a dependency of some other package in the |
| # main module, we should suggest 'go mod tidy' instead of resolving it. |
| |
| cp go.mod.untidy go.mod |
| ! go list all |
| stderr '^x.go:2:8: no required module provides package rsc.io/quote; to add it:\n\tgo get rsc.io/quote$' |
| |
| ! go list -deps . |
| stderr '^x.go:2:8: no required module provides package rsc.io/quote; to add it:\n\tgo get rsc.io/quote$' |
| |
| # However, if we didn't see an import from the main module, we should suggest |
| # 'go get -d' instead, because we don't know whether 'go mod tidy' would add it. |
| ! go list rsc.io/quote |
| stderr '^no required module provides package rsc.io/quote; to add it:\n\tgo get rsc.io/quote$' |
| |
| |
| -- go.mod -- |
| module m |
| |
| go 1.20 |
| |
| -- x.go -- |
| package x |
| import _ "rsc.io/quote" |
| -- go.mod.nogo -- |
| module m |
| |
| require ( |
| rsc.io/quote v1.5.2 |
| rsc.io/testonly v1.0.0 // indirect |
| ) |
| -- go.mod.redundant -- |
| module m |
| |
| go 1.20 |
| |
| require ( |
| rsc.io/quote v1.5.2 |
| rsc.io/sampler v1.3.0 // indirect |
| rsc.io/testonly v1.0.0 // indirect |
| ) |
| -- go.mod.indirect -- |
| module m |
| |
| go 1.20 |
| |
| require ( |
| rsc.io/quote v1.5.2 // indirect |
| rsc.io/sampler v1.3.0 // indirect |
| rsc.io/testonly v1.0.0 // indirect |
| ) |
| -- go.mod.untidy -- |
| module m |
| |
| go 1.20 |
| |
| require ( |
| rsc.io/sampler v1.3.0 // indirect |
| ) |