diff options
author | Bryan C. Mills <bcmills@google.com> | 2019-09-18 16:59:17 -0400 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2019-09-18 21:30:35 +0000 |
commit | a11644a26557ea436d456f005f39f4e01902bafe (patch) | |
tree | 62f9e1a7666daadd0281de25612b68d98ec39e36 /src/cmd/go/internal/modload/search.go | |
parent | e13dd94c564e94de78e6e3e673eb5797d9be0f34 (diff) | |
download | go-a11644a26557ea436d456f005f39f4e01902bafe.tar.gz go-a11644a26557ea436d456f005f39f4e01902bafe.zip |
cmd/go/internal/modload: do not prune the module root when walking directories
When walking filesystem paths to locate packages, we normally prune
out subdirectories with names beginning with ".", "_", or equal to
"testdata". However, we should not prune out such a directory if it is
at or above the module root, since its name is not part of the package
path.
Fixes #28481
Updates #27852
Change-Id: Ice82b1f908afaab50f5592f6c38ca6a0fe911edf
Reviewed-on: https://go-review.googlesource.com/c/go/+/196297
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Daniel Martà <mvdan@mvdan.cc>
Reviewed-by: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd/go/internal/modload/search.go')
-rw-r--r-- | src/cmd/go/internal/modload/search.go | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/cmd/go/internal/modload/search.go b/src/cmd/go/internal/modload/search.go index d82386eca3..98c384161b 100644 --- a/src/cmd/go/internal/modload/search.go +++ b/src/cmd/go/internal/modload/search.go @@ -48,16 +48,20 @@ func matchPackages(pattern string, tags map[string]bool, useStd bool, modules [] return nil } - // Don't use GOROOT/src but do walk down into it. - if path == root && importPathRoot == "" { - return nil - } - want := true - // Avoid .foo, _foo, and testdata directory trees. - _, elem := filepath.Split(path) - if strings.HasPrefix(elem, ".") || strings.HasPrefix(elem, "_") || elem == "testdata" { - want = false + elem := "" + + // Don't use GOROOT/src but do walk down into it. + if path == root { + if importPathRoot == "" { + return nil + } + } else { + // Avoid .foo, _foo, and testdata subdirectory trees. + _, elem = filepath.Split(path) + if strings.HasPrefix(elem, ".") || strings.HasPrefix(elem, "_") || elem == "testdata" { + want = false + } } name := importPathRoot + filepath.ToSlash(path[len(root):]) |