]> Cypherpunks repositories - gostls13.git/commitdiff
godoc: use http GET for remote search instead of rpc
authorRobert Griesemer <gri@golang.org>
Wed, 24 Mar 2010 21:51:55 +0000 (14:51 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 24 Mar 2010 21:51:55 +0000 (14:51 -0700)
(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
src/cmd/godoc/main.go

index 861c2fa760448ebca1108190cd2d9fe69aa8c9d2..60a5c38641032f80a5db3b887f519882fb11445e 100644 (file)
@@ -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
-}
index f90316dc4576df3b5ed9c85330d98d7a1d4d0819..3154c1f7e12215bada4035fd9217ecb36cadb8e8 100644 (file)
@@ -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
        }