From 60482f06d03c75c48d1b22059fcd393610f0815d Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 24 Mar 2010 14:51:55 -0700 Subject: [PATCH] godoc: use http GET for remote search instead of rpc (this will allow the use of golang.org for remote searches) R=rsc CC=golang-dev https://golang.org/cl/734041 --- src/cmd/godoc/godoc.go | 28 +++++---------------- src/cmd/godoc/main.go | 56 +++++++++++++++++++----------------------- 2 files changed, 31 insertions(+), 53 deletions(-) diff --git a/src/cmd/godoc/godoc.go b/src/cmd/godoc/godoc.go index 861c2fa760..60a5c38641 100644 --- a/src/cmd/godoc/godoc.go +++ b/src/cmd/godoc/godoc.go @@ -1344,6 +1344,12 @@ func search(c *http.Conn, r *http.Request) { query := strings.TrimSpace(r.FormValue("q")) result := lookup(query) + if r.FormValue("f") == "text" { + contents := applyTemplate(searchText, "searchText", result) + serveText(c, contents) + return + } + var title string if result.Hit != nil { title = fmt.Sprintf(`Results for query %q`, query) @@ -1383,25 +1389,3 @@ func indexer() { time.Sleep(1 * 60e9) // try once a minute } } - - -// ---------------------------------------------------------------------------- -// IndexServer - -type Query struct { - Query string -} - - -type Result struct { - Result []byte -} - - -type IndexServer struct{} - - -func (s *IndexServer) Lookup(query *Query, result *Result) os.Error { - result.Result = applyTemplate(searchText, "searchText", lookup(query.Query)) - return nil -} diff --git a/src/cmd/godoc/main.go b/src/cmd/godoc/main.go index f90316dc45..3154c1f7e1 100644 --- a/src/cmd/godoc/main.go +++ b/src/cmd/godoc/main.go @@ -34,15 +34,11 @@ import ( "log" "os" pathutil "path" - "rpc" "runtime" "time" ) -const ( - defaultAddr = ":6060" // default webserver address - golangAddr = "golang.org:http" -) +const defaultAddr = ":6060" // default webserver address var ( // periodic sync @@ -158,30 +154,32 @@ func loggingHandler(h http.Handler) http.Handler { } -func remoteLookup(query string) (result *Result, err os.Error) { - var client *rpc.Client +func remoteSearch(query string) (res *http.Response, err os.Error) { + search := "/search?f=text&q=" + http.URLEscape(query) + + // list of addresses to try + var addrs []string if *serverAddr != "" { - // try server only - client, err = rpc.DialHTTP("tcp", *serverAddr) - if err != nil { - return - } + // explicit server address - only try this one + addrs = []string{*serverAddr} } else { - // try local default client first, followed by golang.org - client, err = rpc.DialHTTP("tcp", defaultAddr) - if err != nil { - log.Stderrf("trying %s (no local webserver found at %s)", golangAddr, defaultAddr) - client, err = rpc.Dial("tcp", golangAddr) - if err != nil { - return - } + addrs = []string{ + defaultAddr, + "golang.org", } } - result = new(Result) - err = client.Call("IndexServer.Lookup", &Query{query}, result) - if err != nil { - return nil, err + // remote search + for _, addr := range addrs { + url := "http://" + addr + search + res, _, err = http.Get(url) + if err == nil && res.StatusCode == http.StatusOK { + break + } + } + + if err == nil && res.StatusCode != http.StatusOK { + err = os.NewError(res.Status) } return @@ -256,10 +254,6 @@ func main() { // TODO(gri): Do we still need this? time.Sleep(1e9) - // Register index server. - rpc.Register(new(IndexServer)) - rpc.HandleHTTP() - // Start http server. if err := http.ListenAndServe(*httpAddr, handler); err != nil { log.Exitf("ListenAndServe %s: %v", *httpAddr, err) @@ -277,11 +271,11 @@ func main() { if *query { // Command-line queries. for i := 0; i < flag.NArg(); i++ { - result, err := remoteLookup(flag.Arg(i)) + res, err := remoteSearch(flag.Arg(i)) if err != nil { - log.Exitf("remoteLookup: %s", err) + log.Exitf("remoteSearch: %s", err) } - os.Stdout.Write(result.Result) + io.Copy(os.Stdout, res.Body) } return } -- 2.50.0