cp go.mod go.mod.orig

# getting a specific version of a module along with a pattern
# not yet present in that module should report the version mismatch
# rather than a "matched no packages" warning.

! go get example.net/pkgadded@v1.1.0 example.net/pkgadded/subpkg/...
stderr '^go: example.net/pkgadded@v1.1.0 conflicts with example.net/pkgadded/subpkg/...@upgrade \(v1.2.0\)$'
! stderr 'matched no packages'
cmp go.mod.orig go.mod


# A wildcard pattern should match the pattern with that path.

go get example.net/pkgadded/...@v1.0.0
go list -m all
stdout '^example.net/pkgadded v1.0.0'
cp go.mod.orig go.mod


# If we need to resolve a transitive dependency of a package,
# and another argument constrains away the version that provides that
# package, then 'go get' should fail with a useful error message.

! go get example.net/pkgadded@v1.0.0 .
stderr '^go: example.com/m imports\n\texample.net/pkgadded/subpkg: cannot find module providing package example.net/pkgadded/subpkg$'
! stderr 'example.net/pkgadded v1\.2\.0'
cmp go.mod.orig go.mod

go get example.net/pkgadded@v1.0.0
! go list -deps -mod=readonly .
stderr '^m.go:3:8: cannot find module providing package example\.net/pkgadded/subpkg: '

-- go.mod --
module example.com/m

go 1.16

require example.net/pkgadded v1.2.0
-- m.go --
package m

import _ "example.net/pkgadded/subpkg"
