# 'go get pkg' should not show a deprecation message for an unrelated module. go get ./use/nothing ! stderr 'module.*is deprecated' # 'go get pkg' should show a deprecation message for the module providing pkg. go get example.com/deprecated/a stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' go get example.com/deprecated/a@v1.0.0 stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' # 'go get pkg' should show a deprecation message for a module providing # packages directly imported by pkg. go get ./use/a stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' # 'go get pkg' may show a deprecation message for an indirectly required module # if it provides a package named on the command line. go get ./use/b ! stderr 'module.*is deprecated' go get local/use ! stderr 'module.*is deprecated' go get example.com/deprecated/b stderr '^go: module example.com/deprecated/b is deprecated: in example.com/deprecated/b@v1.9.0$' # 'go get pkg' does not show a deprecation message for a module providing a # directly imported package if the module is no longer deprecated in its # latest version, even if the module is deprecated in its current version. go get ./use/undeprecated ! stderr 'module.*is deprecated' -- go.mod -- module m go 1.17 require ( example.com/deprecated/a v1.0.0 example.com/undeprecated v1.0.0 local v0.0.0 ) replace local v0.0.0 => ./local -- use/nothing/nothing.go -- package nothing -- use/a/a.go -- package a import _ "example.com/deprecated/a" -- use/b/b.go -- package b import _ "local/use" -- use/undeprecated/undeprecated.go -- package undeprecated import _ "example.com/undeprecated" -- local/go.mod -- module local go 1.17 require example.com/deprecated/b v1.0.0 -- local/use/use.go -- package use import _ "example.com/deprecated/b"