diff options
Diffstat (limited to 'misc/dashboard/builder/package.go')
-rw-r--r-- | misc/dashboard/builder/package.go | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/misc/dashboard/builder/package.go b/misc/dashboard/builder/package.go index ee65d7669..b6674428d 100644 --- a/misc/dashboard/builder/package.go +++ b/misc/dashboard/builder/package.go @@ -10,35 +10,47 @@ import ( "go/token" "log" "os" - "path" + "path/filepath" + "strings" ) +const MaxCommentLength = 500 // App Engine won't store more in a StringProperty. + func (b *Builder) buildPackages(workpath string, hash string) os.Error { pkgs, err := packages() if err != nil { return err } for _, p := range pkgs { - goroot := path.Join(workpath, "go") - goinstall := path.Join(goroot, "bin", "goinstall") + goroot := filepath.Join(workpath, "go") + gobin := filepath.Join(goroot, "bin") + goinstall := filepath.Join(gobin, "goinstall") envv := append(b.envv(), "GOROOT="+goroot) + // add GOBIN to path + for i, v := range envv { + if strings.HasPrefix(v, "PATH=") { + p := filepath.SplitList(v[5:]) + p = append([]string{gobin}, p...) + s := strings.Join(p, string(filepath.ListSeparator)) + envv[i] = "PATH=" + s + } + } + // goinstall - buildLog, code, err := runLog(envv, "", goroot, goinstall, p) + buildLog, code, err := runLog(envv, "", goroot, goinstall, "-log=false", p) if err != nil { log.Printf("goinstall %v: %v", p, err) - continue } - built := code != 0 // get doc comment from package source - info, err := packageComment(p, path.Join(goroot, "pkg", p)) + info, err := packageComment(p, filepath.Join(goroot, "src", "pkg", p)) if err != nil { - log.Printf("goinstall %v: %v", p, err) + log.Printf("packageComment %v: %v", p, err) } // update dashboard with build state + info - err = b.updatePackage(p, built, buildLog, info, hash) + err = b.updatePackage(p, code == 0, buildLog, info) if err != nil { log.Printf("updatePackage %v: %v", p, err) } @@ -46,9 +58,15 @@ func (b *Builder) buildPackages(workpath string, hash string) os.Error { return nil } +func isGoFile(fi *os.FileInfo) bool { + return fi.IsRegular() && // exclude directories + !strings.HasPrefix(fi.Name, ".") && // ignore .files + filepath.Ext(fi.Name) == ".go" +} + func packageComment(pkg, pkgpath string) (info string, err os.Error) { fset := token.NewFileSet() - pkgs, err := parser.ParseDir(fset, pkgpath, nil, parser.PackageClauseOnly|parser.ParseComments) + pkgs, err := parser.ParseDir(fset, pkgpath, isGoFile, parser.PackageClauseOnly|parser.ParseComments) if err != nil { return } @@ -62,5 +80,15 @@ func packageComment(pkg, pkgpath string) (info string, err os.Error) { pdoc := doc.NewPackageDoc(pkgs[name], pkg) info = pdoc.Doc } + // grab only first paragraph + if parts := strings.SplitN(info, "\n\n", 2); len(parts) > 1 { + info = parts[0] + } + // replace newlines with spaces + info = strings.Replace(info, "\n", " ", -1) + // truncate + if len(info) > MaxCommentLength { + info = info[:MaxCommentLength] + } return } |