mirror of
https://github.com/golang/go
synced 2024-11-17 16:14:42 -07:00
cmd/go: test the behavior of 'go get' in module mode with package vs. module arguments
Updates #37438 Change-Id: I5beb380b37532571768a92bea50003f6ff1757e1 Reviewed-on: https://go-review.googlesource.com/c/go/+/255054 Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
parent
06f7e655d1
commit
c47ba5fbfb
124
src/cmd/go/testdata/script/mod_get_ambiguous_arg.txt
vendored
Normal file
124
src/cmd/go/testdata/script/mod_get_ambiguous_arg.txt
vendored
Normal file
@ -0,0 +1,124 @@
|
||||
go mod tidy
|
||||
cp go.mod go.mod.orig
|
||||
|
||||
# If there is no sensible *package* meaning for 'm/p', perhaps it should refer
|
||||
# to *module* m/p?
|
||||
# Today, it still seems to refer to the package.
|
||||
|
||||
! go get -d m/p@v0.1.0
|
||||
stderr 'go get m/p@v0.1.0: module m/p@latest found \(v0.1.0, replaced by ./mp01\), but does not contain package m/p'
|
||||
cmp go.mod.orig go.mod
|
||||
|
||||
|
||||
# TODO(#37438): If we add v0.2.0 before this point, we end up (somehow!)
|
||||
# resolving m/p@v0.1.0 as *both* a module and a package.
|
||||
|
||||
cp go.mod.orig go.mod
|
||||
go mod edit -replace=m@v0.2.0=./m02
|
||||
go mod edit -replace=m/p@v0.2.0=./mp02
|
||||
|
||||
# The argument 'm/p' in 'go get m/p' refers to *package* m/p,
|
||||
# which is in module m.
|
||||
#
|
||||
# (It only refers to *module* m/p if there is no such package at the
|
||||
# requested version.)
|
||||
|
||||
go get -d m/p@v0.2.0
|
||||
go list -m all
|
||||
stdout '^m v0.2.0 '
|
||||
stdout '^m/p v0.1.0 '
|
||||
|
||||
# Repeating the above with module m/p already in the module graph does not
|
||||
# change its meaning.
|
||||
|
||||
go get -d m/p@v0.2.0
|
||||
go list -m all
|
||||
stdout '^m v0.2.0 '
|
||||
stdout '^m/p v0.1.0 '
|
||||
|
||||
|
||||
# TODO(#37438): If we add v0.3.0 before this point, we get a totally bogus error
|
||||
# today, because 'go get' ends up attempting to resolve package 'm/p' without a
|
||||
# specific version and can't find it if module m no longer contains v0.3.0.
|
||||
|
||||
cp go.mod.orig go.mod
|
||||
go mod edit -replace=m@v0.3.0=./m03
|
||||
go mod edit -replace=m/p@v0.3.0=./mp03
|
||||
|
||||
! go get -d m/p@v0.2.0
|
||||
stderr 'go get m/p@v0.2.0: module m/p@latest found \(v0.3.0, replaced by ./mp03\), but does not contain package m/p$'
|
||||
|
||||
# If there is no sensible package meaning for 'm/p', perhaps it should refer
|
||||
# to *module* m/p?
|
||||
# Today, it still seems to refer to the package.
|
||||
|
||||
! go get -d m/p@v0.3.0
|
||||
stderr '^go get m/p@v0.3.0: module m/p@latest found \(v0\.3\.0, replaced by \./mp03\), but does not contain package m/p$'
|
||||
|
||||
|
||||
-- go.mod --
|
||||
module example.com
|
||||
|
||||
go 1.16
|
||||
|
||||
replace (
|
||||
m v0.1.0 => ./m01
|
||||
m/p v0.1.0 => ./mp01
|
||||
)
|
||||
-- m01/go.mod --
|
||||
module m
|
||||
|
||||
go 1.16
|
||||
-- m01/README.txt --
|
||||
Module m at v0.3.0 does not yet contain package p.
|
||||
|
||||
-- m02/go.mod --
|
||||
module m
|
||||
|
||||
go 1.16
|
||||
|
||||
require m/p v0.1.0
|
||||
-- m02/p/p.go --
|
||||
// Package p is present in module m, but not module m/p.
|
||||
package p
|
||||
|
||||
-- m03/go.mod --
|
||||
module m
|
||||
|
||||
go 1.16
|
||||
|
||||
require m/p v0.1.0
|
||||
-- m03/README.txt --
|
||||
Module m at v0.3.0 no longer contains package p.
|
||||
|
||||
-- mv2/go.mod --
|
||||
module m/v2
|
||||
|
||||
go 1.16
|
||||
-- mv2/README.txt --
|
||||
This module is m/v2. It doesn't actually need to exist,
|
||||
but it explains how module m could plausibly exist
|
||||
and still contain package p at 'latest' even when module
|
||||
m/p also exists.
|
||||
|
||||
-- mp01/go.mod --
|
||||
module m/p
|
||||
|
||||
go 1.16
|
||||
-- mp01/README.txt --
|
||||
This module is m/p.
|
||||
Package m/p no longer exists.
|
||||
-- mp02/go.mod --
|
||||
module m/p
|
||||
|
||||
go 1.16
|
||||
-- mp02/README.txt --
|
||||
This module is m/p.
|
||||
Package m/p no longer exists.
|
||||
-- mp03/go.mod --
|
||||
module m/p
|
||||
|
||||
go 1.16
|
||||
-- mp03/README.txt --
|
||||
This module is m/p.
|
||||
Package m/p no longer exists.
|
Loading…
Reference in New Issue
Block a user