aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2011-02-24 16:24:51 -0800
committerRobert Griesemer <gri@golang.org>2011-02-24 16:24:51 -0800
commit27ccb41c4a12e10055e6654a4b26c35040bef98c (patch)
treedc9c13fd6bf627ff4f7a5bfc51113a0608af5ac5
parent176eb49d9cd8f1c27cc08d7203529114b1888022 (diff)
downloadgo-27ccb41c4a12e10055e6654a4b26c35040bef98c.tar.gz
go-27ccb41c4a12e10055e6654a4b26c35040bef98c.zip
godoc: accept symbolic links as path names provided to -path
When providing addition file systems to godoc via -path, the path names may be symbolic links. Follow them. Also: better logging of error and special conditions. R=r, dsymonds, r2 CC=golang-dev https://golang.org/cl/4217045
-rw-r--r--src/cmd/godoc/dirtrees.go21
-rw-r--r--src/cmd/godoc/godoc.go7
2 files changed, 22 insertions, 6 deletions
diff --git a/src/cmd/godoc/dirtrees.go b/src/cmd/godoc/dirtrees.go
index edb4a169d1..d6d88c2f9a 100644
--- a/src/cmd/godoc/dirtrees.go
+++ b/src/cmd/godoc/dirtrees.go
@@ -12,6 +12,7 @@ import (
"go/parser"
"go/token"
"io/ioutil"
+ "log"
"os"
pathutil "path"
"strings"
@@ -100,7 +101,13 @@ func (b *treeBuilder) newDirTree(fset *token.FileSet, path, name string, depth i
return &Directory{depth, path, name, "", nil}
}
- list, _ := ioutil.ReadDir(path) // ignore errors
+ list, err := ioutil.ReadDir(path)
+ if err != nil {
+ // newDirTree is called with a path that should be a package
+ // directory; errors here should not happen, but if they do,
+ // we want to know about them
+ log.Printf("ioutil.ReadDir(%s): %s", path, err)
+ }
// determine number of subdirectories and if there are package files
ndirs := 0
@@ -188,8 +195,16 @@ func (b *treeBuilder) newDirTree(fset *token.FileSet, path, name string, depth i
// (i.e., in this case the tree may contain directories w/o any package files).
//
func newDirectory(root string, pathFilter func(string) bool, maxDepth int) *Directory {
- d, err := os.Lstat(root)
- if err != nil || !isPkgDir(d) {
+ // The root could be a symbolic link so use os.Stat not os.Lstat.
+ d, err := os.Stat(root)
+ // If we fail here, report detailed error messages; otherwise
+ // is is hard to see why a directory tree was not built.
+ switch {
+ case err != nil:
+ log.Printf("newDirectory(%s): %s", root, err)
+ return nil
+ case !isPkgDir(d):
+ log.Printf("newDirectory(%s): not a package directory", root)
return nil
}
if maxDepth < 0 {
diff --git a/src/cmd/godoc/godoc.go b/src/cmd/godoc/godoc.go
index 957935125e..efb386f06e 100644
--- a/src/cmd/godoc/godoc.go
+++ b/src/cmd/godoc/godoc.go
@@ -213,9 +213,10 @@ func initDirTrees() {
if *filter != "" {
list, err := readDirList(*filter)
if err != nil {
- log.Printf("%s", err)
- } else if len(list) == 0 {
- log.Printf("no directory paths in file %s", *filter)
+ log.Printf("readDirList(%s): %s", *filter, err)
+ }
+ if *verbose || len(list) == 0 {
+ log.Printf("found %d directory paths in file %s", len(list), *filter)
}
setPathFilter(list)
}