From bd7f39a7ac4941d6bb7bf6202b1d0a1bdd6b1ed8 Mon Sep 17 00:00:00 2001 From: Zachary Gershman Date: Fri, 23 Feb 2018 16:24:26 +0000 Subject: [PATCH] [release-branch.go1.10] godoc/dl: provide JSON feed of releases This addresses the build errors that caused a revert of the original PR golang/tools#21 Fixes golang/go#23746 GitHub-Last-Rev: 6606c0b63afb4f1043b2aa2dc640edda4cf9afe8 GitHub-Pull-Request: golang/tools#25 Change-Id: Ic5a7e3054d182dc2041d2966ca68960c3abd7620 Reviewed-on: https://go-review.googlesource.com/96178 Reviewed-by: Brad Fitzpatrick (cherry picked from commit 86e0f6745d8a45a468e22d7c226fa789fdde1d3e) Reviewed-on: https://go-review.googlesource.com/102795 Run-TryBot: Andrew Bonventre TryBot-Result: Gobot Gobot Reviewed-by: Andrew Bonventre --- godoc/dl/dl.go | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/godoc/dl/dl.go b/godoc/dl/dl.go index 977ba983..f5e63208 100644 --- a/godoc/dl/dl.go +++ b/godoc/dl/dl.go @@ -48,15 +48,15 @@ func RegisterHandlers(mux *http.ServeMux) { } type File struct { - Filename string - OS string - Arch string - Version string - Checksum string `datastore:",noindex"` // SHA1; deprecated - ChecksumSHA256 string `datastore:",noindex"` - Size int64 `datastore:",noindex"` - Kind string // "archive", "installer", "source" - Uploaded time.Time + Filename string `json:"filename"` + OS string `json:"os"` + Arch string `json:"arch"` + Version string `json:"-"` + Checksum string `json:"-" datastore:",noindex"` // SHA1; deprecated + ChecksumSHA256 string `json:"sha256" datastore:",noindex"` + Size int64 `json:"size" datastore:",noindex"` + Kind string `json:"kind"` // "archive", "installer", "source" + Uploaded time.Time `json:"-"` } func (f File) ChecksumType() string { @@ -137,11 +137,11 @@ func (f File) URL() string { } type Release struct { - Version string - Stable bool - Files []File - Visible bool // show files on page load - SplitPortTable bool // whether files should be split by primary/other ports. + Version string `json:"version"` + Stable bool `json:"stable"` + Files []File `json:"files"` + Visible bool `json:"-"` // show files on page load + SplitPortTable bool `json:"-"` // whether files should be split by primary/other ports. } type Feature struct { @@ -221,6 +221,17 @@ func listHandler(w http.ResponseWriter, r *http.Request) { log.Errorf(c, "cache set error: %v", err) } } + + if r.URL.Query().Get("mode") == "json" { + w.Header().Set("Content-Type", "application/json") + enc := json.NewEncoder(w) + enc.SetIndent("", " ") + if err := enc.Encode(d.Stable); err != nil { + log.Errorf(c, "failed rendering JSON for releases: %v", err) + } + return + } + if err := listTemplate.ExecuteTemplate(w, "root", d); err != nil { log.Errorf(c, "error executing template: %v", err) }