# '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"
