diff options
42 files changed, 558 insertions, 361 deletions
diff --git a/.travis.yml b/.travis.yml index 834bfb9..05cff4c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,18 +18,19 @@ matrix: before_install: - go get -v github.com/golang/lint/golint + - go install ./cmd/dbinit + +install: + - go version before_script: - - go run ./cmd/dbinit/dbinit.go -db_user user -db_password passwd - - go run ./cmd/dbinit/dbinit.go -db_type mongo -admin_user '' -db_user user -db_password passwd + - dbinit -db_user user -db_password passwd + - dbinit -db_type mongo -admin_user '' -db_user user -db_password passwd sudo: false script: - - go build -v ./... + - go build -v ./cmd/cashier ./cmd/cashierd - go list ./... |grep -v vendor/ |xargs go test - gofmt -d $(find -type f -name '*.go' -not -path './vendor/*') - go list ./... |grep -v vendor/ |xargs go vet - go list ./... |grep -v vendor/ |xargs -L1 golint -set_exit_status - -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go index 82f76c4..c87a0c2 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/version.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.4.4" +const SDKVersion = "1.4.6" diff --git a/vendor/github.com/go-ini/ini/ini.go b/vendor/github.com/go-ini/ini/ini.go index 763f998..cd065e7 100644 --- a/vendor/github.com/go-ini/ini/ini.go +++ b/vendor/github.com/go-ini/ini/ini.go @@ -36,7 +36,7 @@ const ( // Maximum allowed depth when recursively substituing variable names. _DEPTH_VALUES = 99 - _VERSION = "1.21.0" + _VERSION = "1.21.1" ) // Version returns current package version literal. diff --git a/vendor/github.com/go-ini/ini/struct.go b/vendor/github.com/go-ini/ini/struct.go index eddf7a0..d00fb4b 100644 --- a/vendor/github.com/go-ini/ini/struct.go +++ b/vendor/github.com/go-ini/ini/struct.go @@ -209,7 +209,8 @@ func (s *Section) mapTo(val reflect.Value) error { continue } - fieldName := s.parseFieldName(tpField.Name, tag) + opts := strings.SplitN(tag, ",", 2) // strip off possible omitempty + fieldName := s.parseFieldName(tpField.Name, opts[0]) if len(fieldName) == 0 || !field.CanSet() { continue } diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go index 8b16f95..2ed1cf5 100644 --- a/vendor/github.com/golang/protobuf/proto/equal.go +++ b/vendor/github.com/golang/protobuf/proto/equal.go @@ -54,13 +54,17 @@ Equality is defined in this way: in a proto3 .proto file, fields are not "set"; specifically, zero length proto3 "bytes" fields are equal (nil == {}). - Two repeated fields are equal iff their lengths are the same, - and their corresponding elements are equal (a "bytes" field, - although represented by []byte, is not a repeated field) + and their corresponding elements are equal. Note a "bytes" field, + although represented by []byte, is not a repeated field and the + rule for the scalar fields described above applies. - Two unset fields are equal. - Two unknown field sets are equal if their current encoded state is equal. - Two extension sets are equal iff they have corresponding elements that are pairwise equal. + - Two map fields are equal iff their lengths are the same, + and they contain the same set of elements. Zero-length map + fields are equal. - Every other combination of things are not equal. The return value is undefined if a and b are not protocol buffers. diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go index 69ddda8..ec2289c 100644 --- a/vendor/github.com/golang/protobuf/proto/properties.go +++ b/vendor/github.com/golang/protobuf/proto/properties.go @@ -844,7 +844,15 @@ func RegisterType(x Message, name string) { } // MessageName returns the fully-qualified proto name for the given message type. -func MessageName(x Message) string { return revProtoTypes[reflect.TypeOf(x)] } +func MessageName(x Message) string { + type xname interface { + XXX_MessageName() string + } + if m, ok := x.(xname); ok { + return m.XXX_MessageName() + } + return revProtoTypes[reflect.TypeOf(x)] +} // MessageType returns the message type (pointer to struct) for a named message. func MessageType(name string) reflect.Type { return protoTypes[name] } diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go index 7e6f145..4fd0531 100644 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ b/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -792,12 +792,12 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) return p.readAny(fv.Index(fv.Len()-1), props) case reflect.Bool: - // Either "true", "false", 1 or 0. + // true/1/t/True or false/f/0/False. switch tok.value { - case "true", "1": + case "true", "1", "t", "True": fv.SetBool(true) return nil - case "false", "0": + case "false", "0", "f", "False": fv.SetBool(false) return nil } diff --git a/vendor/github.com/google/go-github/github/gists.go b/vendor/github.com/google/go-github/github/gists.go index 697fcb5..a3327f8 100644 --- a/vendor/github.com/google/go-github/github/gists.go +++ b/vendor/github.com/google/go-github/github/gists.go @@ -42,6 +42,7 @@ type GistFilename string type GistFile struct { Size *int `json:"size,omitempty"` Filename *string `json:"filename,omitempty"` + Type *string `json:"type,omitempty"` RawURL *string `json:"raw_url,omitempty"` Content *string `json:"content,omitempty"` } diff --git a/vendor/github.com/google/go-github/github/search.go b/vendor/github.com/google/go-github/github/search.go index 916a2dc..579a57d 100644 --- a/vendor/github.com/google/go-github/github/search.go +++ b/vendor/github.com/google/go-github/github/search.go @@ -70,7 +70,7 @@ func (s *SearchService) Issues(query string, opt *SearchOptions) (*IssuesSearchR return result, resp, err } -// UsersSearchResult represents the result of an issues search. +// UsersSearchResult represents the result of a users search. type UsersSearchResult struct { Total *int `json:"total_count,omitempty"` IncompleteResults *bool `json:"incomplete_results,omitempty"` @@ -105,7 +105,7 @@ func (tm TextMatch) String() string { return Stringify(tm) } -// CodeSearchResult represents the result of an code search. +// CodeSearchResult represents the result of a code search. type CodeSearchResult struct { Total *int `json:"total_count,omitempty"` IncompleteResults *bool `json:"incomplete_results,omitempty"` diff --git a/vendor/github.com/gorilla/csrf/doc.go b/vendor/github.com/gorilla/csrf/doc.go index 612c8d9..e0bf408 100644 --- a/vendor/github.com/gorilla/csrf/doc.go +++ b/vendor/github.com/gorilla/csrf/doc.go @@ -74,6 +74,8 @@ in order to protect malicious POST requests being made: // Add the middleware to your router by wrapping it. http.ListenAndServe(":8000", csrf.Protect([]byte("32-byte-long-auth-key"))(r)) + // PS: Don't forget to pass csrf.Secure(false) if you're developing locally + // over plain HTTP (just don't leave it on in production). } func ShowSignupForm(w http.ResponseWriter, r *http.Request) { diff --git a/vendor/github.com/gorilla/mux/mux.go b/vendor/github.com/gorilla/mux/mux.go index 3263a00..d66ec38 100644 --- a/vendor/github.com/gorilla/mux/mux.go +++ b/vendor/github.com/gorilla/mux/mux.go @@ -53,6 +53,8 @@ type Router struct { // This has no effect when go1.7+ is used, since the context is stored // on the request itself. KeepContext bool + // see Router.UseEncodedPath(). This defines a flag for all routes. + useEncodedPath bool } // Match matches registered routes against the request. @@ -77,7 +79,10 @@ func (r *Router) Match(req *http.Request, match *RouteMatch) bool { // mux.Vars(request). func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { if !r.skipClean { - path := getPath(req) + path := req.URL.Path + if r.useEncodedPath { + path = getPath(req) + } // Clean path to canonical form and redirect. if p := cleanPath(path); p != path { @@ -152,6 +157,21 @@ func (r *Router) SkipClean(value bool) *Router { return r } +// UseEncodedPath tells the router to match the encoded original path +// to the routes. +// For eg. "/path/foo%2Fbar/to" will match the path "/path/{var}/to". +// This behavior has the drawback of needing to match routes against +// r.RequestURI instead of r.URL.Path. Any modifications (such as http.StripPrefix) +// to r.URL.Path will not affect routing when this flag is on and thus may +// induce unintended behavior. +// +// If not called, the router will match the unencoded path to the routes. +// For eg. "/path/foo%2Fbar/to" will match the path "/path/foo/bar/to" +func (r *Router) UseEncodedPath() *Router { + r.useEncodedPath = true + return r +} + // ---------------------------------------------------------------------------- // parentRoute // ---------------------------------------------------------------------------- @@ -189,7 +209,7 @@ func (r *Router) buildVars(m map[string]string) map[string]string { // NewRoute registers an empty route. func (r *Router) NewRoute() *Route { - route := &Route{parent: r, strictSlash: r.strictSlash, skipClean: r.skipClean} + route := &Route{parent: r, strictSlash: r.strictSlash, skipClean: r.skipClean, useEncodedPath: r.useEncodedPath} r.routes = append(r.routes, route) return route } diff --git a/vendor/github.com/gorilla/mux/regexp.go b/vendor/github.com/gorilla/mux/regexp.go index 99d41a8..fd8fe39 100644 --- a/vendor/github.com/gorilla/mux/regexp.go +++ b/vendor/github.com/gorilla/mux/regexp.go @@ -24,7 +24,7 @@ import ( // Previously we accepted only Python-like identifiers for variable // names ([a-zA-Z_][a-zA-Z0-9_]*), but currently the only restriction is that // name and pattern can't be empty, and names can't contain a colon. -func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash bool) (*routeRegexp, error) { +func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash, useEncodedPath bool) (*routeRegexp, error) { // Check if it is well-formed. idxs, errBraces := braceIndices(tpl) if errBraces != nil { @@ -111,14 +111,15 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash } // Done! return &routeRegexp{ - template: template, - matchHost: matchHost, - matchQuery: matchQuery, - strictSlash: strictSlash, - regexp: reg, - reverse: reverse.String(), - varsN: varsN, - varsR: varsR, + template: template, + matchHost: matchHost, + matchQuery: matchQuery, + strictSlash: strictSlash, + useEncodedPath: useEncodedPath, + regexp: reg, + reverse: reverse.String(), + varsN: varsN, + varsR: varsR, }, nil } @@ -133,6 +134,9 @@ type routeRegexp struct { matchQuery bool // The strictSlash value defined on the route, but disabled if PathPrefix was used. strictSlash bool + // Determines whether to use encoded path from getPath function or unencoded + // req.URL.Path for path matching + useEncodedPath bool // Expanded regexp. regexp *regexp.Regexp // Reverse template. @@ -149,7 +153,10 @@ func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool { if r.matchQuery { return r.matchQueryString(req) } - path := getPath(req) + path := req.URL.Path + if r.useEncodedPath { + path = getPath(req) + } return r.regexp.MatchString(path) } @@ -253,7 +260,10 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) extractVars(host, matches, v.host.varsN, m.Vars) } } - path := getPath(req) + path := req.URL.Path + if r.useEncodedPath { + path = getPath(req) + } // Store path variables. if v.path != nil { matches := v.path.regexp.FindStringSubmatchIndex(path) @@ -300,14 +310,7 @@ func getHost(r *http.Request) string { } func extractVars(input string, matches []int, names []string, output map[string]string) { - matchesCount := 0 - prevEnd := -1 - for i := 2; i < len(matches) && matchesCount < len(names); i += 2 { - if prevEnd < matches[i+1] { - value := input[matches[i]:matches[i+1]] - output[names[matchesCount]] = value - prevEnd = matches[i+1] - matchesCount++ - } + for i, name := range names { + output[name] = input[matches[2*i+2]:matches[2*i+3]] } } diff --git a/vendor/github.com/gorilla/mux/route.go b/vendor/github.com/gorilla/mux/route.go index 6c53f9f..293b6d4 100644 --- a/vendor/github.com/gorilla/mux/route.go +++ b/vendor/github.com/gorilla/mux/route.go @@ -29,6 +29,8 @@ type Route struct { // If true, when the path pattern is "/path//to", accessing "/path//to" // will not redirect skipClean bool + // If true, "/path/foo%2Fbar/to" will match the path "/path/{var}/to" + useEncodedPath bool // If true, this route never matches: it is only used to build URLs. buildOnly bool // The name used to build URLs. @@ -158,7 +160,7 @@ func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix, matchQuery tpl = strings.TrimRight(r.regexp.path.template, "/") + tpl } } - rr, err := newRouteRegexp(tpl, matchHost, matchPrefix, matchQuery, r.strictSlash) + rr, err := newRouteRegexp(tpl, matchHost, matchPrefix, matchQuery, r.strictSlash, r.useEncodedPath) if err != nil { return err } diff --git a/vendor/github.com/hashicorp/hcl/README.md b/vendor/github.com/hashicorp/hcl/README.md index e292d59..c822332 100644 --- a/vendor/github.com/hashicorp/hcl/README.md +++ b/vendor/github.com/hashicorp/hcl/README.md @@ -103,6 +103,16 @@ variable "ami" { description = "the AMI to use" } ``` +This would be equivalent to the following json: +``` json +{ + "variable": { + "ami": { + "description": "the AMI to use" + } + } +} +``` ## Thanks diff --git a/vendor/github.com/hashicorp/hcl/hcl/ast/ast.go b/vendor/github.com/hashicorp/hcl/hcl/ast/ast.go index 692ac24..ea3734f 100644 --- a/vendor/github.com/hashicorp/hcl/hcl/ast/ast.go +++ b/vendor/github.com/hashicorp/hcl/hcl/ast/ast.go @@ -214,4 +214,5 @@ func (c *CommentGroup) Pos() token.Pos { // GoStringer //------------------------------------------------------------------- -func (o *ObjectKey) GoString() string { return fmt.Sprintf("*%#v", *o) } +func (o *ObjectKey) GoString() string { return fmt.Sprintf("*%#v", *o) } +func (o *ObjectList) GoString() string { return fmt.Sprintf("*%#v", *o) } diff --git a/vendor/github.com/hashicorp/hcl/hcl/scanner/scanner.go b/vendor/github.com/hashicorp/hcl/hcl/scanner/scanner.go index b204165..0735d95 100644 --- a/vendor/github.com/hashicorp/hcl/hcl/scanner/scanner.go +++ b/vendor/github.com/hashicorp/hcl/hcl/scanner/scanner.go @@ -224,6 +224,11 @@ func (s *Scanner) Scan() token.Token { func (s *Scanner) scanComment(ch rune) { // single line comments if ch == '#' || (ch == '/' && s.peek() != '*') { + if ch == '/' && s.peek() != '/' { + s.err("expected '/' for comment") + return + } + ch = s.next() for ch != '\n' && ch >= 0 && ch != eof { ch = s.next() diff --git a/vendor/github.com/hashicorp/hcl/json/scanner/scanner.go b/vendor/github.com/hashicorp/hcl/json/scanner/scanner.go index 477f71f..dd5c72b 100644 --- a/vendor/github.com/hashicorp/hcl/json/scanner/scanner.go +++ b/vendor/github.com/hashicorp/hcl/json/scanner/scanner.go @@ -296,7 +296,7 @@ func (s *Scanner) scanString() { return } - if ch == '"' && braces == 0 { + if ch == '"' { break } diff --git a/vendor/github.com/sid77/drop/README.md b/vendor/github.com/sid77/drop/README.md index b27fc1a..3bea83c 100644 --- a/vendor/github.com/sid77/drop/README.md +++ b/vendor/github.com/sid77/drop/README.md @@ -1,12 +1,15 @@ # drop -An easy way for dropping privileges in Go. Just import `github.com/sid77/drop` and use: +An easy way for dropping privileges in Go. + ``` +import "github.com/sid77/drop" + // privileged code here // ... -if err := DropPrivileges("some user"); err != nil { +if err := drop.DropPrivileges("some user"); err != nil { log.Fatal(err) } diff --git a/vendor/github.com/spf13/viper/README.md b/vendor/github.com/spf13/viper/README.md index 4ebd8dd..cf17560 100644 --- a/vendor/github.com/spf13/viper/README.md +++ b/vendor/github.com/spf13/viper/README.md @@ -10,7 +10,7 @@ Many Go projects are built using Viper including: * [Nanobox](https://github.com/nanobox-io/nanobox)/[Nanopack](https://github.com/nanopack) * [Docker Notary](https://github.com/docker/Notary) * [BloomApi](https://www.bloomapi.com/) -* [doctl(https://github.com/digitalocean/doctl) +* [doctl](https://github.com/digitalocean/doctl) [![Build Status](https://travis-ci.org/spf13/viper.svg)](https://travis-ci.org/spf13/viper) [![Join the chat at https://gitter.im/spf13/viper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/spf13/viper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) @@ -110,7 +110,7 @@ Gone are the days of needing to restart a server to have a config take effect, viper powered applications can read an update to a config file while running and not miss a beat. -Simply tell the viper instance to watchConfig. +Simply tell the viper instance to watchConfig. Optionally you can provide a function for Viper to run each time a change occurs. **Make sure you add all of the configPaths prior to calling `WatchConfig()`** @@ -298,7 +298,7 @@ type myFlagSet struct { func (f myFlagSet) VisitAll(fn func(FlagValue)) { for _, flag := range flags { - fn(flag) + fn(flag) } } ``` diff --git a/vendor/golang.org/x/net/http2/go17_not18.go b/vendor/golang.org/x/net/http2/go17_not18.go new file mode 100644 index 0000000..b4c52ec --- /dev/null +++ b/vendor/golang.org/x/net/http2/go17_not18.go @@ -0,0 +1,36 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7,!go1.8 + +package http2 + +import "crypto/tls" + +// temporary copy of Go 1.7's private tls.Config.clone: +func cloneTLSConfig(c *tls.Config) *tls.Config { + return &tls.Config{ + Rand: c.Rand, + Time: c.Time, + Certificates: c.Certificates, + NameToCertificate: c.NameToCertificate, + GetCertificate: c.GetCertificate, + RootCAs: c.RootCAs, + NextProtos: c.NextProtos, + ServerName: c.ServerName, + ClientAuth: c.ClientAuth, + ClientCAs: c.ClientCAs, + InsecureSkipVerify: c.InsecureSkipVerify, + CipherSuites: c.CipherSuites, + PreferServerCipherSuites: c.PreferServerCipherSuites, + SessionTicketsDisabled: c.SessionTicketsDisabled, + SessionTicketKey: c.SessionTicketKey, + ClientSessionCache: c.ClientSessionCache, + MinVersion: c.MinVersion, + MaxVersion: c.MaxVersion, + CurvePreferences: c.CurvePreferences, + DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, + Renegotiation: c.Renegotiation, + } +} diff --git a/vendor/golang.org/x/net/http2/go18.go b/vendor/golang.org/x/net/http2/go18.go new file mode 100644 index 0000000..c2ae167 --- /dev/null +++ b/vendor/golang.org/x/net/http2/go18.go @@ -0,0 +1,11 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.8 + +package http2 + +import "crypto/tls" + +func cloneTLSConfig(c *tls.Config) *tls.Config { return c.Clone() } diff --git a/vendor/golang.org/x/net/http2/not_go17.go b/vendor/golang.org/x/net/http2/not_go17.go index 28df0c1..667867f 100644 --- a/vendor/golang.org/x/net/http2/not_go17.go +++ b/vendor/golang.org/x/net/http2/not_go17.go @@ -7,6 +7,7 @@ package http2 import ( + "crypto/tls" "net" "net/http" ) @@ -49,3 +50,28 @@ func contextWithCancel(ctx contextContext) (_ contextContext, cancel func()) { func requestWithContext(req *http.Request, ctx contextContext) *http.Request { return req } + +// temporary copy of Go 1.6's private tls.Config.clone: +func cloneTLSConfig(c *tls.Config) *tls.Config { + return &tls.Config{ + Rand: c.Rand, + Time: c.Time, + Certificates: c.Certificates, + NameToCertificate: c.NameToCertificate, + GetCertificate: c.GetCertificate, + RootCAs: c.RootCAs, + NextProtos: c.NextProtos, + ServerName: c.ServerName, + ClientAuth: c.ClientAuth, + ClientCAs: c.ClientCAs, + InsecureSkipVerify: c.InsecureSkipVerify, + CipherSuites: c.CipherSuites, + PreferServerCipherSuites: c.PreferServerCipherSuites, + SessionTicketsDisabled: c.SessionTicketsDisabled, + SessionTicketKey: c.SessionTicketKey, + ClientSessionCache: c.ClientSessionCache, + MinVersion: c.MinVersion, + MaxVersion: c.MaxVersion, + CurvePreferences: c.CurvePreferences, + } +} diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index bcd27ae..47c66d9 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -356,7 +356,7 @@ func (t *Transport) dialClientConn(addr string, singleUse bool) (*ClientConn, er func (t *Transport) newTLSConfig(host string) *tls.Config { cfg := new(tls.Config) if t.TLSClientConfig != nil { - *cfg = *t.TLSClientConfig + *cfg = *cloneTLSConfig(t.TLSClientConfig) } if !strSliceContains(cfg.NextProtos, NextProtoTLS) { cfg.NextProtos = append([]string{NextProtoTLS}, cfg.NextProtos...) diff --git a/vendor/golang.org/x/oauth2/google/google.go b/vendor/golang.org/x/oauth2/google/google.go index 82399b0..a48d5bf 100644 --- a/vendor/golang.org/x/oauth2/google/google.go +++ b/vendor/golang.org/x/oauth2/google/google.go @@ -89,6 +89,7 @@ func JWTConfigFromJSON(jsonKey []byte, scope ...string) (*jwt.Config, error) { Email string `json:"client_email"` PrivateKey string `json:"private_key"` PrivateKeyID string `json:"private_key_id"` + TokenURL string `json:"token_uri"` } if err := json.Unmarshal(jsonKey, &key); err != nil { return nil, err @@ -98,7 +99,10 @@ func JWTConfigFromJSON(jsonKey []byte, scope ...string) (*jwt.Config, error) { PrivateKey: []byte(key.PrivateKey), PrivateKeyID: key.PrivateKeyID, Scopes: scope, - TokenURL: JWTTokenURL, + TokenURL: key.TokenURL, + } + if config.TokenURL == "" { + config.TokenURL = JWTTokenURL } return config, nil } diff --git a/vendor/google.golang.org/api/googleapi/googleapi.go b/vendor/google.golang.org/api/googleapi/googleapi.go index 67ee776..806e02d 100644 --- a/vendor/google.golang.org/api/googleapi/googleapi.go +++ b/vendor/google.golang.org/api/googleapi/googleapi.go @@ -149,12 +149,12 @@ func IsNotModified(err error) bool { // CheckMediaResponse returns an error (of type *Error) if the response // status code is not 2xx. Unlike CheckResponse it does not assume the // body is a JSON error document. +// It is the caller's responsibility to close res.Body. func CheckMediaResponse(res *http.Response) error { if res.StatusCode >= 200 && res.StatusCode <= 299 { return nil } slurp, _ := ioutil.ReadAll(io.LimitReader(res.Body, 1<<20)) - res.Body.Close() return &Error{ Code: res.StatusCode, Body: string(slurp), @@ -278,41 +278,15 @@ func ResolveRelative(basestr, relstr string) string { return us } -// has4860Fix is whether this Go environment contains the fix for -// http://golang.org/issue/4860 -var has4860Fix bool - -// init initializes has4860Fix by checking the behavior of the net/http package. -func init() { - r := http.Request{ - URL: &url.URL{ - Scheme: "http", - Opaque: "//opaque", - }, - } - b := &bytes.Buffer{} - r.Write(b) - has4860Fix = bytes.HasPrefix(b.Bytes(), []byte("GET http")) -} - -// SetOpaque sets u.Opaque from u.Path such that HTTP requests to it -// don't alter any hex-escaped characters in u.Path. -func SetOpaque(u *url.URL) { - u.Opaque = "//" + u.Host + u.Path - if !has4860Fix { - u.Opaque = u.Scheme + ":" + u.Opaque - } -} - // Expand subsitutes any {encoded} strings in the URL passed in using // the map supplied. // // This calls SetOpaque to avoid encoding of the parameters in the URL path. func Expand(u *url.URL, expansions map[string]string) { - expanded, err := uritemplates.Expand(u.Path, expansions) + escaped, unescaped, err := uritemplates.Expand(u.Path, expansions) if err == nil { - u.Path = expanded - SetOpaque(u) + u.Path = unescaped + u.RawPath = escaped } } diff --git a/vendor/google.golang.org/api/googleapi/internal/uritemplates/uritemplates.go b/vendor/google.golang.org/api/googleapi/internal/uritemplates/uritemplates.go index 7c103ba..63bf053 100644 --- a/vendor/google.golang.org/api/googleapi/internal/uritemplates/uritemplates.go +++ b/vendor/google.golang.org/api/googleapi/internal/uritemplates/uritemplates.go @@ -34,11 +34,37 @@ func pctEncode(src []byte) []byte { return dst } -func escape(s string, allowReserved bool) string { +// pairWriter is a convenience struct which allows escaped and unescaped +// versions of the template to be written in parallel. +type pairWriter struct { + escaped, unescaped bytes.Buffer +} + +// Write writes the provided string directly without any escaping. +func (w *pairWriter) Write(s string) { + w.escaped.WriteString(s) + w.unescaped.WriteString(s) +} + +// Escape writes the provided string, escaping the string for the +// escaped output. +func (w *pairWriter) Escape(s string, allowReserved bool) { + w.unescaped.WriteString(s) if allowReserved { - return string(reserved.ReplaceAllFunc([]byte(s), pctEncode)) + w.escaped.Write(reserved.ReplaceAllFunc([]byte(s), pctEncode)) + } else { + w.escaped.Write(unreserved.ReplaceAllFunc([]byte(s), pctEncode)) } - return string(unreserved.ReplaceAllFunc([]byte(s), pctEncode)) +} + +// Escaped returns the escaped string. +func (w *pairWriter) Escaped() string { + return w.escaped.String() +} + +// Unescaped returns the unescaped string. +func (w *pairWriter) Unescaped() string { + return w.unescaped.String() } // A uriTemplate is a parsed representation of a URI template. @@ -170,18 +196,20 @@ func parseTerm(term string) (result templateTerm, err error) { return result, err } -// Expand expands a URI template with a set of values to produce a string. -func (t *uriTemplate) Expand(values map[string]string) string { - var buf bytes.Buffer +// Expand expands a URI template with a set of values to produce the +// resultant URI. Two forms of the result are returned: one with all the +// elements escaped, and one with the elements unescaped. +func (t *uriTemplate) Expand(values map[string]string) (escaped, unescaped string) { + var w pairWriter for _, p := range t.parts { - p.expand(&buf, values) + p.expand(&w, values) } - return buf.String() + return w.Escaped(), w.Unescaped() } -func (tp *templatePart) expand(buf *bytes.Buffer, values map[string]string) { +func (tp *templatePart) expand(w *pairWriter, values map[string]string) { if len(tp.raw) > 0 { - buf.WriteString(tp.raw) + w.Write(tp.raw) return } var first = true @@ -191,30 +219,30 @@ func (tp *templatePart) expand(buf *bytes.Buffer, values map[string]string) { continue } if first { - buf.WriteString(tp.first) + w.Write(tp.first) first = false } else { - buf.WriteString(tp.sep) + w.Write(tp.sep) } - tp.expandString(buf, term, value) + tp.expandString(w, term, value) } } -func (tp *templatePart) expandName(buf *bytes.Buffer, name string, empty bool) { +func (tp *templatePart) expandName(w *pairWriter, name string, empty bool) { if tp.named { - buf.WriteString(name) + w.Write(name) if empty { - buf.WriteString(tp.ifemp) + w.Write(tp.ifemp) } else { - buf.WriteString("=") + w.Write("=") } } } -func (tp *templatePart) expandString(buf *bytes.Buffer, t templateTerm, s string) { +func (tp *templatePart) expandString(w *pairWriter, t templateTerm, s string) { if len(s) > t.truncate && t.truncate > 0 { s = s[:t.truncate] } - tp.expandName(buf, t.name, len(s) == 0) - buf.WriteString(escape(s, tp.allowReserved)) + tp.expandName(w, t.name, len(s) == 0) + w.Escape(s, tp.allowReserved) } diff --git a/vendor/google.golang.org/api/googleapi/internal/uritemplates/utils.go b/vendor/google.golang.org/api/googleapi/internal/uritemplates/utils.go index eff260a..2e70b81 100644 --- a/vendor/google.golang.org/api/googleapi/internal/uritemplates/utils.go +++ b/vendor/google.golang.org/api/googleapi/internal/uritemplates/utils.go @@ -4,10 +4,14 @@ package uritemplates -func Expand(path string, values map[string]string) (string, error) { +// Expand parses then expands a URI template with a set of values to produce +// the resultant URI. Two forms of the result are returned: one with all the +// elements escaped, and one with the elements unescaped. +func Expand(path string, values map[string]string) (escaped, unescaped string, err error) { template, err := parse(path) if err != nil { - return "", err + return "", "", err } - return template.Expand(values), nil + escaped, unescaped = template.Expand(values) + return escaped, unescaped, nil } diff --git a/vendor/google.golang.org/api/oauth2/v2/oauth2-gen.go b/vendor/google.golang.org/api/oauth2/v2/oauth2-gen.go index dd23316..6b18fad 100644 --- a/vendor/google.golang.org/api/oauth2/v2/oauth2-gen.go +++ b/vendor/google.golang.org/api/oauth2/v2/oauth2-gen.go @@ -331,7 +331,6 @@ func (c *GetCertForOpenIdConnectCall) doRequest(alt string) (*http.Response, err urls += "?" + c.urlParams_.Encode() req, _ := http.NewRequest("GET", urls, body) req.Header = reqHeaders - googleapi.SetOpaque(req.URL) return gensupport.SendRequest(c.ctx_, c.s.client, req) } @@ -440,7 +439,6 @@ func (c *TokeninfoCall) doRequest(alt string) (*http.Response, error) { urls += "?" + c.urlParams_.Encode() req, _ := http.NewRequest("POST", urls, body) req.Header = reqHeaders - googleapi.SetOpaque(req.URL) return gensupport.SendRequest(c.ctx_, c.s.client, req) } @@ -559,7 +557,6 @@ func (c *UserinfoGetCall) doRequest(alt string) (*http.Response, error) { urls += "?" + c.urlParams_.Encode() req, _ := http.NewRequest("GET", urls, body) req.Header = reqHeaders - googleapi.SetOpaque(req.URL) return gensupport.SendRequest(c.ctx_, c.s.client, req) } @@ -670,7 +667,6 @@ func (c *UserinfoV2MeGetCall) doRequest(alt string) (*http.Response, error) { urls += "?" + c.urlParams_.Encode() req, _ := http.NewRequest("GET", urls, body) req.Header = reqHeaders - googleapi.SetOpaque(req.URL) return gensupport.SendRequest(c.ctx_, c.s.client, req) } diff --git a/vendor/google.golang.org/api/storage/v1/storage-gen.go b/vendor/google.golang.org/api/storage/v1/storage-gen.go index 346751b..a74cad2 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-gen.go +++ b/vendor/google.golang.org/api/storage/v1/storage-gen.go @@ -2316,7 +2316,6 @@ func (c *BucketsInsertCall) doRequest(alt string) (*http.Response, error) { urls += "?" + c.urlParams_.Encode() req, _ := http.NewRequest("POST", urls, body) req.Header = reqHeaders - googleapi.SetOpaque(req.URL) return gensupport.SendRequest(c.ctx_, c.s.client, req) } @@ -2528,7 +2527,6 @@ func (c *BucketsListCall) doRequest(alt string) (*http.Response, error) { urls += "?" + c.urlParams_.Encode() req, _ := http.NewRequest("GET", urls, body) req.Header = reqHeaders - googleapi.SetOpaque(req.URL) return gensupport.SendRequest(c.ctx_, c.s.client, req) } @@ -3204,7 +3202,6 @@ func (c *ChannelsStopCall) doRequest(alt string) (*http.Response, error) { urls += "?" + c.urlParams_.Encode() req, _ := http.NewRequest("POST", urls, body) req.Header = reqHeaders - googleapi.SetOpaque(req.URL) return gensupport.SendRequest(c.ctx_, c.s.client, req) } diff --git a/vendor/google.golang.org/api/transport/dial.go b/vendor/google.golang.org/api/transport/dial.go index 9b8a904..a7d058b 100644 --- a/vendor/google.golang.org/api/transport/dial.go +++ b/vendor/google.golang.org/api/transport/dial.go @@ -93,5 +93,5 @@ func DialGRPC(ctx context.Context, opts ...option.ClientOption) (*grpc.ClientCon if o.UserAgent != "" { grpcOpts = append(grpcOpts, grpc.WithUserAgent(o.UserAgent)) } - return grpc.Dial(o.Endpoint, grpcOpts...) + return grpc.DialContext(ctx, o.Endpoint, grpcOpts...) } diff --git a/vendor/google.golang.org/grpc/call.go b/vendor/google.golang.org/grpc/call.go index fea0799..788b3d9 100644 --- a/vendor/google.golang.org/grpc/call.go +++ b/vendor/google.golang.org/grpc/call.go @@ -96,7 +96,7 @@ func sendRequest(ctx context.Context, codec Codec, compressor Compressor, callHd } outBuf, err := encode(codec, args, compressor, cbuf) if err != nil { - return nil, transport.StreamErrorf(codes.Internal, "grpc: %v", err) + return nil, Errorf(codes.Internal, "grpc: %v", err) } err = t.Write(stream, outBuf, opts) // t.NewStream(...) could lead to an early rejection of the RPC (e.g., the service/method @@ -112,7 +112,14 @@ func sendRequest(ctx context.Context, codec Codec, compressor Compressor, callHd // Invoke sends the RPC request on the wire and returns after response is received. // Invoke is called by generated code. Also users can call Invoke directly when it // is really needed in their use cases. -func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) (err error) { +func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) error { + if cc.dopts.unaryInt != nil { + return cc.dopts.unaryInt(ctx, method, args, reply, cc, invoke, opts...) + } + return invoke(ctx, method, args, reply, cc, opts...) +} + +func invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) (err error) { c := defaultCallInfo for _, o := range opts { if err := o.before(&c); err != nil { diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index 1d3b46c..a257f01 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -83,15 +83,17 @@ var ( // dialOptions configure a Dial call. dialOptions are set by the DialOption // values passed to Dial. type dialOptions struct { - codec Codec - cp Compressor - dc Decompressor - bs backoffStrategy - balancer Balancer - block bool - insecure bool - timeout time.Duration - copts transport.ConnectOptions + unaryInt UnaryClientInterceptor + streamInt StreamClientInterceptor + codec Codec + cp Compressor + dc Decompressor + bs backoffStrategy + balancer Balancer + block bool + insecure bool + timeout time.Duration + copts transport.ConnectOptions } // DialOption configures how we set up the connection. @@ -215,6 +217,20 @@ func WithUserAgent(s string) DialOption { } } +// WithUnaryInterceptor returns a DialOption that specifies the interceptor for unary RPCs. +func WithUnaryInterceptor(f UnaryClientInterceptor) DialOption { + return func(o *dialOptions) { + o.unaryInt = f + } +} + +// WithStreamInterceptor returns a DialOption that specifies the interceptor for streaming RPCs. +func WithStreamInterceptor(f StreamClientInterceptor) DialOption { + return func(o *dialOptions) { + o.streamInt = f + } +} + // Dial creates a client connection to the given target. func Dial(target string, opts ...DialOption) (*ClientConn, error) { return DialContext(context.Background(), target, opts...) diff --git a/vendor/google.golang.org/grpc/interceptor.go b/vendor/google.golang.org/grpc/interceptor.go index 588f59e..8d932ef 100644 --- a/vendor/google.golang.org/grpc/interceptor.go +++ b/vendor/google.golang.org/grpc/interceptor.go @@ -37,6 +37,22 @@ import ( "golang.org/x/net/context" ) +// UnaryInvoker is called by UnaryClientInterceptor to complete RPCs. +type UnaryInvoker func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error + +// UnaryClientInterceptor intercepts the execution of a unary RPC on the client. inovker is the handler to complete the RPC +// and it is the responsibility of the interceptor to call it. +// This is the EXPERIMENTAL API. +type UnaryClientInterceptor func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error + +// Streamer is called by StreamClientInterceptor to create a ClientStream. +type Streamer func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) + +// StreamClientInterceptor intercepts the creation of ClientStream. It may return a custom ClientStream to intercept all I/O +// operations. streamer is the handlder to create a ClientStream and it is the responsibility of the interceptor to call it. +// This is the EXPERIMENTAL API. +type StreamClientInterceptor func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error) + // UnaryServerInfo consists of various information about a unary RPC on // server side. All per-rpc information may be mutated by the interceptor. type UnaryServerInfo struct { diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go index 35ac9cc..6b60095 100644 --- a/vendor/google.golang.org/grpc/rpc_util.go +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -303,10 +303,10 @@ func checkRecvPayload(pf payloadFormat, recvCompress string, dc Decompressor) er case compressionNone: case compressionMade: if dc == nil || recvCompress != dc.Type() { - return transport.StreamErrorf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) + return Errorf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) } default: - return transport.StreamErrorf(codes.Internal, "grpc: received unexpected payload format %d", pf) + return Errorf(codes.Internal, "grpc: received unexpected payload format %d", pf) } return nil } diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go index b2a825a..2524dd2 100644 --- a/vendor/google.golang.org/grpc/server.go +++ b/vendor/google.golang.org/grpc/server.go @@ -324,7 +324,7 @@ func (s *Server) useTransportAuthenticator(rawConn net.Conn) (net.Conn, credenti // Serve accepts incoming connections on the listener lis, creating a new // ServerTransport and service goroutine for each. The service goroutines // read gRPC requests and then call the registered handlers to reply to them. -// Service returns when lis.Accept fails. lis will be closed when +// Serve returns when lis.Accept fails. lis will be closed when // this method returns. func (s *Server) Serve(lis net.Listener) error { s.mu.Lock() @@ -547,7 +547,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. return err } if err == io.ErrUnexpectedEOF { - err = transport.StreamError{Code: codes.Internal, Desc: "io.ErrUnexpectedEOF"} + err = Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) } if err != nil { switch err := err.(type) { @@ -569,8 +569,8 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. if err := checkRecvPayload(pf, stream.RecvCompress(), s.opts.dc); err != nil { switch err := err.(type) { - case transport.StreamError: - if err := t.WriteStatus(stream, err.Code, err.Desc); err != nil { + case *rpcError: + if err := t.WriteStatus(stream, err.code, err.desc); err != nil { grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", err) } default: diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index 51df3f0..e1b4759 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -97,7 +97,14 @@ type ClientStream interface { // NewClientStream creates a new Stream for the client side. This is called // by generated code. -func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { +func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) { + if cc.dopts.streamInt != nil { + return cc.dopts.streamInt(ctx, desc, cc, method, newClientStream, opts...) + } + return newClientStream(ctx, desc, cc, method, opts...) +} + +func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { var ( t transport.ClientTransport s *transport.Stream @@ -296,7 +303,7 @@ func (cs *clientStream) SendMsg(m interface{}) (err error) { } }() if err != nil { - return transport.StreamErrorf(codes.Internal, "grpc: %v", err) + return Errorf(codes.Internal, "grpc: %v", err) } return cs.t.Write(cs.s, out, &transport.Options{Last: false}) } @@ -468,10 +475,13 @@ func (ss *serverStream) SendMsg(m interface{}) (err error) { } }() if err != nil { - err = transport.StreamErrorf(codes.Internal, "grpc: %v", err) + err = Errorf(codes.Internal, "grpc: %v", err) return err } - return ss.t.Write(ss.s, out, &transport.Options{Last: false}) + if err := ss.t.Write(ss.s, out, &transport.Options{Last: false}); err != nil { + return toRPCErr(err) + } + return nil } func (ss *serverStream) RecvMsg(m interface{}) (err error) { @@ -489,5 +499,14 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { ss.mu.Unlock() } }() - return recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxMsgSize) + if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxMsgSize); err != nil { + if err == io.EOF { + return err + } + if err == io.ErrUnexpectedEOF { + err = Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) + } + return toRPCErr(err) + } + return nil } diff --git a/vendor/google.golang.org/grpc/transport/handler_server.go b/vendor/google.golang.org/grpc/transport/handler_server.go index f23b2da..114e349 100644 --- a/vendor/google.golang.org/grpc/transport/handler_server.go +++ b/vendor/google.golang.org/grpc/transport/handler_server.go @@ -85,7 +85,7 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request) (ServerTr if v := r.Header.Get("grpc-timeout"); v != "" { to, err := decodeTimeout(v) if err != nil { - return nil, StreamErrorf(codes.Internal, "malformed time-out: %v", err) + return nil, streamErrorf(codes.Internal, "malformed time-out: %v", err) } st.timeoutSet = true st.timeout = to @@ -393,5 +393,5 @@ func mapRecvMsgError(err error) error { } } } - return ConnectionErrorf(true, err, err.Error()) + return connectionErrorf(true, err, err.Error()) } diff --git a/vendor/google.golang.org/grpc/transport/http2_client.go b/vendor/google.golang.org/grpc/transport/http2_client.go index afbba45..4892faa 100644 --- a/vendor/google.golang.org/grpc/transport/http2_client.go +++ b/vendor/google.golang.org/grpc/transport/http2_client.go @@ -149,7 +149,7 @@ func newHTTP2Client(ctx context.Context, addr string, opts ConnectOptions) (_ Cl scheme := "http" conn, err := dial(opts.Dialer, ctx, addr) if err != nil { - return nil, ConnectionErrorf(true, err, "transport: %v", err) + return nil, connectionErrorf(true, err, "transport: %v", err) } // Any further errors will close the underlying connection defer func(conn net.Conn) { @@ -165,7 +165,7 @@ func newHTTP2Client(ctx context.Context, addr string, opts ConnectOptions) (_ Cl // Credentials handshake errors are typically considered permanent // to avoid retrying on e.g. bad certificates. temp := isTemporary(err) - return nil, ConnectionErrorf(temp, err, "transport: %v", err) + return nil, connectionErrorf(temp, err, "transport: %v", err) } } ua := primaryUA @@ -205,11 +205,11 @@ func newHTTP2Client(ctx context.Context, addr string, opts ConnectOptions) (_ Cl n, err := t.conn.Write(clientPreface) if err != nil { t.Close() - return nil, ConnectionErrorf(true, err, "transport: %v", err) + return nil, connectionErrorf(true, err, "transport: %v", err) } if n != len(clientPreface) { t.Close() - return nil, ConnectionErrorf(true, err, "transport: preface mismatch, wrote %d bytes; want %d", n, len(clientPreface)) + return nil, connectionErrorf(true, err, "transport: preface mismatch, wrote %d bytes; want %d", n, len(clientPreface)) } if initialWindowSize != defaultWindowSize { err = t.framer.writeSettings(true, http2.Setting{ @@ -221,13 +221,13 @@ func newHTTP2Client(ctx context.Context, addr string, opts ConnectOptions) (_ Cl } if err != nil { t.Close() - return nil, ConnectionErrorf(true, err, "transport: %v", err) + return nil, connectionErrorf(true, err, "transport: %v", err) } // Adjust the connection flow control window if needed. if delta := uint32(initialConnWindowSize - defaultWindowSize); delta > 0 { if err := t.framer.writeWindowUpdate(true, 0, delta); err != nil { t.Close() - return nil, ConnectionErrorf(true, err, "transport: %v", err) + return nil, connectionErrorf(true, err, "transport: %v", err) } } go t.controller() @@ -295,12 +295,12 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea } pos := strings.LastIndex(callHdr.Method, "/") if pos == -1 { - return nil, StreamErrorf(codes.InvalidArgument, "transport: malformed method name: %q", callHdr.Method) + return nil, streamErrorf(codes.InvalidArgument, "transport: malformed method name: %q", callHdr.Method) } audience := "https://" + callHdr.Host + port + callHdr.Method[:pos] data, err := c.GetRequestMetadata(ctx, audience) if err != nil { - return nil, StreamErrorf(codes.InvalidArgument, "transport: %v", err) + return nil, streamErrorf(codes.InvalidArgument, "transport: %v", err) } for k, v := range data { authData[k] = v @@ -437,7 +437,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea } if err != nil { t.notifyError(err) - return nil, ConnectionErrorf(true, err, "transport: %v", err) + return nil, connectionErrorf(true, err, "transport: %v", err) } } t.writableChan <- 0 @@ -483,7 +483,7 @@ func (t *http2Client) CloseStream(s *Stream, err error) { } s.state = streamDone s.mu.Unlock() - if _, ok := err.(StreamError); ok { + if se, ok := err.(StreamError); ok && se.Code != codes.DeadlineExceeded { t.controlBuf.put(&resetStream{s.id, http2.ErrCodeCancel}) } } @@ -651,7 +651,7 @@ func (t *http2Client) Write(s *Stream, data []byte, opts *Options) error { // invoked. if err := t.framer.writeData(forceFlush, s.id, endStream, p); err != nil { t.notifyError(err) - return ConnectionErrorf(true, err, "transport: %v", err) + return connectionErrorf(true, err, "transport: %v", err) } if t.framer.adjustNumWriters(-1) == 0 { t.framer.flushWrite() @@ -699,7 +699,7 @@ func (t *http2Client) updateWindow(s *Stream, n uint32) { func (t *http2Client) handleData(f *http2.DataFrame) { size := len(f.Data()) if err := t.fc.onData(uint32(size)); err != nil { - t.notifyError(ConnectionErrorf(true, err, "%v", err)) + t.notifyError(connectionErrorf(true, err, "%v", err)) return } // Select the right stream to dispatch. @@ -805,7 +805,7 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { if t.state == reachable || t.state == draining { if f.LastStreamID > 0 && f.LastStreamID%2 != 1 { t.mu.Unlock() - t.notifyError(ConnectionErrorf(true, nil, "received illegal http2 GOAWAY frame: stream ID %d is even", f.LastStreamID)) + t.notifyError(connectionErrorf(true, nil, "received illegal http2 GOAWAY frame: stream ID %d is even", f.LastStreamID)) return } select { @@ -814,7 +814,7 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { // t.goAway has been closed (i.e.,multiple GoAways). if id < f.LastStreamID { t.mu.Unlock() - t.notifyError(ConnectionErrorf(true, nil, "received illegal http2 GOAWAY frame: previously recv GOAWAY frame with LastStramID %d, currently recv %d", id, f.LastStreamID)) + t.notifyError(connectionErrorf(true, nil, "received illegal http2 GOAWAY frame: previously recv GOAWAY frame with LastStramID %d, currently recv %d", id, f.LastStreamID)) return } t.prevGoAwayID = id @@ -929,7 +929,7 @@ func (t *http2Client) reader() { t.mu.Unlock() if s != nil { // use error detail to provide better err message - handleMalformedHTTP2(s, StreamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.errorDetail())) + handleMalformedHTTP2(s, streamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.errorDetail())) } continue } else { diff --git a/vendor/google.golang.org/grpc/transport/http2_server.go b/vendor/google.golang.org/grpc/transport/http2_server.go index 16010d5..f753c4f 100644 --- a/vendor/google.golang.org/grpc/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/transport/http2_server.go @@ -111,12 +111,12 @@ func newHTTP2Server(conn net.Conn, maxStreams uint32, authInfo credentials.AuthI Val: uint32(initialWindowSize)}) } if err := framer.writeSettings(true, settings...); err != nil { - return nil, ConnectionErrorf(true, err, "transport: %v", err) + return nil, connectionErrorf(true, err, "transport: %v", err) } // Adjust the connection flow control window if needed. if delta := uint32(initialConnWindowSize - defaultWindowSize); delta > 0 { if err := framer.writeWindowUpdate(true, 0, delta); err != nil { - return nil, ConnectionErrorf(true, err, "transport: %v", err) + return nil, connectionErrorf(true, err, "transport: %v", err) } } var buf bytes.Buffer @@ -448,7 +448,7 @@ func (t *http2Server) writeHeaders(s *Stream, b *bytes.Buffer, endStream bool) e } if err != nil { t.Close() - return ConnectionErrorf(true, err, "transport: %v", err) + return connectionErrorf(true, err, "transport: %v", err) } } return nil @@ -544,7 +544,7 @@ func (t *http2Server) Write(s *Stream, data []byte, opts *Options) error { s.mu.Lock() if s.state == streamDone { s.mu.Unlock() - return StreamErrorf(codes.Unknown, "the stream has been done") + return streamErrorf(codes.Unknown, "the stream has been done") } if !s.headerOk { writeHeaderFrame = true @@ -568,7 +568,7 @@ func (t *http2Server) Write(s *Stream, data []byte, opts *Options) error { } if err := t.framer.writeHeaders(false, p); err != nil { t.Close() - return ConnectionErrorf(true, err, "transport: %v", err) + return connectionErrorf(true, err, "transport: %v", err) } t.writableChan <- 0 } @@ -642,7 +642,7 @@ func (t *http2Server) Write(s *Stream, data []byte, opts *Options) error { } if err := t.framer.writeData(forceFlush, s.id, false, p); err != nil { t.Close() - return ConnectionErrorf(true, err, "transport: %v", err) + return connectionErrorf(true, err, "transport: %v", err) } if t.framer.adjustNumWriters(-1) == 0 { t.framer.flushWrite() diff --git a/vendor/google.golang.org/grpc/transport/http_util.go b/vendor/google.golang.org/grpc/transport/http_util.go index 79da512..b024594 100644 --- a/vendor/google.golang.org/grpc/transport/http_util.go +++ b/vendor/google.golang.org/grpc/transport/http_util.go @@ -162,7 +162,7 @@ func (d *decodeState) processHeaderField(f hpack.HeaderField) { switch f.Name { case "content-type": if !validContentType(f.Value) { - d.setErr(StreamErrorf(codes.FailedPrecondition, "transport: received the unexpected content-type %q", f.Value)) + d.setErr(streamErrorf(codes.FailedPrecondition, "transport: received the unexpected content-type %q", f.Value)) return } case "grpc-encoding": @@ -170,7 +170,7 @@ func (d *decodeState) processHeaderField(f hpack.HeaderField) { case "grpc-status": code, err := strconv.Atoi(f.Value) if err != nil { - d.setErr(StreamErrorf(codes.Internal, "transport: malformed grpc-status: %v", err)) + d.setErr(streamErrorf(codes.Internal, "transport: malformed grpc-status: %v", err)) return } d.statusCode = codes.Code(code) @@ -181,7 +181,7 @@ func (d *decodeState) processHeaderField(f hpack.HeaderField) { var err error d.timeout, err = decodeTimeout(f.Value) if err != nil { - d.setErr(StreamErrorf(codes.Internal, "transport: malformed time-out: %v", err)) + d.setErr(streamErrorf(codes.Internal, "transport: malformed time-out: %v", err)) return } case ":path": diff --git a/vendor/google.golang.org/grpc/transport/transport.go b/vendor/google.golang.org/grpc/transport/transport.go index b31769a..f4d8daf 100644 --- a/vendor/google.golang.org/grpc/transport/transport.go +++ b/vendor/google.golang.org/grpc/transport/transport.go @@ -476,16 +476,16 @@ type ServerTransport interface { Drain() } -// StreamErrorf creates an StreamError with the specified error code and description. -func StreamErrorf(c codes.Code, format string, a ...interface{}) StreamError { +// streamErrorf creates an StreamError with the specified error code and description. +func streamErrorf(c codes.Code, format string, a ...interface{}) StreamError { return StreamError{ Code: c, Desc: fmt.Sprintf(format, a...), } } -// ConnectionErrorf creates an ConnectionError with the specified error description. -func ConnectionErrorf(temp bool, e error, format string, a ...interface{}) ConnectionError { +// connectionErrorf creates an ConnectionError with the specified error description. +func connectionErrorf(temp bool, e error, format string, a ...interface{}) ConnectionError { return ConnectionError{ Desc: fmt.Sprintf(format, a...), temp: temp, @@ -522,10 +522,10 @@ func (e ConnectionError) Origin() error { var ( // ErrConnClosing indicates that the transport is closing. - ErrConnClosing = ConnectionErrorf(true, nil, "transport is closing") + ErrConnClosing = connectionErrorf(true, nil, "transport is closing") // ErrStreamDrain indicates that the stream is rejected by the server because // the server stops accepting new RPCs. - ErrStreamDrain = StreamErrorf(codes.Unavailable, "the server stops accepting new RPCs") + ErrStreamDrain = streamErrorf(codes.Unavailable, "the server stops accepting new RPCs") ) // StreamError is an error that only affects one stream within a connection. @@ -542,9 +542,9 @@ func (e StreamError) Error() string { func ContextErr(err error) StreamError { switch err { case context.DeadlineExceeded: - return StreamErrorf(codes.DeadlineExceeded, "%v", err) + return streamErrorf(codes.DeadlineExceeded, "%v", err) case context.Canceled: - return StreamErrorf(codes.Canceled, "%v", err) + return streamErrorf(codes.Canceled, "%v", err) } panic(fmt.Sprintf("Unexpected error from context packet: %v", err)) } diff --git a/vendor/vendor.json b/vendor/vendor.json index 3b2fa76..d9549b0 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -21,164 +21,164 @@ { "checksumSHA1": "U0dcMjJghtkeDI0oFpZa0pMt8yI=", "path": "cloud.google.com/go/compute/metadata", - "revision": "4fa13efd3e95632b326090d097cec09cedda7507", - "revisionTime": "2016-08-05T17:34:43Z" + "revision": "de848b02a4b8d92be5baa2a7ecb17c8ce0194d06", + "revisionTime": "2016-08-31T20:50:42Z" }, { "checksumSHA1": "hiJXjkFEGy+sDFf6O58Ocdy9Rnk=", "path": "cloud.google.com/go/internal", - "revision": "4fa13efd3e95632b326090d097cec09cedda7507", - "revisionTime": "2016-08-05T17:34:43Z" + "revision": "de848b02a4b8d92be5baa2a7ecb17c8ce0194d06", + "revisionTime": "2016-08-31T20:50:42Z" }, { - "checksumSHA1": "X3XqL+udT2uVxasneXxBDZVIN2M=", + "checksumSHA1": "mocMTDVyOtc9Q4qXF6zuJpivR9c=", "path": "github.com/aws/aws-sdk-go/aws", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "Y9W+4GimK4Fuxq+vyIskVYFRnX4=", "path": "github.com/aws/aws-sdk-go/aws/awserr", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "ppmwInOtC5Mj/dBBWVxL0KPEI0I=", "path": "github.com/aws/aws-sdk-go/aws/awsutil", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "H/tMKHZU+Qka6RtYiGB50s2uA0s=", "path": "github.com/aws/aws-sdk-go/aws/client", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "ieAJ+Cvp/PKv1LpUEnUXpc3OI6E=", "path": "github.com/aws/aws-sdk-go/aws/client/metadata", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "gNWirlrTfSLbOe421hISBAhTqa4=", "path": "github.com/aws/aws-sdk-go/aws/corehandlers", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "dNZNaOPfBPnzE2CBnfhXXZ9g9jU=", "path": "github.com/aws/aws-sdk-go/aws/credentials", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "KQiUK/zr3mqnAXD7x/X55/iNme0=", "path": "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "NUJUTWlc1sV8b7WjfiYc4JZbXl0=", "path": "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "4Ipx+5xN0gso+cENC2MHMWmQlR4=", "path": "github.com/aws/aws-sdk-go/aws/credentials/stscreds", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "nCMd1XKjgV21bEl7J8VZFqTV8PE=", "path": "github.com/aws/aws-sdk-go/aws/defaults", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "U0SthWum+t9ACanK7SDJOg3dO6M=", "path": "github.com/aws/aws-sdk-go/aws/ec2metadata", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "NyUg1P8ZS/LHAAQAk/4C5O4X3og=", "path": "github.com/aws/aws-sdk-go/aws/request", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "44uohX3kLsfZHHOqunr+qJnSCdw=", "path": "github.com/aws/aws-sdk-go/aws/session", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "7lla+sckQeF18wORAGuU2fFMlp4=", "path": "github.com/aws/aws-sdk-go/aws/signer/v4", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "Bm6UrYb2QCzpYseLwwgw6aetgRc=", "path": "github.com/aws/aws-sdk-go/private/endpoints", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "wk7EyvDaHwb5qqoOP/4d3cV0708=", "path": "github.com/aws/aws-sdk-go/private/protocol", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "isoix7lTx4qIq2zI2xFADtti5SI=", "path": "github.com/aws/aws-sdk-go/private/protocol/query", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "5xzix1R8prUyWxgLnzUQoxTsfik=", "path": "github.com/aws/aws-sdk-go/private/protocol/query/queryutil", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "TW/7U+/8ormL7acf6z2rv2hDD+s=", "path": "github.com/aws/aws-sdk-go/private/protocol/rest", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "Y6Db2GGfGD9LPpcJIPj8vXE8BbQ=", "path": "github.com/aws/aws-sdk-go/private/protocol/restxml", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "eUEkjyMPAuekKBE4ou+nM9tXEas=", "path": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "Eo9yODN5U99BK0pMzoqnBm7PCrY=", "path": "github.com/aws/aws-sdk-go/private/waiter", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "imxJucuPrgaPRMPtAgsu+Y7soB4=", "path": "github.com/aws/aws-sdk-go/service/s3", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "nH/itbdeFHpl4ysegdtgww9bFSA=", "path": "github.com/aws/aws-sdk-go/service/sts", - "revision": "e39222bf4583af667250cfd83a41388937ba56d4", - "revisionTime": "2016-08-24T23:07:50Z" + "revision": "6ac30507cca29249f4d49af45a8efc98b84088ee", + "revisionTime": "2016-09-01T22:26:51Z" }, { "checksumSHA1": "5rPfda8jFccr3A6heL+JAmi9K9g=", @@ -193,10 +193,11 @@ "revisionTime": "2016-08-16T05:15:41Z" }, { - "checksumSHA1": "/8DA8KzllVbPTycJcCeSbKbgZrs=", + "checksumSHA1": "cVyhKIRI2gQrgpn5qrBeAqErmWM=", + "origin": "github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini", "path": "github.com/go-ini/ini", - "revision": "a2610b3a793cfa7fdf0b07038068af5ddc12aba1", - "revisionTime": "2016-08-17T04:45:43Z" + "revision": "6e4869b434bd001f6983749881c7ead3545887d8", + "revisionTime": "2016-08-27T06:11:18Z" }, { "checksumSHA1": "jEXpLrWXoQvH/zk1lW5Si0swr6Y=", @@ -205,16 +206,16 @@ "revisionTime": "2016-08-02T11:38:42Z" }, { - "checksumSHA1": "XnbEHQRzINRKXKmu9GcaqGkK4Lg=", + "checksumSHA1": "sZSeW3Dc6lUqm1CzMUdu3poimoA=", "path": "github.com/golang/protobuf/proto", - "revision": "888eb0692c857ec880338addf316bd662d5e630e", - "revisionTime": "2016-08-23T21:25:17Z" + "revision": "1f49d83d9aa00e6ce4fc8258c71cc7786aec968a", + "revisionTime": "2016-08-24T20:12:15Z" }, { - "checksumSHA1": "W7O+qEK3rKVLoaCkJJLiGNjPBJQ=", + "checksumSHA1": "O2tnQv2UgKyWBMI60nWax8WLxsU=", "path": "github.com/google/go-github/github", - "revision": "a59a35745f99ad92d70d69a9f180767063aa4bf3", - "revisionTime": "2016-08-24T13:45:23Z" + "revision": "6d1b527d46849e8fc9238298ebe86dced178609c", + "revisionTime": "2016-09-01T19:22:04Z" }, { "checksumSHA1": "yyAzHoiVLu+xywYI2BDyRq6sOqE=", @@ -229,10 +230,10 @@ "revisionTime": "2016-08-17T18:46:32Z" }, { - "checksumSHA1": "FX4ZImLeSWQ3++PZf79l2FUj9Aw=", + "checksumSHA1": "WM2EnJ5GBsHmT8W/fgvlZmfbEDw=", "path": "github.com/gorilla/csrf", - "revision": "a9c30aea0c8079c6d335982cbe07d7bafe0b57b7", - "revisionTime": "2016-07-21T04:36:29Z" + "revision": "a8abe8abf66db8f4a9750d76ba95b4021a354757", + "revisionTime": "2016-09-01T05:58:16Z" }, { "checksumSHA1": "6/9VW/AyJyjRXLu+nbhqGYvOO2k=", @@ -241,10 +242,10 @@ "revisionTime": "2016-08-16T18:47:29Z" }, { - "checksumSHA1": "A+Inuul02rNTf2e+svwwvJDgVL4=", + "checksumSHA1": "oDsOWp1nBMGpQ9gCFnczGADwZTE=", "path": "github.com/gorilla/mux", - "revision": "34bf6dc9faa08144e925df4fa1838551b16d6c2a", - "revisionTime": "2016-08-24T23:34:02Z" + "revision": "0a192a193177452756c362c20087ddafcf6829c4", + "revisionTime": "2016-09-02T15:33:43Z" }, { "checksumSHA1": "nZoAsxDHOA8fLilA56HKvezLqNU=", @@ -255,8 +256,8 @@ { "checksumSHA1": "/bme7EZUgPHRcE433mhhCywTY0Y=", "path": "github.com/gorilla/sessions", - "revision": "478cbfc73df023ca675fe89ea13a72b026fcced6", - "revisionTime": "2016-08-26T13:13:12Z" + "revision": "7ab2742f1e374be6675e9a4eca54fe529221ae3a", + "revisionTime": "2016-09-01T06:18:54Z" }, { "checksumSHA1": "cdOCt0Yb+hdErz8NAQqayxPmRsY=", @@ -271,61 +272,62 @@ "revisionTime": "2016-08-11T01:57:21Z" }, { - "checksumSHA1": "8E3sekKdBZ38W0UFwONoZb0txbE=", + "checksumSHA1": "fa9G5tEr4oJJc3vtgn/B0NWZXfA=", "path": "github.com/hashicorp/hcl", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { - "checksumSHA1": "IxyvRpCFeoJBGl2obLKJV7RCGjg=", + "checksumSHA1": "67DfevLBglV52Y2eAuhFc/xQni0=", "path": "github.com/hashicorp/hcl/hcl/ast", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { "checksumSHA1": "l2oQxBsZRwn6eZjf+whXr8c9+8c=", "path": "github.com/hashicorp/hcl/hcl/parser", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { - "checksumSHA1": "vjhDQVlgHhdxml1V8/cj0vOe+j8=", + "checksumSHA1": "lgR7PSAZ0RtvAc9OCtCnNsF/x8g=", "path": "github.com/hashicorp/hcl/hcl/scanner", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { "checksumSHA1": "JlZmnzqdmFFyb1+2afLyR3BOE/8=", "path": "github.com/hashicorp/hcl/hcl/strconv", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { "checksumSHA1": "c6yprzj06ASwCo18TtbbNNBHljA=", "path": "github.com/hashicorp/hcl/hcl/token", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { "checksumSHA1": "jQ45CCc1ed/nlV7bbSnx6z72q1M=", "path": "github.com/hashicorp/hcl/json/parser", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { - "checksumSHA1": "S1e0F9ZKSnqgOLfjDTYazRL28tA=", + "checksumSHA1": "YdvFsNOMSWMLnY6fcliWQa0O5Fw=", "path": "github.com/hashicorp/hcl/json/scanner", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { "checksumSHA1": "fNlXQCQEnb+B3k5UDL/r15xtSJY=", "path": "github.com/hashicorp/hcl/json/token", - "revision": "baeb59c710717b06aac1dbe2270e8192ec593244", - "revisionTime": "2016-08-22T21:41:45Z" + "revision": "99df0eb941dd8ddbc83d3f3605a34f6a686ac85e", + "revisionTime": "2016-09-02T16:52:19Z" }, { "checksumSHA1": "0ZrwvB6KoGPj2PoDNSEJwxQ6Mog=", + "origin": "github.com/aws/aws-sdk-go/vendor/github.com/jmespath/go-jmespath", "path": "github.com/jmespath/go-jmespath", "revision": "bd40a432e4c76585ef6b72d3fd96fb9b6dc7b68d", "revisionTime": "2016-08-03T19:07:31Z" @@ -391,16 +393,16 @@ "revisionTime": "2016-01-10T10:55:54Z" }, { - "checksumSHA1": "7YOxIWN8N07u00fHPvixUpfRlsk=", + "checksumSHA1": "wwt9oTMyWLdPZhkTipVJnZcamFU=", "path": "github.com/sid77/drop", - "revision": "d1b109804e16d93bdf43c2cf6cbfe388980c26ff", - "revisionTime": "2016-08-25T18:43:04Z" + "revision": "e00b2d7247e9591c9b9bb9784f91b1cfe8d42680", + "revisionTime": "2016-08-27T17:29:50Z" }, { "checksumSHA1": "12GwP9BOFNEwDMDZnqaEcPvdBOo=", "path": "github.com/sid77/drop/syscall", - "revision": "d1b109804e16d93bdf43c2cf6cbfe388980c26ff", - "revisionTime": "2016-08-25T18:43:04Z" + "revision": "e00b2d7247e9591c9b9bb9784f91b1cfe8d42680", + "revisionTime": "2016-08-27T17:29:50Z" }, { "checksumSHA1": "59wTbS4fE2282Q88NrBYImbFGbo=", @@ -439,10 +441,10 @@ "revisionTime": "2016-08-20T15:41:56Z" }, { - "checksumSHA1": "lN5Rz/Vfg+X14cNLqTiODyVsnck=", + "checksumSHA1": "AEhbo+ngM14A/E4LwHOspRTrpJk=", "path": "github.com/spf13/viper", - "revision": "7fb2782df3d83e0036cc89f461ed0422628776f4", - "revisionTime": "2016-08-12T18:14:35Z" + "revision": "16990631d4aa7e38f73dbbbf37fa13e67c648531", + "revisionTime": "2016-08-30T14:32:46Z" }, { "checksumSHA1": "iydUphwYqZRq3WhstEdGsbvBAKs=", @@ -471,110 +473,110 @@ { "checksumSHA1": "h+pFYiRHBogczS8/F1NoN3Ata44=", "path": "golang.org/x/crypto/curve25519", - "revision": "351dc6a5bf92a5f2ae22fadeee08eb6a45aa2d93", - "revisionTime": "2016-08-24T13:50:57Z" + "revision": "9e590154d2353f3f5e1b24da7275686040dcf491", + "revisionTime": "2016-09-02T16:03:59Z" }, { "checksumSHA1": "wGb//LjBPNxYHqk+dcLo7BjPXK8=", "path": "golang.org/x/crypto/ed25519", - "revision": "351dc6a5bf92a5f2ae22fadeee08eb6a45aa2d93", - "revisionTime": "2016-08-24T13:50:57Z" + "revision": "9e590154d2353f3f5e1b24da7275686040dcf491", + "revisionTime": "2016-09-02T16:03:59Z" }, { "checksumSHA1": "LXFcVx8I587SnWmKycSDEq9yvK8=", "path": "golang.org/x/crypto/ed25519/internal/edwards25519", - "revision": "351dc6a5bf92a5f2ae22fadeee08eb6a45aa2d93", - "revisionTime": "2016-08-24T13:50:57Z" + "revision": "9e590154d2353f3f5e1b24da7275686040dcf491", + "revisionTime": "2016-09-02T16:03:59Z" }, { "checksumSHA1": "pXOcpeiBjX3zbVKeg0pvYnEmtqU=", "path": "golang.org/x/crypto/ssh", - "revision": "351dc6a5bf92a5f2ae22fadeee08eb6a45aa2d93", - "revisionTime": "2016-08-24T13:50:57Z" + "revision": "9e590154d2353f3f5e1b24da7275686040dcf491", + "revisionTime": "2016-09-02T16:03:59Z" }, { "checksumSHA1": "dA/dc+Var3VnLrksziLa0Zli+YI=", "path": "golang.org/x/crypto/ssh/agent", - "revision": "351dc6a5bf92a5f2ae22fadeee08eb6a45aa2d93", - "revisionTime": "2016-08-24T13:50:57Z" + "revision": "9e590154d2353f3f5e1b24da7275686040dcf491", + "revisionTime": "2016-09-02T16:03:59Z" }, { "checksumSHA1": "9jjO5GjLa0XF/nfWihF02RoH4qc=", "path": "golang.org/x/net/context", - "revision": "6250b412798208e6c90b03b7c4f226de5aa299e2", - "revisionTime": "2016-08-24T22:20:41Z" + "revision": "1358eff22f0dd0c54fc521042cc607f6ff4b531a", + "revisionTime": "2016-09-01T04:28:38Z" }, { "checksumSHA1": "WHc3uByvGaMcnSoI21fhzYgbOgg=", "path": "golang.org/x/net/context/ctxhttp", - "revision": "6250b412798208e6c90b03b7c4f226de5aa299e2", - "revisionTime": "2016-08-24T22:20:41Z" + "revision": "1358eff22f0dd0c54fc521042cc607f6ff4b531a", + "revisionTime": "2016-09-01T04:28:38Z" }, { - "checksumSHA1": "BoPkYbHfVf/rl8JH6NlxFEqZN/M=", + "checksumSHA1": "UL3f1aJMhKAkxTl5kZnkrwyqP+M=", "path": "golang.org/x/net/http2", - "revision": "6250b412798208e6c90b03b7c4f226de5aa299e2", - "revisionTime": "2016-08-24T22:20:41Z" + "revision": "1358eff22f0dd0c54fc521042cc607f6ff4b531a", + "revisionTime": "2016-09-01T04:28:38Z" }, { "checksumSHA1": "EYNaHp7XdLWRydUCE0amEkKAtgk=", "path": "golang.org/x/net/http2/hpack", - "revision": "6250b412798208e6c90b03b7c4f226de5aa299e2", - "revisionTime": "2016-08-24T22:20:41Z" + "revision": "1358eff22f0dd0c54fc521042cc607f6ff4b531a", + "revisionTime": "2016-09-01T04:28:38Z" }, { "checksumSHA1": "/k7k6eJDkxXx6K9Zpo/OwNm58XM=", "path": "golang.org/x/net/internal/timeseries", - "revision": "6250b412798208e6c90b03b7c4f226de5aa299e2", - "revisionTime": "2016-08-24T22:20:41Z" + "revision": "1358eff22f0dd0c54fc521042cc607f6ff4b531a", + "revisionTime": "2016-09-01T04:28:38Z" }, { "checksumSHA1": "yhndhWXMs/VSEDLks4dNyFMQStA=", "path": "golang.org/x/net/lex/httplex", - "revision": "6250b412798208e6c90b03b7c4f226de5aa299e2", - "revisionTime": "2016-08-24T22:20:41Z" + "revision": "1358eff22f0dd0c54fc521042cc607f6ff4b531a", + "revisionTime": "2016-09-01T04:28:38Z" }, { "checksumSHA1": "WpST9lFOHvWrjDVy0GJNqHe+R3E=", "path": "golang.org/x/net/trace", - "revision": "6250b412798208e6c90b03b7c4f226de5aa299e2", - "revisionTime": "2016-08-24T22:20:41Z" + "revision": "1358eff22f0dd0c54fc521042cc607f6ff4b531a", + "revisionTime": "2016-09-01T04:28:38Z" }, { "checksumSHA1": "XH7CgbL5Z8COUc+MKrYqS3FFosY=", "path": "golang.org/x/oauth2", - "revision": "4d549c893be7d4011bab739cc585d091a7188d27", - "revisionTime": "2016-08-26T21:46:27Z" + "revision": "3c3a985cb79f52a3190fbc056984415ca6763d01", + "revisionTime": "2016-08-26T23:14:08Z" }, { "checksumSHA1": "Yokz/Wl4zeuOZG2ev8LuaLtMotE=", "path": "golang.org/x/oauth2/github", - "revision": "4d549c893be7d4011bab739cc585d091a7188d27", - "revisionTime": "2016-08-26T21:46:27Z" + "revision": "3c3a985cb79f52a3190fbc056984415ca6763d01", + "revisionTime": "2016-08-26T23:14:08Z" }, { - "checksumSHA1": "ZCSsdKKU9ph2DWSvMjziDZu1No4=", + "checksumSHA1": "92TBjKPPMEcAfNqc2xWF8fSfZMg=", "path": "golang.org/x/oauth2/google", - "revision": "4d549c893be7d4011bab739cc585d091a7188d27", - "revisionTime": "2016-08-26T21:46:27Z" + "revision": "3c3a985cb79f52a3190fbc056984415ca6763d01", + "revisionTime": "2016-08-26T23:14:08Z" }, { "checksumSHA1": "D3v/aqfB9swlaZcSksCoF+lbOqo=", "path": "golang.org/x/oauth2/internal", - "revision": "4d549c893be7d4011bab739cc585d091a7188d27", - "revisionTime": "2016-08-26T21:46:27Z" + "revision": "3c3a985cb79f52a3190fbc056984415ca6763d01", + "revisionTime": "2016-08-26T23:14:08Z" }, { "checksumSHA1": "huVltYnXdRFDJLgp/ZP9IALzG7g=", "path": "golang.org/x/oauth2/jws", - "revision": "4d549c893be7d4011bab739cc585d091a7188d27", - "revisionTime": "2016-08-26T21:46:27Z" + "revision": "3c3a985cb79f52a3190fbc056984415ca6763d01", + "revisionTime": "2016-08-26T23:14:08Z" }, { "checksumSHA1": "McqNj0/805YfYQJQGomeB0s+EcU=", "path": "golang.org/x/oauth2/jwt", - "revision": "4d549c893be7d4011bab739cc585d091a7188d27", - "revisionTime": "2016-08-26T21:46:27Z" + "revision": "3c3a985cb79f52a3190fbc056984415ca6763d01", + "revisionTime": "2016-08-26T23:14:08Z" }, { "checksumSHA1": "8fD/im5Kwvy3JgmxulDTambmE8w=", @@ -585,86 +587,86 @@ { "checksumSHA1": "3JkLagg7UP4890bHn0Uld6GmO6M=", "path": "golang.org/x/text/internal/gen", - "revision": "d69c40b4be55797923cec7457fac7a244d91a9b6", - "revisionTime": "2016-08-15T22:39:46Z" + "revision": "ceefd2213ed29504fff30155163c8f59827734f3", + "revisionTime": "2016-08-31T08:18:28Z" }, { "checksumSHA1": "47nwiUyVBY2RKoEGXmCSvusY4Js=", "path": "golang.org/x/text/internal/triegen", - "revision": "d69c40b4be55797923cec7457fac7a244d91a9b6", - "revisionTime": "2016-08-15T22:39:46Z" + "revision": "ceefd2213ed29504fff30155163c8f59827734f3", + "revisionTime": "2016-08-31T08:18:28Z" }, { "checksumSHA1": "LyT5byg0Dq4x3OcGt6EwIDgPUpc=", "path": "golang.org/x/text/internal/ucd", - "revision": "d69c40b4be55797923cec7457fac7a244d91a9b6", - "revisionTime": "2016-08-15T22:39:46Z" + "revision": "ceefd2213ed29504fff30155163c8f59827734f3", + "revisionTime": "2016-08-31T08:18:28Z" }, { "checksumSHA1": "TZDHZj3zWDc5LKqpoLamOKt6Nmo=", "path": "golang.org/x/text/transform", - "revision": "d69c40b4be55797923cec7457fac7a244d91a9b6", - "revisionTime": "2016-08-15T22:39:46Z" + "revision": "ceefd2213ed29504fff30155163c8f59827734f3", + "revisionTime": "2016-08-31T08:18:28Z" }, { "checksumSHA1": "n94g6qdzv0fgQFGelH4/HXOthl0=", "path": "golang.org/x/text/unicode/cldr", - "revision": "d69c40b4be55797923cec7457fac7a244d91a9b6", - "revisionTime": "2016-08-15T22:39:46Z" + "revision": "ceefd2213ed29504fff30155163c8f59827734f3", + "revisionTime": "2016-08-31T08:18:28Z" }, { "checksumSHA1": "pDDMc5yLVQ2xeR9CajcgIJODPcw=", "path": "golang.org/x/text/unicode/norm", - "revision": "d69c40b4be55797923cec7457fac7a244d91a9b6", - "revisionTime": "2016-08-15T22:39:46Z" + "revision": "ceefd2213ed29504fff30155163c8f59827734f3", + "revisionTime": "2016-08-31T08:18:28Z" }, { "checksumSHA1": "awFDzMy1r/KM9mrqgCI9WqkxXc8=", "path": "google.golang.org/api/gensupport", - "revision": "0637df23b94dd27d09659ae7d9052b6c8d6fc1a0", - "revisionTime": "2016-08-26T05:47:09Z" + "revision": "66a8bc6d16488febe10aa767dce67cbf3e7dd21d", + "revisionTime": "2016-09-02T01:27:28Z" }, { - "checksumSHA1": "yQREK/OWrz9PLljbr127+xFk6J0=", + "checksumSHA1": "ia5kPSNOC45E23oF6A00m976BHY=", "path": "google.golang.org/api/googleapi", - "revision": "0637df23b94dd27d09659ae7d9052b6c8d6fc1a0", - "revisionTime": "2016-08-26T05:47:09Z" + "revision": "66a8bc6d16488febe10aa767dce67cbf3e7dd21d", + "revisionTime": "2016-09-02T01:27:28Z" }, { - "checksumSHA1": "ii4ET3JHk3vkMUEcg+9t/1RZSUU=", + "checksumSHA1": "1K0JxrUfDqAB3MyRiU1LKjfHyf4=", "path": "google.golang.org/api/googleapi/internal/uritemplates", - "revision": "0637df23b94dd27d09659ae7d9052b6c8d6fc1a0", - "revisionTime": "2016-08-26T05:47:09Z" + "revision": "66a8bc6d16488febe10aa767dce67cbf3e7dd21d", + "revisionTime": "2016-09-02T01:27:28Z" }, { "checksumSHA1": "yWFW1Xd2p+UaoIf7RjYnlheQ4CQ=", "path": "google.golang.org/api/internal", - "revision": "0637df23b94dd27d09659ae7d9052b6c8d6fc1a0", - "revisionTime": "2016-08-26T05:47:09Z" + "revision": "66a8bc6d16488febe10aa767dce67cbf3e7dd21d", + "revisionTime": "2016-09-02T01:27:28Z" }, { - "checksumSHA1": "y130cjcjG0ZHEthE4+SpXWhI/7A=", + "checksumSHA1": "BeTdT/OfOx9pWTGG0e2Ybwl4vBg=", "path": "google.golang.org/api/oauth2/v2", - "revision": "0637df23b94dd27d09659ae7d9052b6c8d6fc1a0", - "revisionTime": "2016-08-26T05:47:09Z" + "revision": "66a8bc6d16488febe10aa767dce67cbf3e7dd21d", + "revisionTime": "2016-09-02T01:27:28Z" }, { "checksumSHA1": "Y8OqjpPlGzB4HBKJNndKyHMVWDw=", "path": "google.golang.org/api/option", - "revision": "0637df23b94dd27d09659ae7d9052b6c8d6fc1a0", - "revisionTime": "2016-08-26T05:47:09Z" + "revision": "66a8bc6d16488febe10aa767dce67cbf3e7dd21d", + "revisionTime": "2016-09-02T01:27:28Z" }, { - "checksumSHA1": "ZRNfEOoTBBbSlw0Bhoijp43GRsU=", + "checksumSHA1": "ruNsGShXZvd73JcT7jT1qaISI7U=", "path": "google.golang.org/api/storage/v1", - "revision": "0637df23b94dd27d09659ae7d9052b6c8d6fc1a0", - "revisionTime": "2016-08-26T05:47:09Z" + "revision": "66a8bc6d16488febe10aa767dce67cbf3e7dd21d", + "revisionTime": "2016-09-02T01:27:28Z" }, { - "checksumSHA1": "OwKq0WScnHBwOTE0nkuG2tPAx7E=", + "checksumSHA1": "ugEt3+6BX701rmptMc3zy6/siq0=", "path": "google.golang.org/api/transport", - "revision": "0637df23b94dd27d09659ae7d9052b6c8d6fc1a0", - "revisionTime": "2016-08-26T05:47:09Z" + "revision": "66a8bc6d16488febe10aa767dce67cbf3e7dd21d", + "revisionTime": "2016-09-02T01:27:28Z" }, { "checksumSHA1": "xduDNbu9zEufcDc8UNWHoLrip5w=", @@ -769,64 +771,64 @@ "revisionTime": "2016-08-12T18:01:26Z" }, { - "checksumSHA1": "PUYeWv5OXNfb+9eufS8HNddJAjI=", + "checksumSHA1": "wMObd1dd4H5hoyd3Qz272deSWZ8=", "path": "google.golang.org/grpc", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "08icuA15HRkdYCt6H+Cs90RPQsY=", "path": "google.golang.org/grpc/codes", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "sbiWvqfhNKqrDC/nv0W/FaO3EOA=", "path": "google.golang.org/grpc/credentials", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "5R1jXc9mAXky9tPEuWMikTrwCgE=", "path": "google.golang.org/grpc/credentials/oauth", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "3Lt5hNAG8qJAYSsNghR5uA1zQns=", "path": "google.golang.org/grpc/grpclog", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "T3Q0p8kzvXFnRkMaK/G8mCv6mc0=", "path": "google.golang.org/grpc/internal", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "rxtneb9jDjKPHNZhC5obfG++6bI=", "path": "google.golang.org/grpc/metadata", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "4GSUFhOQ0kdFlBH4D5OTeKy78z0=", "path": "google.golang.org/grpc/naming", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "3RRoLeH6X2//7tVClOVzxW2bY+E=", "path": "google.golang.org/grpc/peer", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { - "checksumSHA1": "yC4HCpGcQ++BIojq47rlc4QNPm4=", + "checksumSHA1": "BOExBhs6EELb6rFF3qFEhiemN2c=", "path": "google.golang.org/grpc/transport", - "revision": "79b7c349179cdd6efd8bac4a1ce7f01b98c16e9b", - "revisionTime": "2016-08-26T22:36:31Z" + "revision": "52f6504dc290bd928a8139ba94e3ab32ed9a6273", + "revisionTime": "2016-09-02T22:12:15Z" }, { "checksumSHA1": "1D8GzeoFGUs5FZOoyC2DpQg8c5Y=", |