mirror of
https://github.com/golang/go
synced 2024-11-07 19:56:10 -07:00
cmd/go/internal/load: trim the " (test)" suffix from ImportStack paths
We were passing untrimmed paths to ModPackageModuleInfo, which was then failing the build because it was asked to resolve an invalid path. Fixes #26722 Change-Id: I043cc9c26f2188c5e005c0353620d9c55b339df9 Reviewed-on: https://go-review.googlesource.com/127795 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
490035b0b9
commit
ac6d156479
@ -318,7 +318,8 @@ func (p *PackageError) Error() string {
|
|||||||
return "package " + strings.Join(p.ImportStack, "\n\timports ") + ": " + p.Err
|
return "package " + strings.Join(p.ImportStack, "\n\timports ") + ": " + p.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
// An ImportStack is a stack of import paths.
|
// An ImportStack is a stack of import paths, possibly with the suffix " (test)" appended.
|
||||||
|
// TODO(bcmills): When the tree opens for 1.12, replace the suffixed string with a struct.
|
||||||
type ImportStack []string
|
type ImportStack []string
|
||||||
|
|
||||||
func (s *ImportStack) Push(p string) {
|
func (s *ImportStack) Push(p string) {
|
||||||
@ -986,7 +987,7 @@ func disallowInternal(srcDir string, p *Package, stk *ImportStack) *Package {
|
|||||||
// p is in a module, so make it available based on the import path instead
|
// p is in a module, so make it available based on the import path instead
|
||||||
// of the file path (https://golang.org/issue/23970).
|
// of the file path (https://golang.org/issue/23970).
|
||||||
parent := p.ImportPath[:i]
|
parent := p.ImportPath[:i]
|
||||||
importer := (*stk)[len(*stk)-2]
|
importer := strings.TrimSuffix((*stk)[len(*stk)-2], " (test)")
|
||||||
if str.HasPathPrefix(importer, parent) {
|
if str.HasPathPrefix(importer, parent) {
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
@ -1039,7 +1040,7 @@ func disallowVendor(srcDir, path string, p *Package, stk *ImportStack) *Package
|
|||||||
// but the usual vendor visibility check will not catch them
|
// but the usual vendor visibility check will not catch them
|
||||||
// because the module loader presents them with an ImportPath starting
|
// because the module loader presents them with an ImportPath starting
|
||||||
// with "golang_org/" instead of "vendor/".
|
// with "golang_org/" instead of "vendor/".
|
||||||
importer := (*stk)[len(*stk)-2]
|
importer := strings.TrimSuffix((*stk)[len(*stk)-2], " (test)")
|
||||||
if mod := ModPackageModuleInfo(importer); mod != nil {
|
if mod := ModPackageModuleInfo(importer); mod != nil {
|
||||||
dir := p.Dir
|
dir := p.Dir
|
||||||
if relDir, err := filepath.Rel(p.Root, p.Dir); err == nil {
|
if relDir, err := filepath.Rel(p.Root, p.Dir); err == nil {
|
||||||
|
18
src/cmd/go/testdata/script/mod_test.txt
vendored
Normal file
18
src/cmd/go/testdata/script/mod_test.txt
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
env GO111MODULE=on
|
||||||
|
|
||||||
|
cd a/
|
||||||
|
go test
|
||||||
|
stdout PASS
|
||||||
|
|
||||||
|
-- a/go.mod --
|
||||||
|
module github.com/user/a
|
||||||
|
|
||||||
|
-- a/a.go --
|
||||||
|
package a
|
||||||
|
|
||||||
|
-- a/a_test.go --
|
||||||
|
package a
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func Test(t *testing.T) {}
|
Loading…
Reference in New Issue
Block a user