mirror of
https://github.com/golang/go
synced 2024-11-13 18:40:22 -07:00
cmd/go: fix modload response for std-vendored packages
This fixes a failure when using Go 1.11 to build App Engine code. Change-Id: I008e8cf5ad4c568676d904deddff031a166f2d5d Reviewed-on: https://go-review.googlesource.com/130138 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
46033d7639
commit
c652a1b9c0
@ -25,15 +25,21 @@ var (
|
||||
)
|
||||
|
||||
func isStandardImportPath(path string) bool {
|
||||
return findStandardImportPath(path) != ""
|
||||
}
|
||||
|
||||
func findStandardImportPath(path string) string {
|
||||
if search.IsStandardImportPath(path) {
|
||||
if _, err := os.Stat(filepath.Join(cfg.GOROOT, "src", path)); err == nil {
|
||||
return true
|
||||
dir := filepath.Join(cfg.GOROOT, "src", path)
|
||||
if _, err := os.Stat(dir); err == nil {
|
||||
return dir
|
||||
}
|
||||
if _, err := os.Stat(filepath.Join(cfg.GOROOT, "src/vendor", path)); err == nil {
|
||||
return true
|
||||
dir = filepath.Join(cfg.GOROOT, "src/vendor", path)
|
||||
if _, err := os.Stat(dir); err == nil {
|
||||
return dir
|
||||
}
|
||||
}
|
||||
return false
|
||||
return ""
|
||||
}
|
||||
|
||||
func PackageModuleInfo(pkgpath string) *modinfo.ModulePublic {
|
||||
|
@ -399,12 +399,18 @@ func ModuleUsedDirectly(path string) bool {
|
||||
func Lookup(path string) (dir, realPath string, err error) {
|
||||
pkg, ok := loaded.pkgCache.Get(path).(*loadPkg)
|
||||
if !ok {
|
||||
if isStandardImportPath(path) {
|
||||
dir := filepath.Join(cfg.GOROOT, "src", path)
|
||||
if _, err := os.Stat(dir); err == nil {
|
||||
// The loader should have found all the relevant paths.
|
||||
// There are a few exceptions, though:
|
||||
// - during go list without -test, the p.Resolve calls to process p.TestImports and p.XTestImports
|
||||
// end up here to canonicalize the import paths.
|
||||
// - during any load, non-loaded packages like "unsafe" end up here.
|
||||
// - during any load, build-injected dependencies like "runtime/cgo" end up here.
|
||||
// - because we ignore appengine/* in the module loader,
|
||||
// the dependencies of any actual appengine/* library end up here.
|
||||
dir := findStandardImportPath(path)
|
||||
if dir != "" {
|
||||
return dir, path, nil
|
||||
}
|
||||
}
|
||||
return "", "", errMissing
|
||||
}
|
||||
return pkg.dir, pkg.path, pkg.err
|
||||
|
19
src/cmd/go/testdata/script/mod_std_vendor.txt
vendored
Normal file
19
src/cmd/go/testdata/script/mod_std_vendor.txt
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
env GO111MODULE=on
|
||||
|
||||
go list -f '{{.TestImports}}'
|
||||
stdout net/http # from .TestImports
|
||||
|
||||
go list -test -f '{{.Deps}}'
|
||||
stdout golang_org/x/crypto # dep of .TestImports
|
||||
|
||||
-- go.mod --
|
||||
module m
|
||||
|
||||
-- x.go --
|
||||
package x
|
||||
|
||||
-- x_test.go --
|
||||
package x
|
||||
import "testing"
|
||||
import _ "net/http"
|
||||
func Test(t *testing.T) {}
|
Loading…
Reference in New Issue
Block a user