Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

website: tip.golang.org godoc browsing is broken #19401

Closed
josharian opened this issue Mar 5, 2017 · 5 comments
Closed

website: tip.golang.org godoc browsing is broken #19401

josharian opened this issue Mar 5, 2017 · 5 comments
Milestone

Comments

@josharian
Copy link
Contributor

https://golang.org/pkg/runtime/ shows docs for package runtime.

https://tip.golang.org/pkg/runtime/ shows an error.

cc @broady (is that right?)

@josharian josharian added this to the Go1.9 milestone Mar 5, 2017
@dmitshur
Copy link
Contributor

dmitshur commented Mar 5, 2017

I believe this is because of https://groups.google.com/d/msg/golang-codereviews/tju2mJPjAwI/N8RKEFRvAQAJ. Note that https://tip.golang.org/pkg/ also displays an error.

I've sent CL 37768 that fixes the issue, and its commit message contains a detailed explanation of the cause.

@gopherbot
Copy link
Contributor

CL https://golang.org/cl/37768 mentions this issue.

gopherbot pushed a commit to golang/tools that referenced this issue Mar 5, 2017
…r string

Prior to this change, handlerServer.GetPageInfo created a build.Context
starting with build.Default, and provided custom implementations for
its IsAbsPath, ReadDir, and OpenFile funcs. Those funcs would operate
on h.c.fs virtual filesystem.

https://godoc.org/go/build#Context.IsDir is documented as:

	// IsDir reports whether the path names a directory.
	// If IsDir is nil, Import calls os.Stat and uses the result's IsDir method.
	IsDir func(path string) bool

IsDir was left as nil, and so the default implementation was used.
The default implementation uses os.Stat and isn't aware of the h.c.fs
virtual filesystem.

This appears to have been harmless in the past, but after the change to
go/build in https://golang.org/cl/33158, it started to interfere with
the operation of godoc. The command godoc began to fail to resolve
relative import path "." in directories that exist, because the
incorrect IsDir implementation was looking in real filesystem, rather
than the virtual one:

	$ ./godoc fmt
	2017/03/04 18:59:50 cannot find package "." in:
		/target
	$ ./godoc -http=localhost:6060
	2017/03/04 19:00:07 cannot find package "." in:
		/src/fmt

Providing a custom implementation of IsDir that is aware of the h.c.fs
virtual filesystem, and performs a stat operation on the correct path
there resolves that problem. It also fixes the failing tests.

Additionally, because the exact error string returned from
Context.Import has changed after https://golang.org/cl/33158,
and now contains the text "package not found" rather than the
underlying error text from filesystem caused by a failed ReadDir
operation, the expected error message from "./godoc nonexistingpkg"
in a test needed to be updated to "cannot find package". It's no longer
dependent on the operating system.

It might be desirable to provide more relevant detail in the error
message from cmd/godoc when a package is not found, but that should be
determined and done in a followup CL. The scope of this one is to fix
normal functionality.

This change follows update to go/build in https://golang.org/cl/33158.

Helps golang/go#19401.

Change-Id: I00e2f746ec4a2fe7e640218adce75f15bdf29aaf
Reviewed-on: https://go-review.googlesource.com/37768
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
@dmitshur
Copy link
Contributor

dmitshur commented Mar 5, 2017

https://tip.golang.org/pkg/runtime/ works ok now, this issue can be closed.

@bradfitz
Copy link
Contributor

bradfitz commented Mar 5, 2017

@shurcooL, I gave you github edit access. Feel free to close it yourself. :)

@dmitshur
Copy link
Contributor

dmitshur commented Mar 5, 2017

Thanks Brad!

Closing because this issue is resolved.

@dmitshur dmitshur closed this as completed Mar 5, 2017
@golang golang locked and limited conversation to collaborators Mar 5, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants