# build with no newer version to satisfy exclude env GO111MODULE=on cp go.mod go.mod.orig # With the selected version excluded, commands that query that version without # updating go.mod should fail. ! go list -mod=readonly -m all stderr '^go: ignoring requirement on excluded version rsc.io/sampler v1\.99\.99$' stderr '^go: updates to go.mod needed, disabled by -mod=readonly; to update it:\n\tgo mod tidy$' ! stdout '^rsc.io/sampler v1.99.99' cmp go.mod go.mod.orig ! go list -mod=vendor -m rsc.io/sampler stderr '^go: ignoring requirement on excluded version rsc.io/sampler v1\.99\.99$' stderr '^go: updates to go.mod needed, disabled by -mod=vendor; to update it:\n\tgo mod tidy$' ! stdout '^rsc.io/sampler v1.99.99' cmp go.mod go.mod.orig # The failure message should be clear when -mod=vendor is implicit. go mod edit -go=1.14 ! go list -m rsc.io/sampler stderr '^go: ignoring requirement on excluded version rsc.io/sampler v1\.99\.99$' stderr '^go: updates to go.mod needed, disabled by -mod=vendor\n\t\(Go version in go.mod is at least 1.14 and vendor directory exists\.\)\n\tto update it:\n\tgo mod tidy$' ! stdout '^rsc.io/sampler v1.99.99' go mod edit -go=1.13 cmp go.mod go.mod.orig # With the selected version excluded, commands that load only modules should # drop the excluded module. go list -m -mod=mod all stderr '^go: dropping requirement on excluded version rsc.io/sampler v1\.99\.99$' stdout '^x$' ! stdout '^rsc.io/sampler' cmp go.mod go.moddrop # With the latest version excluded, 'go list' should resolve needed packages # from the next-highest version. cp go.mod.orig go.mod go list -mod=mod -f '{{with .Module}}{{.Path}} {{.Version}}{{end}}' all stderr '^go: dropping requirement on excluded version rsc.io/sampler v1\.99\.99$' stdout '^x $' ! stdout '^rsc.io/sampler v1.99.99' stdout '^rsc.io/sampler v1.3.0' # build with newer version available cp go.mod2 go.mod go list -mod=mod -f '{{with .Module}}{{.Path}} {{.Version}}{{end}}' all stderr '^go: dropping requirement on excluded version rsc.io/quote v1\.5\.1$' stdout 'rsc.io/quote v1.5.2' # build with excluded newer version cp go.mod3 go.mod go list -mod=mod -f '{{with .Module}}{{.Path}} {{.Version}}{{end}}' all ! stderr '^go: dropping requirement' stdout 'rsc.io/quote v1.5.1' -- x.go -- package x import _ "rsc.io/quote" -- go.mod -- module x go 1.13 exclude rsc.io/sampler v1.99.99 require rsc.io/sampler v1.99.99 -- vendor/modules.txt -- # rsc.io/sampler v1.99.99 ## explicit -- go.moddrop -- module x go 1.13 exclude rsc.io/sampler v1.99.99 -- go.mod2 -- module x go 1.13 exclude rsc.io/quote v1.5.1 require rsc.io/quote v1.5.1 -- go.mod3 -- module x go 1.13 exclude rsc.io/quote v1.5.2 require rsc.io/quote v1.5.1