]> Cypherpunks repositories - gostls13.git/commitdiff
godoc: search GOPATH for documentation
authorAndrew Gerrand <adg@golang.org>
Sat, 2 Jul 2011 04:07:06 +0000 (14:07 +1000)
committerAndrew Gerrand <adg@golang.org>
Sat, 2 Jul 2011 04:07:06 +0000 (14:07 +1000)
R=rsc, mattn.jp
CC=golang-dev
https://golang.org/cl/4627065

src/cmd/godoc/godoc.go
src/cmd/godoc/main.go
src/cmd/godoc/mapping.go

index 8209781225a99c340319e5df627e3bf75f146062..20ebd318356f8a96dfebe2c62fa49b0cd7e84622 100644 (file)
@@ -9,6 +9,7 @@ import (
        "flag"
        "fmt"
        "go/ast"
+       "go/build"
        "go/doc"
        "go/printer"
        "go/token"
@@ -83,7 +84,15 @@ var (
 
 
 func initHandlers() {
-       fsMap.Init(*pkgPath)
+       paths := filepath.SplitList(*pkgPath)
+       for _, t := range build.Path {
+               if t.Goroot {
+                       continue
+               }
+               paths = append(paths, t.SrcDir())
+       }
+       fsMap.Init(paths)
+
        fileServer = http.FileServer(http.Dir(*goroot))
        cmdHandler = httpHandler{"/cmd/", filepath.Join(*goroot, "src", "cmd"), false}
        pkgHandler = httpHandler{"/pkg/", filepath.Join(*goroot, "src", "pkg"), true}
index 55f6031bc4aba14101bed0f2db7e3236c28cd534..51fcf8dd0592a85f693a1e5f7290fd9369b02129 100644 (file)
@@ -31,6 +31,7 @@ import (
        "flag"
        "fmt"
        "go/ast"
+       "go/build"
        "http"
        _ "http/pprof" // to serve /debug/pprof/*
        "io"
@@ -332,7 +333,10 @@ func main() {
        }
        relpath := path
        abspath := path
-       if !filepath.IsAbs(path) {
+       if t, pkg, err := build.FindTree(path); err == nil {
+               relpath = pkg
+               abspath = filepath.Join(t.SrcDir(), pkg)
+       } else if !filepath.IsAbs(path) {
                abspath = absolutePath(path, pkgHandler.fsRoot)
        } else {
                relpath = relativeURL(path)
index 73f1881a2d92d439adfdf9c749a0e57485606f94..83f34810cc072f3bda78d00c773b77dc154af64c 100644 (file)
@@ -59,10 +59,10 @@ type mapping struct {
 }
 
 
-// Init initializes the Mapping from a list of paths separated by
-// filepath.ListSeparator. Empty paths are ignored; relative paths
-// are assumed to be relative to the current working directory and
-// converted to absolute paths. For each path of the form:
+// Init initializes the Mapping from a list of paths.
+// Empty paths are ignored; relative paths are assumed to be relative to
+// the current working directory and converted to absolute paths.
+// For each path of the form:
 //
 //     dirname/localname
 //
@@ -80,8 +80,8 @@ type mapping struct {
 //     user   -> /home/user
 //     public -> /home/build/public
 //
-func (m *Mapping) Init(paths string) {
-       pathlist := canonicalizePaths(filepath.SplitList(paths), nil)
+func (m *Mapping) Init(paths []string) {
+       pathlist := canonicalizePaths(paths, nil)
        list := make([]mapping, len(pathlist))
 
        // create mapping list