Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: go/src/infra/appengine/test-results/frontend/revision.go

Issue 2255433003: test-results: Add revisions handler (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Add missing return Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 package frontend
2
3 import (
4 "encoding/json"
5 "fmt"
6 "net/http"
7 "sync"
8
9 "golang.org/x/net/context"
10
11 "github.com/luci/gae/service/urlfetch"
12 "github.com/luci/luci-go/server/router"
13 )
14
15 // TODO(estaab): Comment copied from python implementation:
16 // Get rid of this one crrev.com supports this directly.
17 // See http://crbug.com/407198.
18
19 func revisionHandler(c *router.Context) {
20 type result struct {
21 hash string
22 err error
23 }
24 results := make([]result, 2)
25 wg := sync.WaitGroup{}
26 wg.Add(2)
27
28 go func() {
29 defer wg.Done()
30 hash, err := commitPositionToHash(c.Context, c.Request.FormValue ("start"))
31 results[0] = result{hash, err}
32 }()
33 go func() {
34 defer wg.Done()
35 hash, err := commitPositionToHash(c.Context, c.Request.FormValue ("end"))
36 results[1] = result{hash, err}
37 }()
38
39 wg.Wait()
40 for _, r := range results {
41 if r.err != nil {
42 http.Error(c.Writer, r.err.Error(), http.StatusInternalS erverError)
43 return
44 }
45 }
46
47 http.Redirect(c.Writer, c.Request, fmt.Sprintf(
48 "https://chromium.googlesource.com/chromium/src/+log/%s^..%s?pre tty=fuller",
49 results[0].hash,
50 results[1].hash,
51 ), http.StatusMovedPermanently)
nishanths 2016/08/16 22:56:36 Used permanent redirect because that is the defaul
52 }
53
54 var (
55 // crRevURL is the URL used by commitPositionToHash.
56 // It is global to allow switching in tests.
57 crRevURL = "https://cr-rev.appspot.com/_ah/api/crrev/v1/redirect"
58
59 // makeCrRevClient returns a HTTP client for use by commitPositionToHash .
60 // It is global to allow switching in tests.
61 makeCrRevClient = func(c context.Context) *http.Client {
62 return &http.Client{Transport: urlfetch.Get(c)}
63 }
64 )
65
66 func commitPositionToHash(c context.Context, pos string) (string, error) {
67 client := makeCrRevClient(c)
68 resp, err := client.Get(crRevURL + "/" + pos)
69 if err != nil {
70 return "", err
71 }
72 defer resp.Body.Close()
73
74 if resp.StatusCode != http.StatusOK {
75 return "", fmt.Errorf("HTTP status code %d from %s", resp.Status Code, resp.Request.URL)
76 }
77
78 hash := struct {
79 Hash string `json:"git_sha"`
80 }{}
81 if err := json.NewDecoder(resp.Body).Decode(&hash); err != nil {
82 return "", err
83 }
84 return hash.Hash, nil
85 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698