Commit ac6d1564 authored by Bryan C. Mills's avatar Bryan C. Mills

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/127795Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 490035b0
......@@ -318,7 +318,8 @@ func (p *PackageError) Error() string {
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
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
// of the file path (https://golang.org/issue/23970).
parent := p.ImportPath[:i]
importer := (*stk)[len(*stk)-2]
importer := strings.TrimSuffix((*stk)[len(*stk)-2], " (test)")
if str.HasPathPrefix(importer, parent) {
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
// because the module loader presents them with an ImportPath starting
// 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 {
dir := p.Dir
if relDir, err := filepath.Rel(p.Root, p.Dir); err == nil {
......
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) {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment