1
0
mirror of https://github.com/golang/go synced 2024-11-05 11:36:10 -07:00
go/godoc
Dmitri Shuralyov f595fb5c96 cmd/godoc, godoc: implement build.Context.IsDir, update expected error 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>
2017-03-05 21:32:12 +00:00
..
analysis x/tools: support Go 1.9 type aliases 2017-02-13 21:46:59 +00:00
dl godoc/dl: change "All versions" to "Archived versions" 2017-01-06 18:41:26 +00:00
proxy godoc/proxy: use HTTPS when bouncing through to the playground 2016-05-19 07:11:34 +00:00
redirect godoc: don't drop the query params when redirecting 2015-10-06 03:11:16 +00:00
short godoc: hide appengine dependencies behind build tags 2016-01-04 23:08:03 +00:00
static godoc: preserve ?m=... query string 2017-02-08 21:12:11 +00:00
util tools: add import comments. 2014-12-09 22:42:16 +00:00
vfs x/tools/godoc: gofmt -s -w 2017-02-15 21:42:32 +00:00
appengine.go godoc: hide and block share functionality from specific countries 2015-09-02 05:52:45 +00:00
cmdline_test.go godoc: add missing copyright 2015-04-27 04:29:37 +00:00
cmdline.go x/tools: simplify and format code 2017-02-28 14:15:42 +00:00
corpus.go go.tools: use golang.org/x/... import paths 2014-11-10 08:50:40 +11:00
dirtrees.go godoc: remove some unused code 2017-01-09 19:59:23 +00:00
format.go go.tools/godoc: Fix jump-to-line in source view. 2013-08-01 11:52:25 +10:00
godoc17_test.go x/tools/cmd/godoc: fix broken links in composite literals 2017-02-17 22:21:49 +00:00
godoc_test.go x/tools/cmd/godoc: fix broken links in composite literals 2017-02-17 22:21:49 +00:00
godoc.go x/tools/godoc: remove unused functions 2017-03-01 14:54:25 +00:00
index_test.go x/tools/godoc: gofmt -s -w 2017-02-15 21:42:32 +00:00
index.go godoc: remove some unused code 2017-01-09 19:59:23 +00:00
linkify.go x/tools/cmd/godoc: fix broken links in composite literals 2017-02-17 22:21:49 +00:00
meta.go go.tools: use golang.org/x/... import paths 2014-11-10 08:50:40 +11:00
page.go godoc: drop outdated comment 2016-10-04 17:46:36 +00:00
parser.go go.tools: use golang.org/x/... import paths 2014-11-10 08:50:40 +11:00
pres.go cmd/godoc: accept GOOS and GOARCH URL parameters in -http mode 2016-02-04 22:11:53 +00:00
README.md godoc: add README 2017-01-09 19:14:34 +00:00
search.go godoc: don't quote search term to avoid escaping regexps 2016-02-05 01:57:33 +00:00
server.go cmd/godoc, godoc: implement build.Context.IsDir, update expected error string 2017-03-05 21:32:12 +00:00
snippet.go godoc: revert support for Go 1.8 aliases 2016-11-04 21:17:32 +00:00
spec.go godoc: move bulk of the code to the package 2013-07-17 17:09:54 +10:00
spot.go godoc: add search results that point to documentation instead of source. 2013-11-21 11:55:42 -05:00
tab.go godoc: add missing copyright 2015-04-27 04:29:37 +00:00
template.go go.tools: use golang.org/x/... import paths 2014-11-10 08:50:40 +11:00

godoc

This directory contains most of the code for running a godoc server. The executable lives at golang.org/x/tools/cmd/godoc.

Development mode

In production, CSS/JS/template assets need to be compiled into the godoc binary. It can be tedious to recompile assets every time, but you can pass a flag to load CSS/JS/templates from disk every time a page loads:

godoc --templates=$GOPATH/src/golang.org/x/tools/godoc/static --http=:6060

Recompiling static assets

The files that live at static/style.css, static/jquery.js and so on are not present in the final binary. They are placed into static/static.go by running go generate. So to compile a change and test it in your browser:

  1. Make changes to e.g. static/style.css.

  2. Run go generate golang.org/x/tools/godoc/static so static/static.go picks up the change.

  3. Run go install golang.org/x/tools/cmd/godoc so the compiled godoc binary picks up the change.

  4. Run godoc -http=:6060 and view your changes in the browser. You may need to disable your browser's cache to avoid reloading a stale file.