1
0
mirror of https://github.com/golang/go synced 2024-11-18 09:04:49 -07:00

cmd/doc: skip directories like other go tools

It was skipping dirs starting with ".", but it was missing the "_"
prefix and the "testdata" name. From "go help packages":

	Directory and file names that begin with "." or "_" are ignored
	by the go tool, as are directories named "testdata".

Before the change:

	$ go doc z # using src/cmd/go/testdata/testvendor/src/q/z
	package z // import "."

After the fix, it falls back to the current directory, as expected when
a single argument isn't found as a package in $GOPATH.

TestMain needs a small adjustment to keep the tests working, as now
their use of cmd/doc/testdata would normally not work.

Fixes #24462.

Change-Id: I1f5d6d1eba0fb59aff55db33b3b1147e300284ef
Reviewed-on: https://go-review.googlesource.com/106935
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
Daniel Martí 2018-04-13 19:39:32 +01:00
parent a55f9d2d91
commit 49e3e436e7
2 changed files with 15 additions and 4 deletions

View File

@ -97,8 +97,9 @@ func (d *Dirs) bfsWalkRoot(root string) {
continue
}
// Entry is a directory.
// No .git or other dot nonsense please.
if strings.HasPrefix(name, ".") {
// The go tool ignores directories starting with ., _, or named "testdata".
if name[0] == '.' || name[0] == '_' || name == "testdata" {
continue
}
// Remember this (fully qualified) directory for the next pass.

View File

@ -16,10 +16,20 @@ import (
)
func TestMain(m *testing.M) {
// otherwise the tests are brittle, as they may give unexpected
// output or errors when a suffix match with GOPATH takes place
// Clear GOPATH so we don't access the user's own packages in the test.
buildCtx.GOPATH = ""
dirsInit()
// Add $GOROOT/src/cmd/doc/testdata explicitly so we can access its contents in the test.
// Normally testdata directories are ignored, but sending it to dirs.scan directly is
// a hack that works around the check.
testdataDir, err := filepath.Abs("testdata")
if err != nil {
panic(err)
}
go func() { dirs.scan <- testdataDir }()
os.Exit(m.Run())
}