diff options
Diffstat (limited to 'src/cmd/godoc/main.go')
-rw-r--r-- | src/cmd/godoc/main.go | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/src/cmd/godoc/main.go b/src/cmd/godoc/main.go index 89b12b9ac..74d3111ff 100644 --- a/src/cmd/godoc/main.go +++ b/src/cmd/godoc/main.go @@ -54,6 +54,9 @@ var ( // (with e.g.: zip -r go.zip $GOROOT -i \*.go -i \*.html -i \*.css -i \*.js -i \*.txt -i \*.c -i \*.h -i \*.s -i \*.png -i \*.jpg -i \*.sh -i favicon.ico) zipfile = flag.String("zip", "", "zip file providing the file system to serve; disabled if empty") + // file-based index + writeIndex = flag.Bool("write_index", false, "write index to a file; the file name must be specified with -index_files") + // periodic sync syncCmd = flag.String("sync", "", "sync command; disabled if empty") syncMin = flag.Int("sync_minutes", 0, "sync interval in minutes; disabled if <= 0") @@ -221,8 +224,8 @@ func main() { flag.Usage = usage flag.Parse() - // Check usage: either server and no args, or command line and args - if (*httpAddr != "") != (flag.NArg() == 0) { + // Check usage: either server and no args, command line and args, or index creation mode + if (*httpAddr != "") != (flag.NArg() == 0) && !*writeIndex { usage() } @@ -245,13 +248,48 @@ func main() { if err != nil { log.Fatalf("%s: %s\n", *zipfile, err) } + defer rc.Close() // be nice (e.g., -writeIndex mode) *goroot = path.Join("/", *goroot) // fsHttp paths are relative to '/' fs = NewZipFS(rc) fsHttp = NewHttpZipFS(rc, *goroot) } - initHandlers() readTemplates() + initHandlers() + + if (*indexEnabled || *writeIndex) && *indexFiles != "" && *maxResults > 0 { + log.Println("warning: no support for full-text index yet (setting -maxresults to 0)") + *maxResults = 0 + } + + if *writeIndex { + // Write search index and exit. + if *indexFiles == "" { + log.Fatal("no index file specified") + } + + log.Println("initialize file systems") + *verbose = true // want to see what happens + initFSTree() + initDirTrees() + + *indexThrottle = 1 + updateIndex() + + log.Println("writing index file", *indexFiles) + f, err := os.Create(*indexFiles) + if err != nil { + log.Fatal(err) + } + index, _ := searchIndex.get() + err = index.(*Index).Write(f) + if err != nil { + log.Fatal(err) + } + + log.Println("done") + return + } if *httpAddr != "" { // HTTP server mode. @@ -304,7 +342,7 @@ func main() { }() } - // Start indexing goroutine. + // Initialize search index. if *indexEnabled { go indexer() } |