summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2010-02-18 17:40:50 -0800
committerRobert Griesemer <gri@golang.org>2010-02-18 17:40:50 -0800
commit1310f6f87b6f9c30baaf31b3afd3a3dd2f8ff698 (patch)
treee0bf960a8d022238a4155621f02c2b4375760fa0 /src
parentcc57fc042ce65cb7fe2b13fcc74992eb95b52958 (diff)
downloadgolang-1310f6f87b6f9c30baaf31b3afd3a3dd2f8ff698.tar.gz
godoc: path cleanups, fixed a race condition, initial support for a menu on pages
R=rsc CC=adg, golang-dev http://codereview.appspot.com/215050
Diffstat (limited to 'src')
-rw-r--r--src/cmd/godoc/doc.go6
-rw-r--r--src/cmd/godoc/godoc.go41
-rw-r--r--src/cmd/godoc/main.go9
3 files changed, 20 insertions, 36 deletions
diff --git a/src/cmd/godoc/doc.go b/src/cmd/godoc/doc.go
index 1c40ebdd9..701b0e177 100644
--- a/src/cmd/godoc/doc.go
+++ b/src/cmd/godoc/doc.go
@@ -27,12 +27,6 @@ The flags are:
width of tabs in units of spaces
-path=""
additional package directories (colon-separated)
- -cmdroot="/goroot/src/cmd"
- command source directory under -goroot (if unrooted, relative to cwd)
- -tmplroot="/goroot/lib/godoc"
- template directory under -goroot (if unrooted, relative to cwd)
- -pkgroot="/goroot/src/pkg"
- package source directory under -goroot (if unrooted, relative to cwd)
-html
print HTML in command-line mode
-goroot=$GOROOT
diff --git a/src/cmd/godoc/godoc.go b/src/cmd/godoc/godoc.go
index e8b3d6987..08a990296 100644
--- a/src/cmd/godoc/godoc.go
+++ b/src/cmd/godoc/godoc.go
@@ -77,14 +77,9 @@ func (dt *delayTime) backoff(max int) {
var (
verbose = flag.Bool("v", false, "verbose mode")
- // "fixed" file system roots
- goroot string
- cmdroot string
- pkgroot string
- tmplroot string
-
- // additional file system roots to consider
- path = flag.String("path", "", "additional package directories (colon-separated)")
+ // file system roots
+ goroot string
+ path = flag.String("path", "", "additional package directories (colon-separated)")
// layout control
tabwidth = flag.Int("tabwidth", 4, "tab width")
@@ -106,19 +101,14 @@ func init() {
goroot = pathutil.Join(os.Getenv("HOME"), "go")
}
flag.StringVar(&goroot, "goroot", goroot, "Go root directory")
-
- // other flags/variables that depend on goroot
- flag.StringVar(&cmdroot, "cmdroot", pathutil.Join(goroot, "src/cmd"), "command source directory")
- flag.StringVar(&pkgroot, "pkgroot", pathutil.Join(goroot, "src/pkg"), "package source directory")
- flag.StringVar(&tmplroot, "tmplroot", pathutil.Join(goroot, "lib/godoc"), "template directory")
}
func initHandlers() {
fsMap.Init(*path)
fileServer = http.FileServer(goroot, "")
- cmdHandler = httpHandler{"/cmd/", cmdroot, false}
- pkgHandler = httpHandler{"/pkg/", pkgroot, true}
+ cmdHandler = httpHandler{"/cmd/", pathutil.Join(goroot, "src/cmd"), false}
+ pkgHandler = httpHandler{"/pkg/", pathutil.Join(goroot, "src/pkg"), true}
}
@@ -790,7 +780,7 @@ var fmap = template.FormatterMap{
func readTemplate(name string) *template.Template {
- path := pathutil.Join(tmplroot, name)
+ path := pathutil.Join(goroot, "lib/godoc/"+name)
data, err := ioutil.ReadFile(path)
if err != nil {
log.Exitf("ReadFile %s: %v", path, err)
@@ -813,7 +803,7 @@ var (
)
func readTemplates() {
- // have to delay until after flags processing, so that tmplroot is known
+ // have to delay until after flags processing since paths depend on goroot
dirlistHTML = readTemplate("dirlist.html")
errorHTML = readTemplate("error.html")
godocHTML = readTemplate("godoc.html")
@@ -832,6 +822,7 @@ func servePage(c *http.Conn, title, query string, content []byte) {
PkgRoots []string
Timestamp uint64 // int64 to be compatible with os.Dir.Mtime_ns
Query string
+ Menu []byte
Content []byte
}
@@ -841,6 +832,7 @@ func servePage(c *http.Conn, title, query string, content []byte) {
PkgRoots: fsMap.PrefixList(),
Timestamp: uint64(ts) * 1e9, // timestamp in ns
Query: query,
+ Menu: nil,
Content: content,
}
@@ -875,12 +867,6 @@ func commentText(src []byte) (text string) {
}
-func serveError(c *http.Conn, r *http.Request, relpath string, err os.Error) {
- contents := applyTemplate(errorHTML, "errorHTML", err)
- servePage(c, "File "+relpath, "", contents)
-}
-
-
func serveHTMLDoc(c *http.Conn, r *http.Request, abspath, relpath string) {
// get HTML body contents
src, err := ioutil.ReadFile(abspath)
@@ -1066,7 +1052,7 @@ func serveFile(c *http.Conn, r *http.Request) {
dir, err := os.Lstat(abspath)
if err != nil {
log.Stderr(err)
- serveError(c, r, abspath, err)
+ serveError(c, r, relpath, err)
return
}
@@ -1136,8 +1122,9 @@ func (h *httpHandler) getPageInfo(relpath string, try bool) PageInfo {
log.Stderrf("parser.parseDir: %s", err)
}
if len(pkgs) != 1 && !try {
- // TODO: should handle multiple packages
- log.Stderrf("parser.parseDir: found %d packages", len(pkgs))
+ // TODO: should handle multiple packages,
+ // error reporting disabled for now
+ // log.Stderrf("parser.parseDir: found %d packages", len(pkgs))
}
// Get the best matching package: either the first one, or the
@@ -1166,7 +1153,7 @@ func (h *httpHandler) getPageInfo(relpath string, try bool) PageInfo {
// get directory information
var dir *Directory
- if tree, _ := fsTree.get(); tree != nil {
+ if tree, _ := fsTree.get(); tree != nil && tree.(*Directory) != nil {
// directory tree is present; lookup respective directory
// (may still fail if the file system was updated and the
// new directory tree has not yet been computed)
diff --git a/src/cmd/godoc/main.go b/src/cmd/godoc/main.go
index 9a7a13aba..0074a22de 100644
--- a/src/cmd/godoc/main.go
+++ b/src/cmd/godoc/main.go
@@ -50,6 +50,12 @@ var (
)
+func serveError(c *http.Conn, r *http.Request, relpath string, err os.Error) {
+ contents := applyTemplate(errorHTML, "errorHTML", err) // err may contain an absolute path!
+ servePage(c, "File "+relpath, "", contents)
+}
+
+
func exec(c *http.Conn, args []string) (status int) {
r, w, err := os.Pipe()
if err != nil {
@@ -162,9 +168,6 @@ func main() {
log.Stderrf("Go Documentation Server\n")
log.Stderrf("address = %s\n", *httpaddr)
log.Stderrf("goroot = %s\n", goroot)
- log.Stderrf("cmdroot = %s\n", cmdroot)
- log.Stderrf("pkgroot = %s\n", pkgroot)
- log.Stderrf("tmplroot = %s\n", tmplroot)
log.Stderrf("tabwidth = %d\n", *tabwidth)
if !fsMap.IsEmpty() {
log.Stderr("user-defined mapping:")