aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/api/goapi.go23
-rw-r--r--src/cmd/api/goapi_test.go3
-rw-r--r--src/cmd/godoc/godoc.go28
-rw-r--r--src/cmd/godoc/main.go6
4 files changed, 28 insertions, 32 deletions
diff --git a/src/cmd/api/goapi.go b/src/cmd/api/goapi.go
index ee0f92328e..fe9c862f4f 100644
--- a/src/cmd/api/goapi.go
+++ b/src/cmd/api/goapi.go
@@ -74,16 +74,10 @@ func main() {
pkgs = strings.Fields(string(stds))
}
- tree, _, err := build.FindTree("os") // some known package
- if err != nil {
- log.Fatalf("failed to find tree: %v", err)
- }
-
var featureCtx = make(map[string]map[string]bool) // feature -> context name -> true
for _, context := range contexts {
w := NewWalker()
w.context = context
- w.tree = tree
for _, pkg := range pkgs {
w.wantedPkg[pkg] = true
@@ -95,7 +89,7 @@ func main() {
strings.HasPrefix(pkg, "old/") {
continue
}
- if !tree.HasSrc(pkg) {
+ if fi, err := os.Stat(filepath.Join(w.root, pkg)); err != nil || !fi.IsDir() {
log.Fatalf("no source in tree for package %q", pkg)
}
w.WalkPackage(pkg)
@@ -165,7 +159,7 @@ type pkgSymbol struct {
type Walker struct {
context *build.Context
- tree *build.Tree
+ root string
fset *token.FileSet
scope []string
features map[string]bool // set
@@ -191,6 +185,7 @@ func NewWalker() *Walker {
selectorFullPkg: make(map[string]string),
wantedPkg: make(map[string]bool),
prevConstType: make(map[pkgSymbol]string),
+ root: filepath.Join(build.Default.GOROOT, "src/pkg"),
}
}
@@ -252,15 +247,13 @@ func (w *Walker) WalkPackage(name string) {
defer func() {
w.packageState[name] = loaded
}()
- dir := filepath.Join(w.tree.SrcDir(), filepath.FromSlash(name))
+ dir := filepath.Join(w.root, filepath.FromSlash(name))
- var info *build.DirInfo
- var err error
- if ctx := w.context; ctx != nil {
- info, err = ctx.ScanDir(dir)
- } else {
- info, err = build.ScanDir(dir)
+ ctxt := w.context
+ if ctxt == nil {
+ ctxt = &build.Default
}
+ info, err := ctxt.ImportDir(dir, 0)
if err != nil {
if strings.Contains(err.Error(), "no Go source files") {
return
diff --git a/src/cmd/api/goapi_test.go b/src/cmd/api/goapi_test.go
index dbbec46b0d..c7cc601b1a 100644
--- a/src/cmd/api/goapi_test.go
+++ b/src/cmd/api/goapi_test.go
@@ -7,7 +7,6 @@ package main
import (
"flag"
"fmt"
- "go/build"
"io/ioutil"
"os"
"path/filepath"
@@ -36,7 +35,7 @@ func TestGolden(t *testing.T) {
w := NewWalker()
w.wantedPkg[fi.Name()] = true
- w.tree = &build.Tree{Path: "testdata", Goroot: true}
+ w.root = "testdata/src/pkg"
goldenFile := filepath.Join("testdata", "src", "pkg", fi.Name(), "golden.txt")
w.WalkPackage(fi.Name())
diff --git a/src/cmd/godoc/godoc.go b/src/cmd/godoc/godoc.go
index 1f212a0bcd..e5f7a73d4f 100644
--- a/src/cmd/godoc/godoc.go
+++ b/src/cmd/godoc/godoc.go
@@ -15,6 +15,7 @@ import (
"go/printer"
"go/token"
"io"
+ "io/ioutil"
"log"
"net/http"
"net/url"
@@ -90,11 +91,11 @@ var (
func initHandlers() {
paths := filepath.SplitList(*pkgPath)
- for _, t := range build.Path {
- if t.Goroot {
- continue
+ gorootSrc := filepath.Join(build.Default.GOROOT, "src", "pkg")
+ for _, p := range build.Default.SrcDirs() {
+ if p != gorootSrc {
+ paths = append(paths, p)
}
- paths = append(paths, t.SrcDir())
}
fsMap.Init(paths)
@@ -1002,11 +1003,13 @@ func fsReadDir(dir string) ([]os.FileInfo, error) {
return fs.ReadDir(dir)
}
-// fsReadFile implements ReadFile for the go/build package.
-func fsReadFile(dir, name string) (path string, data []byte, err error) {
- path = filepath.Join(dir, name)
- data, err = ReadFile(fs, path)
- return
+// fsOpenFile implements OpenFile for the go/build package.
+func fsOpenFile(name string) (r io.ReadCloser, err error) {
+ data, err := ReadFile(fs, name)
+ if err != nil {
+ return nil, err
+ }
+ return ioutil.NopCloser(bytes.NewReader(data)), nil
}
func inList(name string, list []string) bool {
@@ -1039,10 +1042,11 @@ func (h *httpHandler) getPageInfo(abspath, relpath, pkgname string, mode PageInf
// To use different pair, such as if we allowed the user
// to choose, set ctxt.GOOS and ctxt.GOARCH before
// calling ctxt.ScanDir.
- ctxt := build.DefaultContext
+ ctxt := build.Default
+ ctxt.IsAbsPath = path.IsAbs
ctxt.ReadDir = fsReadDir
- ctxt.ReadFile = fsReadFile
- dir, err := ctxt.ScanDir(abspath)
+ ctxt.OpenFile = fsOpenFile
+ dir, err := ctxt.ImportDir(abspath, 0)
if err == nil {
pkgFiles = append(dir.GoFiles, dir.CgoFiles...)
}
diff --git a/src/cmd/godoc/main.go b/src/cmd/godoc/main.go
index ee905bb7a0..5f42105393 100644
--- a/src/cmd/godoc/main.go
+++ b/src/cmd/godoc/main.go
@@ -388,9 +388,9 @@ func main() {
}
relpath := path
abspath := path
- if t, pkg, err := build.FindTree(path); err == nil {
- relpath = pkg
- abspath = filepath.Join(t.SrcDir(), pkg)
+ if bp, _ := build.Import(path, "", build.FindOnly); bp.Dir != "" && bp.ImportPath != "" {
+ relpath = bp.ImportPath
+ abspath = bp.Dir
} else if !filepath.IsAbs(path) {
abspath = absolutePath(path, pkgHandler.fsRoot)
} else {