" is a nice result.
+ if v := reflect.ValueOf(arg); v.Kind() == reflect.Ptr && v.IsNil() {
+ p.WriteString(nilAngleString)
+ return
+ }
+ // Otherwise print a concise panic message. Most of the time the panic
+ // value will print itself nicely.
+ if p.panicking {
+ // Nested panics; the recursion in printArg cannot succeed.
+ panic(err)
+ }
+
+ oldFlags := p.fmt.Parser
+ // For this output we want default behavior.
+ p.fmt.ClearFlags()
+
+ p.WriteString(percentBangString)
+ p.WriteRune(verb)
+ p.WriteString(panicString)
+ p.panicking = true
+ p.printArg(err, 'v')
+ p.panicking = false
+ p.WriteByte(')')
+
+ p.fmt.Parser = oldFlags
+ }
+}
+
+func (p *printer) handleMethods(verb rune) (handled bool) {
+ if p.erroring {
+ return
+ }
+ // Is it a Formatter?
+ if formatter, ok := p.arg.(format.Formatter); ok {
+ handled = true
+ defer p.catchPanic(p.arg, verb)
+ formatter.Format(p, verb)
+ return
+ }
+ if formatter, ok := p.arg.(fmt.Formatter); ok {
+ handled = true
+ defer p.catchPanic(p.arg, verb)
+ formatter.Format(p, verb)
+ return
+ }
+
+ // If we're doing Go syntax and the argument knows how to supply it, take care of it now.
+ if p.fmt.SharpV {
+ if stringer, ok := p.arg.(fmt.GoStringer); ok {
+ handled = true
+ defer p.catchPanic(p.arg, verb)
+ // Print the result of GoString unadorned.
+ p.fmt.fmt_s(stringer.GoString())
+ return
+ }
+ } else {
+ // If a string is acceptable according to the format, see if
+ // the value satisfies one of the string-valued interfaces.
+ // Println etc. set verb to %v, which is "stringable".
+ switch verb {
+ case 'v', 's', 'x', 'X', 'q':
+ // Is it an error or Stringer?
+ // The duplication in the bodies is necessary:
+ // setting handled and deferring catchPanic
+ // must happen before calling the method.
+ switch v := p.arg.(type) {
+ case error:
+ handled = true
+ defer p.catchPanic(p.arg, verb)
+ p.fmtString(v.Error(), verb)
+ return
+
+ case fmt.Stringer:
+ handled = true
+ defer p.catchPanic(p.arg, verb)
+ p.fmtString(v.String(), verb)
+ return
+ }
+ }
+ }
+ return false
+}
+
+func (p *printer) printArg(arg interface{}, verb rune) {
+ p.arg = arg
+ p.value = reflect.Value{}
+
+ if arg == nil {
+ switch verb {
+ case 'T', 'v':
+ p.fmt.padString(nilAngleString)
+ default:
+ p.badVerb(verb)
+ }
+ return
+ }
+
+ // Special processing considerations.
+ // %T (the value's type) and %p (its address) are special; we always do them first.
+ switch verb {
+ case 'T':
+ p.fmt.fmt_s(reflect.TypeOf(arg).String())
+ return
+ case 'p':
+ p.fmtPointer(reflect.ValueOf(arg), 'p')
+ return
+ }
+
+ // Some types can be done without reflection.
+ switch f := arg.(type) {
+ case bool:
+ p.fmtBool(f, verb)
+ case float32:
+ p.fmtFloat(float64(f), 32, verb)
+ case float64:
+ p.fmtFloat(f, 64, verb)
+ case complex64:
+ p.fmtComplex(complex128(f), 64, verb)
+ case complex128:
+ p.fmtComplex(f, 128, verb)
+ case int:
+ p.fmtInteger(uint64(f), signed, verb)
+ case int8:
+ p.fmtInteger(uint64(f), signed, verb)
+ case int16:
+ p.fmtInteger(uint64(f), signed, verb)
+ case int32:
+ p.fmtInteger(uint64(f), signed, verb)
+ case int64:
+ p.fmtInteger(uint64(f), signed, verb)
+ case uint:
+ p.fmtInteger(uint64(f), unsigned, verb)
+ case uint8:
+ p.fmtInteger(uint64(f), unsigned, verb)
+ case uint16:
+ p.fmtInteger(uint64(f), unsigned, verb)
+ case uint32:
+ p.fmtInteger(uint64(f), unsigned, verb)
+ case uint64:
+ p.fmtInteger(f, unsigned, verb)
+ case uintptr:
+ p.fmtInteger(uint64(f), unsigned, verb)
+ case string:
+ p.fmtString(f, verb)
+ case []byte:
+ p.fmtBytes(f, verb, "[]byte")
+ case reflect.Value:
+ // Handle extractable values with special methods
+ // since printValue does not handle them at depth 0.
+ if f.IsValid() && f.CanInterface() {
+ p.arg = f.Interface()
+ if p.handleMethods(verb) {
+ return
+ }
+ }
+ p.printValue(f, verb, 0)
+ default:
+ // If the type is not simple, it might have methods.
+ if !p.handleMethods(verb) {
+ // Need to use reflection, since the type had no
+ // interface methods that could be used for formatting.
+ p.printValue(reflect.ValueOf(f), verb, 0)
+ }
+ }
+}
+
+// printValue is similar to printArg but starts with a reflect value, not an interface{} value.
+// It does not handle 'p' and 'T' verbs because these should have been already handled by printArg.
+func (p *printer) printValue(value reflect.Value, verb rune, depth int) {
+ // Handle values with special methods if not already handled by printArg (depth == 0).
+ if depth > 0 && value.IsValid() && value.CanInterface() {
+ p.arg = value.Interface()
+ if p.handleMethods(verb) {
+ return
+ }
+ }
+ p.arg = nil
+ p.value = value
+
+ switch f := value; value.Kind() {
+ case reflect.Invalid:
+ if depth == 0 {
+ p.WriteString(invReflectString)
+ } else {
+ switch verb {
+ case 'v':
+ p.WriteString(nilAngleString)
+ default:
+ p.badVerb(verb)
+ }
+ }
+ case reflect.Bool:
+ p.fmtBool(f.Bool(), verb)
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ p.fmtInteger(uint64(f.Int()), signed, verb)
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ p.fmtInteger(f.Uint(), unsigned, verb)
+ case reflect.Float32:
+ p.fmtFloat(f.Float(), 32, verb)
+ case reflect.Float64:
+ p.fmtFloat(f.Float(), 64, verb)
+ case reflect.Complex64:
+ p.fmtComplex(f.Complex(), 64, verb)
+ case reflect.Complex128:
+ p.fmtComplex(f.Complex(), 128, verb)
+ case reflect.String:
+ p.fmtString(f.String(), verb)
+ case reflect.Map:
+ if p.fmt.SharpV {
+ p.WriteString(f.Type().String())
+ if f.IsNil() {
+ p.WriteString(nilParenString)
+ return
+ }
+ p.WriteByte('{')
+ } else {
+ p.WriteString(mapString)
+ }
+ keys := f.MapKeys()
+ for i, key := range keys {
+ if i > 0 {
+ if p.fmt.SharpV {
+ p.WriteString(commaSpaceString)
+ } else {
+ p.WriteByte(' ')
+ }
+ }
+ p.printValue(key, verb, depth+1)
+ p.WriteByte(':')
+ p.printValue(f.MapIndex(key), verb, depth+1)
+ }
+ if p.fmt.SharpV {
+ p.WriteByte('}')
+ } else {
+ p.WriteByte(']')
+ }
+ case reflect.Struct:
+ if p.fmt.SharpV {
+ p.WriteString(f.Type().String())
+ }
+ p.WriteByte('{')
+ for i := 0; i < f.NumField(); i++ {
+ if i > 0 {
+ if p.fmt.SharpV {
+ p.WriteString(commaSpaceString)
+ } else {
+ p.WriteByte(' ')
+ }
+ }
+ if p.fmt.PlusV || p.fmt.SharpV {
+ if name := f.Type().Field(i).Name; name != "" {
+ p.WriteString(name)
+ p.WriteByte(':')
+ }
+ }
+ p.printValue(getField(f, i), verb, depth+1)
+ }
+ p.WriteByte('}')
+ case reflect.Interface:
+ value := f.Elem()
+ if !value.IsValid() {
+ if p.fmt.SharpV {
+ p.WriteString(f.Type().String())
+ p.WriteString(nilParenString)
+ } else {
+ p.WriteString(nilAngleString)
+ }
+ } else {
+ p.printValue(value, verb, depth+1)
+ }
+ case reflect.Array, reflect.Slice:
+ switch verb {
+ case 's', 'q', 'x', 'X':
+ // Handle byte and uint8 slices and arrays special for the above verbs.
+ t := f.Type()
+ if t.Elem().Kind() == reflect.Uint8 {
+ var bytes []byte
+ if f.Kind() == reflect.Slice {
+ bytes = f.Bytes()
+ } else if f.CanAddr() {
+ bytes = f.Slice(0, f.Len()).Bytes()
+ } else {
+ // We have an array, but we cannot Slice() a non-addressable array,
+ // so we build a slice by hand. This is a rare case but it would be nice
+ // if reflection could help a little more.
+ bytes = make([]byte, f.Len())
+ for i := range bytes {
+ bytes[i] = byte(f.Index(i).Uint())
+ }
+ }
+ p.fmtBytes(bytes, verb, t.String())
+ return
+ }
+ }
+ if p.fmt.SharpV {
+ p.WriteString(f.Type().String())
+ if f.Kind() == reflect.Slice && f.IsNil() {
+ p.WriteString(nilParenString)
+ return
+ }
+ p.WriteByte('{')
+ for i := 0; i < f.Len(); i++ {
+ if i > 0 {
+ p.WriteString(commaSpaceString)
+ }
+ p.printValue(f.Index(i), verb, depth+1)
+ }
+ p.WriteByte('}')
+ } else {
+ p.WriteByte('[')
+ for i := 0; i < f.Len(); i++ {
+ if i > 0 {
+ p.WriteByte(' ')
+ }
+ p.printValue(f.Index(i), verb, depth+1)
+ }
+ p.WriteByte(']')
+ }
+ case reflect.Ptr:
+ // pointer to array or slice or struct? ok at top level
+ // but not embedded (avoid loops)
+ if depth == 0 && f.Pointer() != 0 {
+ switch a := f.Elem(); a.Kind() {
+ case reflect.Array, reflect.Slice, reflect.Struct, reflect.Map:
+ p.WriteByte('&')
+ p.printValue(a, verb, depth+1)
+ return
+ }
+ }
+ fallthrough
+ case reflect.Chan, reflect.Func, reflect.UnsafePointer:
+ p.fmtPointer(f, verb)
+ default:
+ p.unknownType(f)
+ }
+}
+
+func (p *printer) badArgNum(verb rune) {
+ p.WriteString(percentBangString)
+ p.WriteRune(verb)
+ p.WriteString(badIndexString)
+}
+
+func (p *printer) missingArg(verb rune) {
+ p.WriteString(percentBangString)
+ p.WriteRune(verb)
+ p.WriteString(missingString)
+}
+
+func (p *printer) doPrintf(fmt string) {
+ for p.fmt.Parser.SetFormat(fmt); p.fmt.Scan(); {
+ switch p.fmt.Status {
+ case format.StatusText:
+ p.WriteString(p.fmt.Text())
+ case format.StatusSubstitution:
+ p.printArg(p.Arg(p.fmt.ArgNum), p.fmt.Verb)
+ case format.StatusBadWidthSubstitution:
+ p.WriteString(badWidthString)
+ p.printArg(p.Arg(p.fmt.ArgNum), p.fmt.Verb)
+ case format.StatusBadPrecSubstitution:
+ p.WriteString(badPrecString)
+ p.printArg(p.Arg(p.fmt.ArgNum), p.fmt.Verb)
+ case format.StatusNoVerb:
+ p.WriteString(noVerbString)
+ case format.StatusBadArgNum:
+ p.badArgNum(p.fmt.Verb)
+ case format.StatusMissingArg:
+ p.missingArg(p.fmt.Verb)
+ default:
+ panic("unreachable")
+ }
+ }
+
+ // Check for extra arguments, but only if there was at least one ordered
+ // argument. Note that this behavior is necessarily different from fmt:
+ // different variants of messages may opt to drop some or all of the
+ // arguments.
+ if !p.fmt.Reordered && p.fmt.ArgNum < len(p.fmt.Args) && p.fmt.ArgNum != 0 {
+ p.fmt.ClearFlags()
+ p.WriteString(extraString)
+ for i, arg := range p.fmt.Args[p.fmt.ArgNum:] {
+ if i > 0 {
+ p.WriteString(commaSpaceString)
+ }
+ if arg == nil {
+ p.WriteString(nilAngleString)
+ } else {
+ p.WriteString(reflect.TypeOf(arg).String())
+ p.WriteString("=")
+ p.printArg(arg, 'v')
+ }
+ }
+ p.WriteByte(')')
+ }
+}
+
+func (p *printer) doPrint(a []interface{}) {
+ prevString := false
+ for argNum, arg := range a {
+ isString := arg != nil && reflect.TypeOf(arg).Kind() == reflect.String
+ // Add a space between two non-string arguments.
+ if argNum > 0 && !isString && !prevString {
+ p.WriteByte(' ')
+ }
+ p.printArg(arg, 'v')
+ prevString = isString
+ }
+}
+
+// doPrintln is like doPrint but always adds a space between arguments
+// and a newline after the last argument.
+func (p *printer) doPrintln(a []interface{}) {
+ for argNum, arg := range a {
+ if argNum > 0 {
+ p.WriteByte(' ')
+ }
+ p.printArg(arg, 'v')
+ }
+ p.WriteByte('\n')
+}
diff --git a/vendor/google.golang.org/api/analytics/v3/analytics-gen.go b/vendor/google.golang.org/api/analytics/v3/analytics-gen.go
index d22eabbe..41f7dfa6 100644
--- a/vendor/google.golang.org/api/analytics/v3/analytics-gen.go
+++ b/vendor/google.golang.org/api/analytics/v3/analytics-gen.go
@@ -6027,7 +6027,7 @@ func (c *DataGaGetCall) Header() http.Header {
func (c *DataGaGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6316,7 +6316,7 @@ func (c *DataMcfGetCall) Header() http.Header {
func (c *DataMcfGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6557,7 +6557,7 @@ func (c *DataRealtimeGetCall) Header() http.Header {
func (c *DataRealtimeGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6745,7 +6745,7 @@ func (c *ManagementAccountSummariesListCall) Header() http.Header {
func (c *ManagementAccountSummariesListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6880,7 +6880,7 @@ func (c *ManagementAccountUserLinksDeleteCall) Header() http.Header {
func (c *ManagementAccountUserLinksDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6990,7 +6990,7 @@ func (c *ManagementAccountUserLinksInsertCall) Header() http.Header {
func (c *ManagementAccountUserLinksInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7152,7 +7152,7 @@ func (c *ManagementAccountUserLinksListCall) Header() http.Header {
func (c *ManagementAccountUserLinksListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7302,7 +7302,7 @@ func (c *ManagementAccountUserLinksUpdateCall) Header() http.Header {
func (c *ManagementAccountUserLinksUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7470,7 +7470,7 @@ func (c *ManagementAccountsListCall) Header() http.Header {
func (c *ManagementAccountsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7604,7 +7604,7 @@ func (c *ManagementClientIdHashClientIdCall) Header() http.Header {
func (c *ManagementClientIdHashClientIdCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7755,7 +7755,7 @@ func (c *ManagementCustomDataSourcesListCall) Header() http.Header {
func (c *ManagementCustomDataSourcesListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7927,7 +7927,7 @@ func (c *ManagementCustomDimensionsGetCall) Header() http.Header {
func (c *ManagementCustomDimensionsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8079,7 +8079,7 @@ func (c *ManagementCustomDimensionsInsertCall) Header() http.Header {
func (c *ManagementCustomDimensionsInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8251,7 +8251,7 @@ func (c *ManagementCustomDimensionsListCall) Header() http.Header {
func (c *ManagementCustomDimensionsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8420,7 +8420,7 @@ func (c *ManagementCustomDimensionsPatchCall) Header() http.Header {
func (c *ManagementCustomDimensionsPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8593,7 +8593,7 @@ func (c *ManagementCustomDimensionsUpdateCall) Header() http.Header {
func (c *ManagementCustomDimensionsUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8766,7 +8766,7 @@ func (c *ManagementCustomMetricsGetCall) Header() http.Header {
func (c *ManagementCustomMetricsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8918,7 +8918,7 @@ func (c *ManagementCustomMetricsInsertCall) Header() http.Header {
func (c *ManagementCustomMetricsInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -9090,7 +9090,7 @@ func (c *ManagementCustomMetricsListCall) Header() http.Header {
func (c *ManagementCustomMetricsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -9259,7 +9259,7 @@ func (c *ManagementCustomMetricsPatchCall) Header() http.Header {
func (c *ManagementCustomMetricsPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -9432,7 +9432,7 @@ func (c *ManagementCustomMetricsUpdateCall) Header() http.Header {
func (c *ManagementCustomMetricsUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -9596,7 +9596,7 @@ func (c *ManagementExperimentsDeleteCall) Header() http.Header {
func (c *ManagementExperimentsDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -9738,7 +9738,7 @@ func (c *ManagementExperimentsGetCall) Header() http.Header {
func (c *ManagementExperimentsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -9901,7 +9901,7 @@ func (c *ManagementExperimentsInsertCall) Header() http.Header {
func (c *ManagementExperimentsInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10084,7 +10084,7 @@ func (c *ManagementExperimentsListCall) Header() http.Header {
func (c *ManagementExperimentsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10258,7 +10258,7 @@ func (c *ManagementExperimentsPatchCall) Header() http.Header {
func (c *ManagementExperimentsPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10427,7 +10427,7 @@ func (c *ManagementExperimentsUpdateCall) Header() http.Header {
func (c *ManagementExperimentsUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10590,7 +10590,7 @@ func (c *ManagementFiltersDeleteCall) Header() http.Header {
func (c *ManagementFiltersDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10739,7 +10739,7 @@ func (c *ManagementFiltersGetCall) Header() http.Header {
func (c *ManagementFiltersGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10881,7 +10881,7 @@ func (c *ManagementFiltersInsertCall) Header() http.Header {
func (c *ManagementFiltersInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11043,7 +11043,7 @@ func (c *ManagementFiltersListCall) Header() http.Header {
func (c *ManagementFiltersListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11194,7 +11194,7 @@ func (c *ManagementFiltersPatchCall) Header() http.Header {
func (c *ManagementFiltersPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11342,7 +11342,7 @@ func (c *ManagementFiltersUpdateCall) Header() http.Header {
func (c *ManagementFiltersUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11503,7 +11503,7 @@ func (c *ManagementGoalsGetCall) Header() http.Header {
func (c *ManagementGoalsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11665,7 +11665,7 @@ func (c *ManagementGoalsInsertCall) Header() http.Header {
func (c *ManagementGoalsInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11847,7 +11847,7 @@ func (c *ManagementGoalsListCall) Header() http.Header {
func (c *ManagementGoalsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12018,7 +12018,7 @@ func (c *ManagementGoalsPatchCall) Header() http.Header {
func (c *ManagementGoalsPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12186,7 +12186,7 @@ func (c *ManagementGoalsUpdateCall) Header() http.Header {
func (c *ManagementGoalsUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12352,7 +12352,7 @@ func (c *ManagementProfileFilterLinksDeleteCall) Header() http.Header {
func (c *ManagementProfileFilterLinksDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12497,7 +12497,7 @@ func (c *ManagementProfileFilterLinksGetCall) Header() http.Header {
func (c *ManagementProfileFilterLinksGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12663,7 +12663,7 @@ func (c *ManagementProfileFilterLinksInsertCall) Header() http.Header {
func (c *ManagementProfileFilterLinksInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12848,7 +12848,7 @@ func (c *ManagementProfileFilterLinksListCall) Header() http.Header {
func (c *ManagementProfileFilterLinksListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -13019,7 +13019,7 @@ func (c *ManagementProfileFilterLinksPatchCall) Header() http.Header {
func (c *ManagementProfileFilterLinksPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -13191,7 +13191,7 @@ func (c *ManagementProfileFilterLinksUpdateCall) Header() http.Header {
func (c *ManagementProfileFilterLinksUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -13361,7 +13361,7 @@ func (c *ManagementProfileUserLinksDeleteCall) Header() http.Header {
func (c *ManagementProfileUserLinksDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -13491,7 +13491,7 @@ func (c *ManagementProfileUserLinksInsertCall) Header() http.Header {
func (c *ManagementProfileUserLinksInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -13673,7 +13673,7 @@ func (c *ManagementProfileUserLinksListCall) Header() http.Header {
func (c *ManagementProfileUserLinksListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -13843,7 +13843,7 @@ func (c *ManagementProfileUserLinksUpdateCall) Header() http.Header {
func (c *ManagementProfileUserLinksUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -14007,7 +14007,7 @@ func (c *ManagementProfilesDeleteCall) Header() http.Header {
func (c *ManagementProfilesDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -14138,7 +14138,7 @@ func (c *ManagementProfilesGetCall) Header() http.Header {
func (c *ManagementProfilesGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -14293,7 +14293,7 @@ func (c *ManagementProfilesInsertCall) Header() http.Header {
func (c *ManagementProfilesInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -14465,7 +14465,7 @@ func (c *ManagementProfilesListCall) Header() http.Header {
func (c *ManagementProfilesListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -14626,7 +14626,7 @@ func (c *ManagementProfilesPatchCall) Header() http.Header {
func (c *ManagementProfilesPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -14784,7 +14784,7 @@ func (c *ManagementProfilesUpdateCall) Header() http.Header {
func (c *ManagementProfilesUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -14940,7 +14940,7 @@ func (c *ManagementRemarketingAudienceDeleteCall) Header() http.Header {
func (c *ManagementRemarketingAudienceDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -15071,7 +15071,7 @@ func (c *ManagementRemarketingAudienceGetCall) Header() http.Header {
func (c *ManagementRemarketingAudienceGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -15223,7 +15223,7 @@ func (c *ManagementRemarketingAudienceInsertCall) Header() http.Header {
func (c *ManagementRemarketingAudienceInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -15401,7 +15401,7 @@ func (c *ManagementRemarketingAudienceListCall) Header() http.Header {
func (c *ManagementRemarketingAudienceListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -15566,7 +15566,7 @@ func (c *ManagementRemarketingAudiencePatchCall) Header() http.Header {
func (c *ManagementRemarketingAudiencePatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -15724,7 +15724,7 @@ func (c *ManagementRemarketingAudienceUpdateCall) Header() http.Header {
func (c *ManagementRemarketingAudienceUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -15900,7 +15900,7 @@ func (c *ManagementSegmentsListCall) Header() http.Header {
func (c *ManagementSegmentsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -16040,7 +16040,7 @@ func (c *ManagementUnsampledReportsDeleteCall) Header() http.Header {
func (c *ManagementUnsampledReportsDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -16181,7 +16181,7 @@ func (c *ManagementUnsampledReportsGetCall) Header() http.Header {
func (c *ManagementUnsampledReportsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -16344,7 +16344,7 @@ func (c *ManagementUnsampledReportsInsertCall) Header() http.Header {
func (c *ManagementUnsampledReportsInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -16527,7 +16527,7 @@ func (c *ManagementUnsampledReportsListCall) Header() http.Header {
func (c *ManagementUnsampledReportsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -16695,7 +16695,7 @@ func (c *ManagementUploadsDeleteUploadDataCall) Header() http.Header {
func (c *ManagementUploadsDeleteUploadDataCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -16840,7 +16840,7 @@ func (c *ManagementUploadsGetCall) Header() http.Header {
func (c *ManagementUploadsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -17031,7 +17031,7 @@ func (c *ManagementUploadsListCall) Header() http.Header {
func (c *ManagementUploadsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -17241,7 +17241,7 @@ func (c *ManagementUploadsUploadDataCall) Header() http.Header {
func (c *ManagementUploadsUploadDataCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -17437,7 +17437,7 @@ func (c *ManagementWebPropertyAdWordsLinksDeleteCall) Header() http.Header {
func (c *ManagementWebPropertyAdWordsLinksDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -17569,7 +17569,7 @@ func (c *ManagementWebPropertyAdWordsLinksGetCall) Header() http.Header {
func (c *ManagementWebPropertyAdWordsLinksGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -17721,7 +17721,7 @@ func (c *ManagementWebPropertyAdWordsLinksInsertCall) Header() http.Header {
func (c *ManagementWebPropertyAdWordsLinksInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -17893,7 +17893,7 @@ func (c *ManagementWebPropertyAdWordsLinksListCall) Header() http.Header {
func (c *ManagementWebPropertyAdWordsLinksListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -18054,7 +18054,7 @@ func (c *ManagementWebPropertyAdWordsLinksPatchCall) Header() http.Header {
func (c *ManagementWebPropertyAdWordsLinksPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -18212,7 +18212,7 @@ func (c *ManagementWebPropertyAdWordsLinksUpdateCall) Header() http.Header {
func (c *ManagementWebPropertyAdWordsLinksUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -18377,7 +18377,7 @@ func (c *ManagementWebpropertiesGetCall) Header() http.Header {
func (c *ManagementWebpropertiesGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -18523,7 +18523,7 @@ func (c *ManagementWebpropertiesInsertCall) Header() http.Header {
func (c *ManagementWebpropertiesInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -18685,7 +18685,7 @@ func (c *ManagementWebpropertiesListCall) Header() http.Header {
func (c *ManagementWebpropertiesListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -18836,7 +18836,7 @@ func (c *ManagementWebpropertiesPatchCall) Header() http.Header {
func (c *ManagementWebpropertiesPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -18984,7 +18984,7 @@ func (c *ManagementWebpropertiesUpdateCall) Header() http.Header {
func (c *ManagementWebpropertiesUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -19132,7 +19132,7 @@ func (c *ManagementWebpropertyUserLinksDeleteCall) Header() http.Header {
func (c *ManagementWebpropertyUserLinksDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -19252,7 +19252,7 @@ func (c *ManagementWebpropertyUserLinksInsertCall) Header() http.Header {
func (c *ManagementWebpropertyUserLinksInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -19424,7 +19424,7 @@ func (c *ManagementWebpropertyUserLinksListCall) Header() http.Header {
func (c *ManagementWebpropertyUserLinksListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -19584,7 +19584,7 @@ func (c *ManagementWebpropertyUserLinksUpdateCall) Header() http.Header {
func (c *ManagementWebpropertyUserLinksUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -19747,7 +19747,7 @@ func (c *MetadataColumnsListCall) Header() http.Header {
func (c *MetadataColumnsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -19881,7 +19881,7 @@ func (c *ProvisioningCreateAccountTicketCall) Header() http.Header {
func (c *ProvisioningCreateAccountTicketCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -20003,7 +20003,7 @@ func (c *ProvisioningCreateAccountTreeCall) Header() http.Header {
func (c *ProvisioningCreateAccountTreeCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -20125,7 +20125,7 @@ func (c *UserDeletionUserDeletionRequestUpsertCall) Header() http.Header {
func (c *UserDeletionUserDeletionRequestUpsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
diff --git a/vendor/google.golang.org/api/analyticsreporting/v4/analyticsreporting-gen.go b/vendor/google.golang.org/api/analyticsreporting/v4/analyticsreporting-gen.go
index 00fc47ba..07436cdc 100644
--- a/vendor/google.golang.org/api/analyticsreporting/v4/analyticsreporting-gen.go
+++ b/vendor/google.golang.org/api/analyticsreporting/v4/analyticsreporting-gen.go
@@ -3012,7 +3012,7 @@ func (c *ReportsBatchGetCall) Header() http.Header {
func (c *ReportsBatchGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -3138,7 +3138,7 @@ func (c *UserActivitySearchCall) Header() http.Header {
func (c *UserActivitySearchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
diff --git a/vendor/google.golang.org/api/calendar/v3/calendar-api.json b/vendor/google.golang.org/api/calendar/v3/calendar-api.json
index f20f9ced..eba1d20e 100644
--- a/vendor/google.golang.org/api/calendar/v3/calendar-api.json
+++ b/vendor/google.golang.org/api/calendar/v3/calendar-api.json
@@ -26,7 +26,7 @@
"description": "Manipulates events and other calendar data.",
"discoveryVersion": "v1",
"documentationLink": "https://developers.google.com/google-apps/calendar/firstapp",
- "etag": "\"LYADMvHWYH2ul9D6m9UT9gT77YM/2FyuV5GKtx7ICYqjtmyzVJzmBrs\"",
+ "etag": "\"F5McR9eEaw0XRpaO3M9gbIugkbs/GRm3c2ODiqPegIjaMSf2yLVHc90\"",
"icons": {
"x16": "http://www.google.com/images/icons/product/calendar-16.png",
"x32": "http://www.google.com/images/icons/product/calendar-32.png"
@@ -837,7 +837,7 @@
],
"parameters": {
"alwaysIncludeEmail": {
- "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
"location": "query",
"type": "boolean"
},
@@ -994,7 +994,7 @@
],
"parameters": {
"alwaysIncludeEmail": {
- "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
"location": "query",
"type": "boolean"
},
@@ -1078,7 +1078,7 @@
],
"parameters": {
"alwaysIncludeEmail": {
- "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
"location": "query",
"type": "boolean"
},
@@ -1267,7 +1267,7 @@
],
"parameters": {
"alwaysIncludeEmail": {
- "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
"location": "query",
"type": "boolean"
},
@@ -1397,7 +1397,7 @@
],
"parameters": {
"alwaysIncludeEmail": {
- "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
"location": "query",
"type": "boolean"
},
@@ -1475,7 +1475,7 @@
],
"parameters": {
"alwaysIncludeEmail": {
- "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
"location": "query",
"type": "boolean"
},
@@ -1724,7 +1724,7 @@
}
}
},
- "revision": "20190929",
+ "revision": "20191117",
"rootUrl": "https://www.googleapis.com/",
"schemas": {
"Acl": {
@@ -2354,7 +2354,7 @@
"type": "object"
},
"description": {
- "description": "Description of the event. Optional.",
+ "description": "Description of the event. Can contain HTML. Optional.",
"type": "string"
},
"end": {
diff --git a/vendor/google.golang.org/api/calendar/v3/calendar-gen.go b/vendor/google.golang.org/api/calendar/v3/calendar-gen.go
index 56fd1b50..d86da0e3 100644
--- a/vendor/google.golang.org/api/calendar/v3/calendar-gen.go
+++ b/vendor/google.golang.org/api/calendar/v3/calendar-gen.go
@@ -1334,7 +1334,7 @@ type Event struct {
// Creator: The creator of the event. Read-only.
Creator *EventCreator `json:"creator,omitempty"`
- // Description: Description of the event. Optional.
+ // Description: Description of the event. Can contain HTML. Optional.
Description string `json:"description,omitempty"`
// End: The (exclusive) end time of the event. For a recurring event,
@@ -2428,7 +2428,7 @@ func (c *AclDeleteCall) Header() http.Header {
func (c *AclDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -2549,7 +2549,7 @@ func (c *AclGetCall) Header() http.Header {
func (c *AclGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -2699,7 +2699,7 @@ func (c *AclInsertCall) Header() http.Header {
func (c *AclInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -2891,7 +2891,7 @@ func (c *AclListCall) Header() http.Header {
func (c *AclListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -3080,7 +3080,7 @@ func (c *AclPatchCall) Header() http.Header {
func (c *AclPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -3242,7 +3242,7 @@ func (c *AclUpdateCall) Header() http.Header {
func (c *AclUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -3433,7 +3433,7 @@ func (c *AclWatchCall) Header() http.Header {
func (c *AclWatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -3593,7 +3593,7 @@ func (c *CalendarListDeleteCall) Header() http.Header {
func (c *CalendarListDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -3704,7 +3704,7 @@ func (c *CalendarListGetCall) Header() http.Header {
func (c *CalendarListGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -3846,7 +3846,7 @@ func (c *CalendarListInsertCall) Header() http.Header {
func (c *CalendarListInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -4049,7 +4049,7 @@ func (c *CalendarListListCall) Header() http.Header {
func (c *CalendarListListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -4248,7 +4248,7 @@ func (c *CalendarListPatchCall) Header() http.Header {
func (c *CalendarListPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -4401,7 +4401,7 @@ func (c *CalendarListUpdateCall) Header() http.Header {
func (c *CalendarListUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -4607,7 +4607,7 @@ func (c *CalendarListWatchCall) Header() http.Header {
func (c *CalendarListWatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -4779,7 +4779,7 @@ func (c *CalendarsClearCall) Header() http.Header {
func (c *CalendarsClearCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -4880,7 +4880,7 @@ func (c *CalendarsDeleteCall) Header() http.Header {
func (c *CalendarsDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -4991,7 +4991,7 @@ func (c *CalendarsGetCall) Header() http.Header {
func (c *CalendarsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -5123,7 +5123,7 @@ func (c *CalendarsInsertCall) Header() http.Header {
func (c *CalendarsInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -5248,7 +5248,7 @@ func (c *CalendarsPatchCall) Header() http.Header {
func (c *CalendarsPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -5386,7 +5386,7 @@ func (c *CalendarsUpdateCall) Header() http.Header {
func (c *CalendarsUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -5522,7 +5522,7 @@ func (c *ChannelsStopCall) Header() http.Header {
func (c *ChannelsStopCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -5630,7 +5630,7 @@ func (c *ColorsGetCall) Header() http.Header {
func (c *ColorsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -5776,7 +5776,7 @@ func (c *EventsDeleteCall) Header() http.Header {
func (c *EventsDeleteCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -5882,12 +5882,10 @@ func (r *EventsService) Get(calendarId string, eventId string) *EventsGetCall {
}
// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail":
-// Whether to always include a value in the email field for the
-// organizer, creator and attendees, even if no real email is available
-// (i.e. a generated, non-working value will be provided). The use of
-// this option is discouraged and should only be used by clients which
-// cannot handle the absence of an email address value in the mentioned
-// places. The default is False.
+// Deprecated and ignored. A value will always be returned in the email
+// field for the organizer, creator and attendees, even if no real email
+// address is available (i.e. a generated, non-working value will be
+// provided).
func (c *EventsGetCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsGetCall {
c.urlParams_.Set("alwaysIncludeEmail", fmt.Sprint(alwaysIncludeEmail))
return c
@@ -5946,7 +5944,7 @@ func (c *EventsGetCall) Header() http.Header {
func (c *EventsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6018,7 +6016,7 @@ func (c *EventsGetCall) Do(opts ...googleapi.CallOption) (*Event, error) {
// ],
// "parameters": {
// "alwaysIncludeEmail": {
- // "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ // "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
// "location": "query",
// "type": "boolean"
// },
@@ -6128,7 +6126,7 @@ func (c *EventsImportCall) Header() http.Header {
func (c *EventsImportCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6336,7 +6334,7 @@ func (c *EventsInsertCall) Header() http.Header {
func (c *EventsInsertCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6490,12 +6488,10 @@ func (r *EventsService) Instances(calendarId string, eventId string) *EventsInst
}
// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail":
-// Whether to always include a value in the email field for the
-// organizer, creator and attendees, even if no real email is available
-// (i.e. a generated, non-working value will be provided). The use of
-// this option is discouraged and should only be used by clients which
-// cannot handle the absence of an email address value in the mentioned
-// places. The default is False.
+// Deprecated and ignored. A value will always be returned in the email
+// field for the organizer, creator and attendees, even if no real email
+// address is available (i.e. a generated, non-working value will be
+// provided).
func (c *EventsInstancesCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsInstancesCall {
c.urlParams_.Set("alwaysIncludeEmail", fmt.Sprint(alwaysIncludeEmail))
return c
@@ -6603,7 +6599,7 @@ func (c *EventsInstancesCall) Header() http.Header {
func (c *EventsInstancesCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -6675,7 +6671,7 @@ func (c *EventsInstancesCall) Do(opts ...googleapi.CallOption) (*Events, error)
// ],
// "parameters": {
// "alwaysIncludeEmail": {
- // "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ // "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
// "location": "query",
// "type": "boolean"
// },
@@ -6793,12 +6789,10 @@ func (r *EventsService) List(calendarId string) *EventsListCall {
}
// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail":
-// Whether to always include a value in the email field for the
-// organizer, creator and attendees, even if no real email is available
-// (i.e. a generated, non-working value will be provided). The use of
-// this option is discouraged and should only be used by clients which
-// cannot handle the absence of an email address value in the mentioned
-// places. The default is False.
+// Deprecated and ignored. A value will always be returned in the email
+// field for the organizer, creator and attendees, even if no real email
+// address is available (i.e. a generated, non-working value will be
+// provided).
func (c *EventsListCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsListCall {
c.urlParams_.Set("alwaysIncludeEmail", fmt.Sprint(alwaysIncludeEmail))
return c
@@ -7013,7 +7007,7 @@ func (c *EventsListCall) Header() http.Header {
func (c *EventsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7083,7 +7077,7 @@ func (c *EventsListCall) Do(opts ...googleapi.CallOption) (*Events, error) {
// ],
// "parameters": {
// "alwaysIncludeEmail": {
- // "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ // "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
// "location": "query",
// "type": "boolean"
// },
@@ -7303,7 +7297,7 @@ func (c *EventsMoveCall) Header() http.Header {
func (c *EventsMoveCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7445,12 +7439,10 @@ func (r *EventsService) Patch(calendarId string, eventId string, event *Event) *
}
// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail":
-// Whether to always include a value in the email field for the
-// organizer, creator and attendees, even if no real email is available
-// (i.e. a generated, non-working value will be provided). The use of
-// this option is discouraged and should only be used by clients which
-// cannot handle the absence of an email address value in the mentioned
-// places. The default is False.
+// Deprecated and ignored. A value will always be returned in the email
+// field for the organizer, creator and attendees, even if no real email
+// address is available (i.e. a generated, non-working value will be
+// provided).
func (c *EventsPatchCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsPatchCall {
c.urlParams_.Set("alwaysIncludeEmail", fmt.Sprint(alwaysIncludeEmail))
return c
@@ -7539,7 +7531,7 @@ func (c *EventsPatchCall) Header() http.Header {
func (c *EventsPatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7613,7 +7605,7 @@ func (c *EventsPatchCall) Do(opts ...googleapi.CallOption) (*Event, error) {
// ],
// "parameters": {
// "alwaysIncludeEmail": {
- // "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ // "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
// "location": "query",
// "type": "boolean"
// },
@@ -7756,7 +7748,7 @@ func (c *EventsQuickAddCall) Header() http.Header {
func (c *EventsQuickAddCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -7890,12 +7882,10 @@ func (r *EventsService) Update(calendarId string, eventId string, event *Event)
}
// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail":
-// Whether to always include a value in the email field for the
-// organizer, creator and attendees, even if no real email is available
-// (i.e. a generated, non-working value will be provided). The use of
-// this option is discouraged and should only be used by clients which
-// cannot handle the absence of an email address value in the mentioned
-// places. The default is False.
+// Deprecated and ignored. A value will always be returned in the email
+// field for the organizer, creator and attendees, even if no real email
+// address is available (i.e. a generated, non-working value will be
+// provided).
func (c *EventsUpdateCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsUpdateCall {
c.urlParams_.Set("alwaysIncludeEmail", fmt.Sprint(alwaysIncludeEmail))
return c
@@ -7984,7 +7974,7 @@ func (c *EventsUpdateCall) Header() http.Header {
func (c *EventsUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8058,7 +8048,7 @@ func (c *EventsUpdateCall) Do(opts ...googleapi.CallOption) (*Event, error) {
// ],
// "parameters": {
// "alwaysIncludeEmail": {
- // "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ // "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
// "location": "query",
// "type": "boolean"
// },
@@ -8150,12 +8140,10 @@ func (r *EventsService) Watch(calendarId string, channel *Channel) *EventsWatchC
}
// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail":
-// Whether to always include a value in the email field for the
-// organizer, creator and attendees, even if no real email is available
-// (i.e. a generated, non-working value will be provided). The use of
-// this option is discouraged and should only be used by clients which
-// cannot handle the absence of an email address value in the mentioned
-// places. The default is False.
+// Deprecated and ignored. A value will always be returned in the email
+// field for the organizer, creator and attendees, even if no real email
+// address is available (i.e. a generated, non-working value will be
+// provided).
func (c *EventsWatchCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsWatchCall {
c.urlParams_.Set("alwaysIncludeEmail", fmt.Sprint(alwaysIncludeEmail))
return c
@@ -8360,7 +8348,7 @@ func (c *EventsWatchCall) Header() http.Header {
func (c *EventsWatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8432,7 +8420,7 @@ func (c *EventsWatchCall) Do(opts ...googleapi.CallOption) (*Channel, error) {
// ],
// "parameters": {
// "alwaysIncludeEmail": {
- // "description": "Whether to always include a value in the email field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.",
+ // "description": "Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).",
// "location": "query",
// "type": "boolean"
// },
@@ -8604,7 +8592,7 @@ func (c *FreebusyQueryCall) Header() http.Header {
func (c *FreebusyQueryCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8738,7 +8726,7 @@ func (c *SettingsGetCall) Header() http.Header {
func (c *SettingsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -8909,7 +8897,7 @@ func (c *SettingsListCall) Header() http.Header {
func (c *SettingsListCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -9098,7 +9086,7 @@ func (c *SettingsWatchCall) Header() http.Header {
func (c *SettingsWatchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
diff --git a/vendor/google.golang.org/api/googleapi/transport/apikey.go b/vendor/google.golang.org/api/googleapi/transport/apikey.go
index 4b6c0d52..61720ec2 100644
--- a/vendor/google.golang.org/api/googleapi/transport/apikey.go
+++ b/vendor/google.golang.org/api/googleapi/transport/apikey.go
@@ -4,6 +4,10 @@
// Package transport contains HTTP transports used to make
// authenticated API requests.
+//
+// This package is DEPRECATED. Users should instead use,
+//
+// service, err := NewService(..., option.WithAPIKey(...))
package transport
import (
@@ -13,6 +17,8 @@ import (
// APIKey is an HTTP Transport which wraps an underlying transport and
// appends an API Key "key" parameter to the URL of outgoing requests.
+//
+// Deprecated: please use NewService(..., option.WithAPIKey(...)) instead.
type APIKey struct {
// Key is the API Key to set on requests.
Key string
diff --git a/vendor/google.golang.org/api/internal/gensupport/media.go b/vendor/google.golang.org/api/internal/gensupport/media.go
index 0ef96b3f..0288cc30 100644
--- a/vendor/google.golang.org/api/internal/gensupport/media.go
+++ b/vendor/google.golang.org/api/internal/gensupport/media.go
@@ -290,6 +290,9 @@ func (mi *MediaInfo) UploadRequest(reqHeaders http.Header, body io.Reader) (newB
fb := readerFunc(body)
fm := readerFunc(media)
combined, ctype := CombineBodyMedia(body, "application/json", media, mi.mType)
+ toCleanup := []io.Closer{
+ combined,
+ }
if fb != nil && fm != nil {
getBody = func() (io.ReadCloser, error) {
rb := ioutil.NopCloser(fb())
@@ -299,10 +302,16 @@ func (mi *MediaInfo) UploadRequest(reqHeaders http.Header, body io.Reader) (newB
mimeBoundary = params["boundary"]
}
r, _ := combineBodyMedia(rb, "application/json", rm, mi.mType, mimeBoundary)
+ toCleanup = append(toCleanup, r)
return r, nil
}
}
- cleanup = func() { combined.Close() }
+ cleanup = func() {
+ for _, closer := range toCleanup {
+ _ = closer.Close()
+ }
+
+ }
reqHeaders.Set("Content-Type", ctype)
body = combined
}
diff --git a/vendor/google.golang.org/api/option/option.go b/vendor/google.golang.org/api/option/option.go
index 8a4cd166..0d9ae4e7 100644
--- a/vendor/google.golang.org/api/option/option.go
+++ b/vendor/google.golang.org/api/option/option.go
@@ -114,7 +114,7 @@ func (w withHTTPClient) Apply(o *internal.DialSettings) {
}
// WithGRPCConn returns a ClientOption that specifies the gRPC client
-// connection to use as the basis of communications. This option many only be
+// connection to use as the basis of communications. This option may only be
// used with services that support gRPC as their communication transport. When
// used, the WithGRPCConn option takes precedent over all other supplied
// options.
diff --git a/vendor/google.golang.org/api/sheets/v4/sheets-api.json b/vendor/google.golang.org/api/sheets/v4/sheets-api.json
index 05ca73bf..5a2db6a1 100644
--- a/vendor/google.golang.org/api/sheets/v4/sheets-api.json
+++ b/vendor/google.golang.org/api/sheets/v4/sheets-api.json
@@ -809,7 +809,7 @@
}
}
},
- "revision": "20191105",
+ "revision": "20191213",
"rootUrl": "https://sheets.googleapis.com/",
"schemas": {
"AddBandingRequest": {
@@ -2545,6 +2545,45 @@
},
"type": "object"
},
+ "ColorStyle": {
+ "description": "A color value.",
+ "id": "ColorStyle",
+ "properties": {
+ "rgbColor": {
+ "$ref": "Color",
+ "description": "RGB color."
+ },
+ "themeColor": {
+ "description": "Theme color.",
+ "enum": [
+ "THEME_COLOR_TYPE_UNSPECIFIED",
+ "TEXT",
+ "BACKGROUND",
+ "ACCENT1",
+ "ACCENT2",
+ "ACCENT3",
+ "ACCENT4",
+ "ACCENT5",
+ "ACCENT6",
+ "LINK"
+ ],
+ "enumDescriptions": [
+ "Unspecified theme color",
+ "Represents the primary text color",
+ "Represents the primary background color",
+ "Represents the first accent color",
+ "Represents the second accent color",
+ "Represents the third accent color",
+ "Represents the fourth accent color",
+ "Represents the fifth accent color",
+ "Represents the sixth accent color",
+ "Represents the color to use for hyperlinks"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
"ConditionValue": {
"description": "The value of the condition.",
"id": "ConditionValue",
@@ -3485,7 +3524,7 @@
"properties": {
"condition": {
"$ref": "BooleanCondition",
- "description": "A condition that must be true for values to be shown.\n(This does not override hiddenValues -- if a value is listed there,\n it will still be hidden.)"
+ "description": "A condition that must be true for values to be shown.\n(This does not override hidden_values -- if a value is listed there,\n it will still be hidden.)"
},
"hiddenValues": {
"description": "Values that should be hidden.",
@@ -5534,6 +5573,10 @@
"description": "The locale of the spreadsheet in one of the following formats:\n\n* an ISO 639-1 language code such as `en`\n\n* an ISO 639-2 language code such as `fil`, if no 639-1 code exists\n\n* a combination of the ISO language code and country code, such as `en_US`\n\nNote: when updating this field, not all locales/languages are supported.",
"type": "string"
},
+ "spreadsheetTheme": {
+ "$ref": "SpreadsheetTheme",
+ "description": "Theme applied to the spreadsheet."
+ },
"timeZone": {
"description": "The time zone of the spreadsheet, in CLDR format such as\n`America/New_York`. If the time zone isn't recognized, this may\nbe a custom time zone such as `GMT-07:00`.",
"type": "string"
@@ -5545,6 +5588,24 @@
},
"type": "object"
},
+ "SpreadsheetTheme": {
+ "description": "Represents spreadsheet theme",
+ "id": "SpreadsheetTheme",
+ "properties": {
+ "primaryFontFamily": {
+ "description": "/ Name of the primary font family.",
+ "type": "string"
+ },
+ "themeColors": {
+ "description": "The spreadsheet theme color pairs. For update users need to give all pairs\nof theme colors.",
+ "items": {
+ "$ref": "ThemeColorPair"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
"TextFormat": {
"description": "The format of a run of text in a cell.\nAbsent values indicate that the field isn't specified.",
"id": "TextFormat",
@@ -5673,6 +5734,45 @@
},
"type": "object"
},
+ "ThemeColorPair": {
+ "description": "A pair mapping a spreadsheet theme color type to the concrete color it\nrepresents.",
+ "id": "ThemeColorPair",
+ "properties": {
+ "color": {
+ "$ref": "ColorStyle",
+ "description": "The concrete color corresponding to the theme color type."
+ },
+ "colorType": {
+ "description": "The type of the spreadsheet theme color.",
+ "enum": [
+ "THEME_COLOR_TYPE_UNSPECIFIED",
+ "TEXT",
+ "BACKGROUND",
+ "ACCENT1",
+ "ACCENT2",
+ "ACCENT3",
+ "ACCENT4",
+ "ACCENT5",
+ "ACCENT6",
+ "LINK"
+ ],
+ "enumDescriptions": [
+ "Unspecified theme color",
+ "Represents the primary text color",
+ "Represents the primary background color",
+ "Represents the first accent color",
+ "Represents the second accent color",
+ "Represents the third accent color",
+ "Represents the fourth accent color",
+ "Represents the fifth accent color",
+ "Represents the sixth accent color",
+ "Represents the color to use for hyperlinks"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
"TreemapChartColorScale": {
"description": "A color scale for a treemap chart.",
"id": "TreemapChartColorScale",
@@ -6104,7 +6204,7 @@
"type": "object"
},
"UpdateSlicerSpecRequest": {
- "description": "Updates a slicer’s specifications.\n(This does not move or resize a slicer. To move or resize a slicer use\nUpdateEmbeddedObjectPositionRequest.",
+ "description": "Updates a slicer's specifications.\n(This does not move or resize a slicer. To move or resize a slicer use\nUpdateEmbeddedObjectPositionRequest.",
"id": "UpdateSlicerSpecRequest",
"properties": {
"fields": {
diff --git a/vendor/google.golang.org/api/sheets/v4/sheets-gen.go b/vendor/google.golang.org/api/sheets/v4/sheets-gen.go
index 5535c96b..9b594870 100644
--- a/vendor/google.golang.org/api/sheets/v4/sheets-gen.go
+++ b/vendor/google.golang.org/api/sheets/v4/sheets-gen.go
@@ -3614,6 +3614,49 @@ func (s *Color) UnmarshalJSON(data []byte) error {
return nil
}
+// ColorStyle: A color value.
+type ColorStyle struct {
+ // RgbColor: RGB color.
+ RgbColor *Color `json:"rgbColor,omitempty"`
+
+ // ThemeColor: Theme color.
+ //
+ // Possible values:
+ // "THEME_COLOR_TYPE_UNSPECIFIED" - Unspecified theme color
+ // "TEXT" - Represents the primary text color
+ // "BACKGROUND" - Represents the primary background color
+ // "ACCENT1" - Represents the first accent color
+ // "ACCENT2" - Represents the second accent color
+ // "ACCENT3" - Represents the third accent color
+ // "ACCENT4" - Represents the fourth accent color
+ // "ACCENT5" - Represents the fifth accent color
+ // "ACCENT6" - Represents the sixth accent color
+ // "LINK" - Represents the color to use for hyperlinks
+ ThemeColor string `json:"themeColor,omitempty"`
+
+ // ForceSendFields is a list of field names (e.g. "RgbColor") to
+ // unconditionally include in API requests. By default, fields with
+ // empty values are omitted from API requests. However, any non-pointer,
+ // non-interface field appearing in ForceSendFields will be sent to the
+ // server regardless of whether the field is empty or not. This may be
+ // used to include empty fields in Patch requests.
+ ForceSendFields []string `json:"-"`
+
+ // NullFields is a list of field names (e.g. "RgbColor") to include in
+ // API requests with the JSON null value. By default, fields with empty
+ // values are omitted from API requests. However, any field with an
+ // empty value appearing in NullFields will be sent to the server as
+ // null. It is an error if a field in this list has a non-empty value.
+ // This may be used to include null fields in Patch requests.
+ NullFields []string `json:"-"`
+}
+
+func (s *ColorStyle) MarshalJSON() ([]byte, error) {
+ type NoMethod ColorStyle
+ raw := NoMethod(*s)
+ return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
// ConditionValue: The value of the condition.
type ConditionValue struct {
// RelativeDate: A relative date (based on the current date).
@@ -5407,7 +5450,7 @@ func (s *ExtendedValue) UnmarshalJSON(data []byte) error {
type FilterCriteria struct {
// Condition: A condition that must be true for values to be
// shown.
- // (This does not override hiddenValues -- if a value is listed there,
+ // (This does not override hidden_values -- if a value is listed there,
// it will still be hidden.)
Condition *BooleanCondition `json:"condition,omitempty"`
@@ -8670,6 +8713,9 @@ type SpreadsheetProperties struct {
// supported.
Locale string `json:"locale,omitempty"`
+ // SpreadsheetTheme: Theme applied to the spreadsheet.
+ SpreadsheetTheme *SpreadsheetTheme `json:"spreadsheetTheme,omitempty"`
+
// TimeZone: The time zone of the spreadsheet, in CLDR format such
// as
// `America/New_York`. If the time zone isn't recognized, this may
@@ -8702,6 +8748,40 @@ func (s *SpreadsheetProperties) MarshalJSON() ([]byte, error) {
return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
}
+// SpreadsheetTheme: Represents spreadsheet theme
+type SpreadsheetTheme struct {
+ // PrimaryFontFamily: / Name of the primary font family.
+ PrimaryFontFamily string `json:"primaryFontFamily,omitempty"`
+
+ // ThemeColors: The spreadsheet theme color pairs. For update users need
+ // to give all pairs
+ // of theme colors.
+ ThemeColors []*ThemeColorPair `json:"themeColors,omitempty"`
+
+ // ForceSendFields is a list of field names (e.g. "PrimaryFontFamily")
+ // to unconditionally include in API requests. By default, fields with
+ // empty values are omitted from API requests. However, any non-pointer,
+ // non-interface field appearing in ForceSendFields will be sent to the
+ // server regardless of whether the field is empty or not. This may be
+ // used to include empty fields in Patch requests.
+ ForceSendFields []string `json:"-"`
+
+ // NullFields is a list of field names (e.g. "PrimaryFontFamily") to
+ // include in API requests with the JSON null value. By default, fields
+ // with empty values are omitted from API requests. However, any field
+ // with an empty value appearing in NullFields will be sent to the
+ // server as null. It is an error if a field in this list has a
+ // non-empty value. This may be used to include null fields in Patch
+ // requests.
+ NullFields []string `json:"-"`
+}
+
+func (s *SpreadsheetTheme) MarshalJSON() ([]byte, error) {
+ type NoMethod SpreadsheetTheme
+ raw := NoMethod(*s)
+ return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
// TextFormat: The format of a run of text in a cell.
// Absent values indicate that the field isn't specified.
type TextFormat struct {
@@ -8923,6 +9003,51 @@ func (s *TextToColumnsRequest) MarshalJSON() ([]byte, error) {
return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
}
+// ThemeColorPair: A pair mapping a spreadsheet theme color type to the
+// concrete color it
+// represents.
+type ThemeColorPair struct {
+ // Color: The concrete color corresponding to the theme color type.
+ Color *ColorStyle `json:"color,omitempty"`
+
+ // ColorType: The type of the spreadsheet theme color.
+ //
+ // Possible values:
+ // "THEME_COLOR_TYPE_UNSPECIFIED" - Unspecified theme color
+ // "TEXT" - Represents the primary text color
+ // "BACKGROUND" - Represents the primary background color
+ // "ACCENT1" - Represents the first accent color
+ // "ACCENT2" - Represents the second accent color
+ // "ACCENT3" - Represents the third accent color
+ // "ACCENT4" - Represents the fourth accent color
+ // "ACCENT5" - Represents the fifth accent color
+ // "ACCENT6" - Represents the sixth accent color
+ // "LINK" - Represents the color to use for hyperlinks
+ ColorType string `json:"colorType,omitempty"`
+
+ // ForceSendFields is a list of field names (e.g. "Color") to
+ // unconditionally include in API requests. By default, fields with
+ // empty values are omitted from API requests. However, any non-pointer,
+ // non-interface field appearing in ForceSendFields will be sent to the
+ // server regardless of whether the field is empty or not. This may be
+ // used to include empty fields in Patch requests.
+ ForceSendFields []string `json:"-"`
+
+ // NullFields is a list of field names (e.g. "Color") to include in API
+ // requests with the JSON null value. By default, fields with empty
+ // values are omitted from API requests. However, any field with an
+ // empty value appearing in NullFields will be sent to the server as
+ // null. It is an error if a field in this list has a non-empty value.
+ // This may be used to include null fields in Patch requests.
+ NullFields []string `json:"-"`
+}
+
+func (s *ThemeColorPair) MarshalJSON() ([]byte, error) {
+ type NoMethod ThemeColorPair
+ raw := NoMethod(*s)
+ return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
// TreemapChartColorScale: A color scale for a treemap chart.
type TreemapChartColorScale struct {
// MaxValueColor: The background color for cells with a color value
@@ -9834,7 +9959,7 @@ func (s *UpdateSheetPropertiesRequest) MarshalJSON() ([]byte, error) {
return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
}
-// UpdateSlicerSpecRequest: Updates a slicer’s specifications.
+// UpdateSlicerSpecRequest: Updates a slicer's specifications.
// (This does not move or resize a slicer. To move or resize a slicer
// use
// UpdateEmbeddedObjectPositionRequest.
@@ -10388,7 +10513,7 @@ func (c *SpreadsheetsBatchUpdateCall) Header() http.Header {
func (c *SpreadsheetsBatchUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10528,7 +10653,7 @@ func (c *SpreadsheetsCreateCall) Header() http.Header {
func (c *SpreadsheetsCreateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10705,7 +10830,7 @@ func (c *SpreadsheetsGetCall) Header() http.Header {
func (c *SpreadsheetsGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -10881,7 +11006,7 @@ func (c *SpreadsheetsGetByDataFilterCall) Header() http.Header {
func (c *SpreadsheetsGetByDataFilterCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11036,7 +11161,7 @@ func (c *SpreadsheetsDeveloperMetadataGetCall) Header() http.Header {
func (c *SpreadsheetsDeveloperMetadataGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11190,7 +11315,7 @@ func (c *SpreadsheetsDeveloperMetadataSearchCall) Header() http.Header {
func (c *SpreadsheetsDeveloperMetadataSearchCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11335,7 +11460,7 @@ func (c *SpreadsheetsSheetsCopyToCall) Header() http.Header {
func (c *SpreadsheetsSheetsCopyToCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11571,7 +11696,7 @@ func (c *SpreadsheetsValuesAppendCall) Header() http.Header {
func (c *SpreadsheetsValuesAppendCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11769,7 +11894,7 @@ func (c *SpreadsheetsValuesBatchClearCall) Header() http.Header {
func (c *SpreadsheetsValuesBatchClearCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -11917,7 +12042,7 @@ func (c *SpreadsheetsValuesBatchClearByDataFilterCall) Header() http.Header {
func (c *SpreadsheetsValuesBatchClearByDataFilterCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12126,7 +12251,7 @@ func (c *SpreadsheetsValuesBatchGetCall) Header() http.Header {
func (c *SpreadsheetsValuesBatchGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12304,7 +12429,7 @@ func (c *SpreadsheetsValuesBatchGetByDataFilterCall) Header() http.Header {
func (c *SpreadsheetsValuesBatchGetByDataFilterCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12449,7 +12574,7 @@ func (c *SpreadsheetsValuesBatchUpdateCall) Header() http.Header {
func (c *SpreadsheetsValuesBatchUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12594,7 +12719,7 @@ func (c *SpreadsheetsValuesBatchUpdateByDataFilterCall) Header() http.Header {
func (c *SpreadsheetsValuesBatchUpdateByDataFilterCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12742,7 +12867,7 @@ func (c *SpreadsheetsValuesClearCall) Header() http.Header {
func (c *SpreadsheetsValuesClearCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -12952,7 +13077,7 @@ func (c *SpreadsheetsValuesGetCall) Header() http.Header {
func (c *SpreadsheetsValuesGetCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
@@ -13190,7 +13315,7 @@ func (c *SpreadsheetsValuesUpdateCall) Header() http.Header {
func (c *SpreadsheetsValuesUpdateCall) doRequest(alt string) (*http.Response, error) {
reqHeaders := make(http.Header)
- reqHeaders.Set("x-goog-api-client", "gl-go/1.13.4 gdcl/20191114")
+ reqHeaders.Set("x-goog-api-client", "gl-go/1.11.0 gdcl/20191216")
for k, v := range c.header_ {
reqHeaders[k] = v
}
diff --git a/vendor/gotest.tools/LICENSE b/vendor/gotest.tools/LICENSE
new file mode 100644
index 00000000..aeaa2fac
--- /dev/null
+++ b/vendor/gotest.tools/LICENSE
@@ -0,0 +1,13 @@
+Copyright 2018 gotest.tools authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/vendor/gotest.tools/assert/assert.go b/vendor/gotest.tools/assert/assert.go
new file mode 100644
index 00000000..05d66354
--- /dev/null
+++ b/vendor/gotest.tools/assert/assert.go
@@ -0,0 +1,311 @@
+/*Package assert provides assertions for comparing expected values to actual
+values. When an assertion fails a helpful error message is printed.
+
+Assert and Check
+
+Assert() and Check() both accept a Comparison, and fail the test when the
+comparison fails. The one difference is that Assert() will end the test execution
+immediately (using t.FailNow()) whereas Check() will fail the test (using t.Fail()),
+return the value of the comparison, then proceed with the rest of the test case.
+
+Example usage
+
+The example below shows assert used with some common types.
+
+
+ import (
+ "testing"
+
+ "gotest.tools/assert"
+ is "gotest.tools/assert/cmp"
+ )
+
+ func TestEverything(t *testing.T) {
+ // booleans
+ assert.Assert(t, ok)
+ assert.Assert(t, !missing)
+
+ // primitives
+ assert.Equal(t, count, 1)
+ assert.Equal(t, msg, "the message")
+ assert.Assert(t, total != 10) // NotEqual
+
+ // errors
+ assert.NilError(t, closer.Close())
+ assert.Error(t, err, "the exact error message")
+ assert.ErrorContains(t, err, "includes this")
+ assert.ErrorType(t, err, os.IsNotExist)
+
+ // complex types
+ assert.DeepEqual(t, result, myStruct{Name: "title"})
+ assert.Assert(t, is.Len(items, 3))
+ assert.Assert(t, len(sequence) != 0) // NotEmpty
+ assert.Assert(t, is.Contains(mapping, "key"))
+
+ // pointers and interface
+ assert.Assert(t, is.Nil(ref))
+ assert.Assert(t, ref != nil) // NotNil
+ }
+
+Comparisons
+
+Package https://godoc.org/gotest.tools/assert/cmp provides
+many common comparisons. Additional comparisons can be written to compare
+values in other ways. See the example Assert (CustomComparison).
+
+Automated migration from testify
+
+gty-migrate-from-testify is a binary which can update source code which uses
+testify assertions to use the assertions provided by this package.
+
+See http://bit.do/cmd-gty-migrate-from-testify.
+
+
+*/
+package assert // import "gotest.tools/assert"
+
+import (
+ "fmt"
+ "go/ast"
+ "go/token"
+
+ gocmp "github.com/google/go-cmp/cmp"
+ "gotest.tools/assert/cmp"
+ "gotest.tools/internal/format"
+ "gotest.tools/internal/source"
+)
+
+// BoolOrComparison can be a bool, or cmp.Comparison. See Assert() for usage.
+type BoolOrComparison interface{}
+
+// TestingT is the subset of testing.T used by the assert package.
+type TestingT interface {
+ FailNow()
+ Fail()
+ Log(args ...interface{})
+}
+
+type helperT interface {
+ Helper()
+}
+
+const failureMessage = "assertion failed: "
+
+// nolint: gocyclo
+func assert(
+ t TestingT,
+ failer func(),
+ argSelector argSelector,
+ comparison BoolOrComparison,
+ msgAndArgs ...interface{},
+) bool {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ var success bool
+ switch check := comparison.(type) {
+ case bool:
+ if check {
+ return true
+ }
+ logFailureFromBool(t, msgAndArgs...)
+
+ // Undocumented legacy comparison without Result type
+ case func() (success bool, message string):
+ success = runCompareFunc(t, check, msgAndArgs...)
+
+ case nil:
+ return true
+
+ case error:
+ msg := "error is not nil: "
+ t.Log(format.WithCustomMessage(failureMessage+msg+check.Error(), msgAndArgs...))
+
+ case cmp.Comparison:
+ success = runComparison(t, argSelector, check, msgAndArgs...)
+
+ case func() cmp.Result:
+ success = runComparison(t, argSelector, check, msgAndArgs...)
+
+ default:
+ t.Log(fmt.Sprintf("invalid Comparison: %v (%T)", check, check))
+ }
+
+ if success {
+ return true
+ }
+ failer()
+ return false
+}
+
+func runCompareFunc(
+ t TestingT,
+ f func() (success bool, message string),
+ msgAndArgs ...interface{},
+) bool {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ if success, message := f(); !success {
+ t.Log(format.WithCustomMessage(failureMessage+message, msgAndArgs...))
+ return false
+ }
+ return true
+}
+
+func logFailureFromBool(t TestingT, msgAndArgs ...interface{}) {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ const stackIndex = 3 // Assert()/Check(), assert(), formatFailureFromBool()
+ const comparisonArgPos = 1
+ args, err := source.CallExprArgs(stackIndex)
+ if err != nil {
+ t.Log(err.Error())
+ return
+ }
+
+ msg, err := boolFailureMessage(args[comparisonArgPos])
+ if err != nil {
+ t.Log(err.Error())
+ msg = "expression is false"
+ }
+
+ t.Log(format.WithCustomMessage(failureMessage+msg, msgAndArgs...))
+}
+
+func boolFailureMessage(expr ast.Expr) (string, error) {
+ if binaryExpr, ok := expr.(*ast.BinaryExpr); ok && binaryExpr.Op == token.NEQ {
+ x, err := source.FormatNode(binaryExpr.X)
+ if err != nil {
+ return "", err
+ }
+ y, err := source.FormatNode(binaryExpr.Y)
+ if err != nil {
+ return "", err
+ }
+ return x + " is " + y, nil
+ }
+
+ if unaryExpr, ok := expr.(*ast.UnaryExpr); ok && unaryExpr.Op == token.NOT {
+ x, err := source.FormatNode(unaryExpr.X)
+ if err != nil {
+ return "", err
+ }
+ return x + " is true", nil
+ }
+
+ formatted, err := source.FormatNode(expr)
+ if err != nil {
+ return "", err
+ }
+ return "expression is false: " + formatted, nil
+}
+
+// Assert performs a comparison. If the comparison fails the test is marked as
+// failed, a failure message is logged, and execution is stopped immediately.
+//
+// The comparison argument may be one of three types: bool, cmp.Comparison or
+// error.
+// When called with a bool the failure message will contain the literal source
+// code of the expression.
+// When called with a cmp.Comparison the comparison is responsible for producing
+// a helpful failure message.
+// When called with an error a nil value is considered success. A non-nil error
+// is a failure, and Error() is used as the failure message.
+func Assert(t TestingT, comparison BoolOrComparison, msgAndArgs ...interface{}) {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ assert(t, t.FailNow, argsFromComparisonCall, comparison, msgAndArgs...)
+}
+
+// Check performs a comparison. If the comparison fails the test is marked as
+// failed, a failure message is logged, and Check returns false. Otherwise returns
+// true.
+//
+// See Assert for details about the comparison arg and failure messages.
+func Check(t TestingT, comparison BoolOrComparison, msgAndArgs ...interface{}) bool {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ return assert(t, t.Fail, argsFromComparisonCall, comparison, msgAndArgs...)
+}
+
+// NilError fails the test immediately if err is not nil.
+// This is equivalent to Assert(t, err)
+func NilError(t TestingT, err error, msgAndArgs ...interface{}) {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ assert(t, t.FailNow, argsAfterT, err, msgAndArgs...)
+}
+
+// Equal uses the == operator to assert two values are equal and fails the test
+// if they are not equal.
+//
+// If the comparison fails Equal will use the variable names for x and y as part
+// of the failure message to identify the actual and expected values.
+//
+// If either x or y are a multi-line string the failure message will include a
+// unified diff of the two values. If the values only differ by whitespace
+// the unified diff will be augmented by replacing whitespace characters with
+// visible characters to identify the whitespace difference.
+//
+// This is equivalent to Assert(t, cmp.Equal(x, y)).
+func Equal(t TestingT, x, y interface{}, msgAndArgs ...interface{}) {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ assert(t, t.FailNow, argsAfterT, cmp.Equal(x, y), msgAndArgs...)
+}
+
+// DeepEqual uses google/go-cmp (http://bit.do/go-cmp) to assert two values are
+// equal and fails the test if they are not equal.
+//
+// Package https://godoc.org/gotest.tools/assert/opt provides some additional
+// commonly used Options.
+//
+// This is equivalent to Assert(t, cmp.DeepEqual(x, y)).
+func DeepEqual(t TestingT, x, y interface{}, opts ...gocmp.Option) {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ assert(t, t.FailNow, argsAfterT, cmp.DeepEqual(x, y, opts...))
+}
+
+// Error fails the test if err is nil, or the error message is not the expected
+// message.
+// Equivalent to Assert(t, cmp.Error(err, message)).
+func Error(t TestingT, err error, message string, msgAndArgs ...interface{}) {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ assert(t, t.FailNow, argsAfterT, cmp.Error(err, message), msgAndArgs...)
+}
+
+// ErrorContains fails the test if err is nil, or the error message does not
+// contain the expected substring.
+// Equivalent to Assert(t, cmp.ErrorContains(err, substring)).
+func ErrorContains(t TestingT, err error, substring string, msgAndArgs ...interface{}) {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ assert(t, t.FailNow, argsAfterT, cmp.ErrorContains(err, substring), msgAndArgs...)
+}
+
+// ErrorType fails the test if err is nil, or err is not the expected type.
+//
+// Expected can be one of:
+// a func(error) bool which returns true if the error is the expected type,
+// an instance of (or a pointer to) a struct of the expected type,
+// a pointer to an interface the error is expected to implement,
+// a reflect.Type of the expected struct or interface.
+//
+// Equivalent to Assert(t, cmp.ErrorType(err, expected)).
+func ErrorType(t TestingT, err error, expected interface{}, msgAndArgs ...interface{}) {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ assert(t, t.FailNow, argsAfterT, cmp.ErrorType(err, expected), msgAndArgs...)
+}
diff --git a/vendor/gotest.tools/assert/cmp/compare.go b/vendor/gotest.tools/assert/cmp/compare.go
new file mode 100644
index 00000000..cf48d887
--- /dev/null
+++ b/vendor/gotest.tools/assert/cmp/compare.go
@@ -0,0 +1,356 @@
+/*Package cmp provides Comparisons for Assert and Check*/
+package cmp // import "gotest.tools/assert/cmp"
+
+import (
+ "fmt"
+ "reflect"
+ "regexp"
+ "strings"
+
+ "github.com/google/go-cmp/cmp"
+ "gotest.tools/internal/format"
+)
+
+// Comparison is a function which compares values and returns ResultSuccess if
+// the actual value matches the expected value. If the values do not match the
+// Result will contain a message about why it failed.
+type Comparison func() Result
+
+// DeepEqual compares two values using google/go-cmp (http://bit.do/go-cmp)
+// and succeeds if the values are equal.
+//
+// The comparison can be customized using comparison Options.
+// Package https://godoc.org/gotest.tools/assert/opt provides some additional
+// commonly used Options.
+func DeepEqual(x, y interface{}, opts ...cmp.Option) Comparison {
+ return func() (result Result) {
+ defer func() {
+ if panicmsg, handled := handleCmpPanic(recover()); handled {
+ result = ResultFailure(panicmsg)
+ }
+ }()
+ diff := cmp.Diff(x, y, opts...)
+ if diff == "" {
+ return ResultSuccess
+ }
+ return multiLineDiffResult(diff)
+ }
+}
+
+func handleCmpPanic(r interface{}) (string, bool) {
+ if r == nil {
+ return "", false
+ }
+ panicmsg, ok := r.(string)
+ if !ok {
+ panic(r)
+ }
+ switch {
+ case strings.HasPrefix(panicmsg, "cannot handle unexported field"):
+ return panicmsg, true
+ }
+ panic(r)
+}
+
+func toResult(success bool, msg string) Result {
+ if success {
+ return ResultSuccess
+ }
+ return ResultFailure(msg)
+}
+
+// RegexOrPattern may be either a *regexp.Regexp or a string that is a valid
+// regexp pattern.
+type RegexOrPattern interface{}
+
+// Regexp succeeds if value v matches regular expression re.
+//
+// Example:
+// assert.Assert(t, cmp.Regexp("^[0-9a-f]{32}$", str))
+// r := regexp.MustCompile("^[0-9a-f]{32}$")
+// assert.Assert(t, cmp.Regexp(r, str))
+func Regexp(re RegexOrPattern, v string) Comparison {
+ match := func(re *regexp.Regexp) Result {
+ return toResult(
+ re.MatchString(v),
+ fmt.Sprintf("value %q does not match regexp %q", v, re.String()))
+ }
+
+ return func() Result {
+ switch regex := re.(type) {
+ case *regexp.Regexp:
+ return match(regex)
+ case string:
+ re, err := regexp.Compile(regex)
+ if err != nil {
+ return ResultFailure(err.Error())
+ }
+ return match(re)
+ default:
+ return ResultFailure(fmt.Sprintf("invalid type %T for regex pattern", regex))
+ }
+ }
+}
+
+// Equal succeeds if x == y. See assert.Equal for full documentation.
+func Equal(x, y interface{}) Comparison {
+ return func() Result {
+ switch {
+ case x == y:
+ return ResultSuccess
+ case isMultiLineStringCompare(x, y):
+ diff := format.UnifiedDiff(format.DiffConfig{A: x.(string), B: y.(string)})
+ return multiLineDiffResult(diff)
+ }
+ return ResultFailureTemplate(`
+ {{- .Data.x}} (
+ {{- with callArg 0 }}{{ formatNode . }} {{end -}}
+ {{- printf "%T" .Data.x -}}
+ ) != {{ .Data.y}} (
+ {{- with callArg 1 }}{{ formatNode . }} {{end -}}
+ {{- printf "%T" .Data.y -}}
+ )`,
+ map[string]interface{}{"x": x, "y": y})
+ }
+}
+
+func isMultiLineStringCompare(x, y interface{}) bool {
+ strX, ok := x.(string)
+ if !ok {
+ return false
+ }
+ strY, ok := y.(string)
+ if !ok {
+ return false
+ }
+ return strings.Contains(strX, "\n") || strings.Contains(strY, "\n")
+}
+
+func multiLineDiffResult(diff string) Result {
+ return ResultFailureTemplate(`
+--- {{ with callArg 0 }}{{ formatNode . }}{{else}}←{{end}}
++++ {{ with callArg 1 }}{{ formatNode . }}{{else}}→{{end}}
+{{ .Data.diff }}`,
+ map[string]interface{}{"diff": diff})
+}
+
+// Len succeeds if the sequence has the expected length.
+func Len(seq interface{}, expected int) Comparison {
+ return func() (result Result) {
+ defer func() {
+ if e := recover(); e != nil {
+ result = ResultFailure(fmt.Sprintf("type %T does not have a length", seq))
+ }
+ }()
+ value := reflect.ValueOf(seq)
+ length := value.Len()
+ if length == expected {
+ return ResultSuccess
+ }
+ msg := fmt.Sprintf("expected %s (length %d) to have length %d", seq, length, expected)
+ return ResultFailure(msg)
+ }
+}
+
+// Contains succeeds if item is in collection. Collection may be a string, map,
+// slice, or array.
+//
+// If collection is a string, item must also be a string, and is compared using
+// strings.Contains().
+// If collection is a Map, contains will succeed if item is a key in the map.
+// If collection is a slice or array, item is compared to each item in the
+// sequence using reflect.DeepEqual().
+func Contains(collection interface{}, item interface{}) Comparison {
+ return func() Result {
+ colValue := reflect.ValueOf(collection)
+ if !colValue.IsValid() {
+ return ResultFailure(fmt.Sprintf("nil does not contain items"))
+ }
+ msg := fmt.Sprintf("%v does not contain %v", collection, item)
+
+ itemValue := reflect.ValueOf(item)
+ switch colValue.Type().Kind() {
+ case reflect.String:
+ if itemValue.Type().Kind() != reflect.String {
+ return ResultFailure("string may only contain strings")
+ }
+ return toResult(
+ strings.Contains(colValue.String(), itemValue.String()),
+ fmt.Sprintf("string %q does not contain %q", collection, item))
+
+ case reflect.Map:
+ if itemValue.Type() != colValue.Type().Key() {
+ return ResultFailure(fmt.Sprintf(
+ "%v can not contain a %v key", colValue.Type(), itemValue.Type()))
+ }
+ return toResult(colValue.MapIndex(itemValue).IsValid(), msg)
+
+ case reflect.Slice, reflect.Array:
+ for i := 0; i < colValue.Len(); i++ {
+ if reflect.DeepEqual(colValue.Index(i).Interface(), item) {
+ return ResultSuccess
+ }
+ }
+ return ResultFailure(msg)
+ default:
+ return ResultFailure(fmt.Sprintf("type %T does not contain items", collection))
+ }
+ }
+}
+
+// Panics succeeds if f() panics.
+func Panics(f func()) Comparison {
+ return func() (result Result) {
+ defer func() {
+ if err := recover(); err != nil {
+ result = ResultSuccess
+ }
+ }()
+ f()
+ return ResultFailure("did not panic")
+ }
+}
+
+// Error succeeds if err is a non-nil error, and the error message equals the
+// expected message.
+func Error(err error, message string) Comparison {
+ return func() Result {
+ switch {
+ case err == nil:
+ return ResultFailure("expected an error, got nil")
+ case err.Error() != message:
+ return ResultFailure(fmt.Sprintf(
+ "expected error %q, got %s", message, formatErrorMessage(err)))
+ }
+ return ResultSuccess
+ }
+}
+
+// ErrorContains succeeds if err is a non-nil error, and the error message contains
+// the expected substring.
+func ErrorContains(err error, substring string) Comparison {
+ return func() Result {
+ switch {
+ case err == nil:
+ return ResultFailure("expected an error, got nil")
+ case !strings.Contains(err.Error(), substring):
+ return ResultFailure(fmt.Sprintf(
+ "expected error to contain %q, got %s", substring, formatErrorMessage(err)))
+ }
+ return ResultSuccess
+ }
+}
+
+func formatErrorMessage(err error) string {
+ if _, ok := err.(interface {
+ Cause() error
+ }); ok {
+ return fmt.Sprintf("%q\n%+v", err, err)
+ }
+ // This error was not wrapped with github.com/pkg/errors
+ return fmt.Sprintf("%q", err)
+}
+
+// Nil succeeds if obj is a nil interface, pointer, or function.
+//
+// Use NilError() for comparing errors. Use Len(obj, 0) for comparing slices,
+// maps, and channels.
+func Nil(obj interface{}) Comparison {
+ msgFunc := func(value reflect.Value) string {
+ return fmt.Sprintf("%v (type %s) is not nil", reflect.Indirect(value), value.Type())
+ }
+ return isNil(obj, msgFunc)
+}
+
+func isNil(obj interface{}, msgFunc func(reflect.Value) string) Comparison {
+ return func() Result {
+ if obj == nil {
+ return ResultSuccess
+ }
+ value := reflect.ValueOf(obj)
+ kind := value.Type().Kind()
+ if kind >= reflect.Chan && kind <= reflect.Slice {
+ if value.IsNil() {
+ return ResultSuccess
+ }
+ return ResultFailure(msgFunc(value))
+ }
+
+ return ResultFailure(fmt.Sprintf("%v (type %s) can not be nil", value, value.Type()))
+ }
+}
+
+// ErrorType succeeds if err is not nil and is of the expected type.
+//
+// Expected can be one of:
+// a func(error) bool which returns true if the error is the expected type,
+// an instance of (or a pointer to) a struct of the expected type,
+// a pointer to an interface the error is expected to implement,
+// a reflect.Type of the expected struct or interface.
+func ErrorType(err error, expected interface{}) Comparison {
+ return func() Result {
+ switch expectedType := expected.(type) {
+ case func(error) bool:
+ return cmpErrorTypeFunc(err, expectedType)
+ case reflect.Type:
+ if expectedType.Kind() == reflect.Interface {
+ return cmpErrorTypeImplementsType(err, expectedType)
+ }
+ return cmpErrorTypeEqualType(err, expectedType)
+ case nil:
+ return ResultFailure(fmt.Sprintf("invalid type for expected: nil"))
+ }
+
+ expectedType := reflect.TypeOf(expected)
+ switch {
+ case expectedType.Kind() == reflect.Struct, isPtrToStruct(expectedType):
+ return cmpErrorTypeEqualType(err, expectedType)
+ case isPtrToInterface(expectedType):
+ return cmpErrorTypeImplementsType(err, expectedType.Elem())
+ }
+ return ResultFailure(fmt.Sprintf("invalid type for expected: %T", expected))
+ }
+}
+
+func cmpErrorTypeFunc(err error, f func(error) bool) Result {
+ if f(err) {
+ return ResultSuccess
+ }
+ actual := "nil"
+ if err != nil {
+ actual = fmt.Sprintf("%s (%T)", err, err)
+ }
+ return ResultFailureTemplate(`error is {{ .Data.actual }}
+ {{- with callArg 1 }}, not {{ formatNode . }}{{end -}}`,
+ map[string]interface{}{"actual": actual})
+}
+
+func cmpErrorTypeEqualType(err error, expectedType reflect.Type) Result {
+ if err == nil {
+ return ResultFailure(fmt.Sprintf("error is nil, not %s", expectedType))
+ }
+ errValue := reflect.ValueOf(err)
+ if errValue.Type() == expectedType {
+ return ResultSuccess
+ }
+ return ResultFailure(fmt.Sprintf("error is %s (%T), not %s", err, err, expectedType))
+}
+
+func cmpErrorTypeImplementsType(err error, expectedType reflect.Type) Result {
+ if err == nil {
+ return ResultFailure(fmt.Sprintf("error is nil, not %s", expectedType))
+ }
+ errValue := reflect.ValueOf(err)
+ if errValue.Type().Implements(expectedType) {
+ return ResultSuccess
+ }
+ return ResultFailure(fmt.Sprintf("error is %s (%T), not %s", err, err, expectedType))
+}
+
+func isPtrToInterface(typ reflect.Type) bool {
+ return typ.Kind() == reflect.Ptr && typ.Elem().Kind() == reflect.Interface
+}
+
+func isPtrToStruct(typ reflect.Type) bool {
+ return typ.Kind() == reflect.Ptr && typ.Elem().Kind() == reflect.Struct
+}
diff --git a/vendor/gotest.tools/assert/cmp/result.go b/vendor/gotest.tools/assert/cmp/result.go
new file mode 100644
index 00000000..7c3c37dd
--- /dev/null
+++ b/vendor/gotest.tools/assert/cmp/result.go
@@ -0,0 +1,94 @@
+package cmp
+
+import (
+ "bytes"
+ "fmt"
+ "go/ast"
+ "text/template"
+
+ "gotest.tools/internal/source"
+)
+
+// Result of a Comparison.
+type Result interface {
+ Success() bool
+}
+
+type result struct {
+ success bool
+ message string
+}
+
+func (r result) Success() bool {
+ return r.success
+}
+
+func (r result) FailureMessage() string {
+ return r.message
+}
+
+// ResultSuccess is a constant which is returned by a ComparisonWithResult to
+// indicate success.
+var ResultSuccess = result{success: true}
+
+// ResultFailure returns a failed Result with a failure message.
+func ResultFailure(message string) Result {
+ return result{message: message}
+}
+
+// ResultFromError returns ResultSuccess if err is nil. Otherwise ResultFailure
+// is returned with the error message as the failure message.
+func ResultFromError(err error) Result {
+ if err == nil {
+ return ResultSuccess
+ }
+ return ResultFailure(err.Error())
+}
+
+type templatedResult struct {
+ success bool
+ template string
+ data map[string]interface{}
+}
+
+func (r templatedResult) Success() bool {
+ return r.success
+}
+
+func (r templatedResult) FailureMessage(args []ast.Expr) string {
+ msg, err := renderMessage(r, args)
+ if err != nil {
+ return fmt.Sprintf("failed to render failure message: %s", err)
+ }
+ return msg
+}
+
+// ResultFailureTemplate returns a Result with a template string and data which
+// can be used to format a failure message. The template may access data from .Data,
+// the comparison args with the callArg function, and the formatNode function may
+// be used to format the call args.
+func ResultFailureTemplate(template string, data map[string]interface{}) Result {
+ return templatedResult{template: template, data: data}
+}
+
+func renderMessage(result templatedResult, args []ast.Expr) (string, error) {
+ tmpl := template.New("failure").Funcs(template.FuncMap{
+ "formatNode": source.FormatNode,
+ "callArg": func(index int) ast.Expr {
+ if index >= len(args) {
+ return nil
+ }
+ return args[index]
+ },
+ })
+ var err error
+ tmpl, err = tmpl.Parse(result.template)
+ if err != nil {
+ return "", err
+ }
+ buf := new(bytes.Buffer)
+ err = tmpl.Execute(buf, map[string]interface{}{
+ "Data": result.data,
+ })
+ return buf.String(), err
+}
diff --git a/vendor/gotest.tools/assert/result.go b/vendor/gotest.tools/assert/result.go
new file mode 100644
index 00000000..949d9396
--- /dev/null
+++ b/vendor/gotest.tools/assert/result.go
@@ -0,0 +1,106 @@
+package assert
+
+import (
+ "fmt"
+ "go/ast"
+
+ "gotest.tools/assert/cmp"
+ "gotest.tools/internal/format"
+ "gotest.tools/internal/source"
+)
+
+func runComparison(
+ t TestingT,
+ argSelector argSelector,
+ f cmp.Comparison,
+ msgAndArgs ...interface{},
+) bool {
+ if ht, ok := t.(helperT); ok {
+ ht.Helper()
+ }
+ result := f()
+ if result.Success() {
+ return true
+ }
+
+ var message string
+ switch typed := result.(type) {
+ case resultWithComparisonArgs:
+ const stackIndex = 3 // Assert/Check, assert, runComparison
+ args, err := source.CallExprArgs(stackIndex)
+ if err != nil {
+ t.Log(err.Error())
+ }
+ message = typed.FailureMessage(filterPrintableExpr(argSelector(args)))
+ case resultBasic:
+ message = typed.FailureMessage()
+ default:
+ message = fmt.Sprintf("comparison returned invalid Result type: %T", result)
+ }
+
+ t.Log(format.WithCustomMessage(failureMessage+message, msgAndArgs...))
+ return false
+}
+
+type resultWithComparisonArgs interface {
+ FailureMessage(args []ast.Expr) string
+}
+
+type resultBasic interface {
+ FailureMessage() string
+}
+
+// filterPrintableExpr filters the ast.Expr slice to only include Expr that are
+// easy to read when printed and contain relevant information to an assertion.
+//
+// Ident and SelectorExpr are included because they print nicely and the variable
+// names may provide additional context to their values.
+// BasicLit and CompositeLit are excluded because their source is equivalent to
+// their value, which is already available.
+// Other types are ignored for now, but could be added if they are relevant.
+func filterPrintableExpr(args []ast.Expr) []ast.Expr {
+ result := make([]ast.Expr, len(args))
+ for i, arg := range args {
+ if isShortPrintableExpr(arg) {
+ result[i] = arg
+ continue
+ }
+
+ if starExpr, ok := arg.(*ast.StarExpr); ok {
+ result[i] = starExpr.X
+ continue
+ }
+ }
+ return result
+}
+
+func isShortPrintableExpr(expr ast.Expr) bool {
+ switch expr.(type) {
+ case *ast.Ident, *ast.SelectorExpr, *ast.IndexExpr, *ast.SliceExpr:
+ return true
+ case *ast.BinaryExpr, *ast.UnaryExpr:
+ return true
+ default:
+ // CallExpr, ParenExpr, TypeAssertExpr, KeyValueExpr, StarExpr
+ return false
+ }
+}
+
+type argSelector func([]ast.Expr) []ast.Expr
+
+func argsAfterT(args []ast.Expr) []ast.Expr {
+ if len(args) < 1 {
+ return nil
+ }
+ return args[1:]
+}
+
+func argsFromComparisonCall(args []ast.Expr) []ast.Expr {
+ if len(args) < 1 {
+ return nil
+ }
+ if callExpr, ok := args[1].(*ast.CallExpr); ok {
+ return callExpr.Args
+ }
+ return nil
+}
diff --git a/vendor/gotest.tools/internal/difflib/LICENSE b/vendor/gotest.tools/internal/difflib/LICENSE
new file mode 100644
index 00000000..c67dad61
--- /dev/null
+++ b/vendor/gotest.tools/internal/difflib/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2013, Patrick Mezard
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+ The names of its contributors may not be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/gotest.tools/internal/difflib/difflib.go b/vendor/gotest.tools/internal/difflib/difflib.go
new file mode 100644
index 00000000..b6f486b9
--- /dev/null
+++ b/vendor/gotest.tools/internal/difflib/difflib.go
@@ -0,0 +1,423 @@
+/*Package difflib is a partial port of Python difflib module.
+
+Original source: https://github.com/pmezard/go-difflib
+
+This file is trimmed to only the parts used by this repository.
+*/
+package difflib // import "gotest.tools/internal/difflib"
+
+func min(a, b int) int {
+ if a < b {
+ return a
+ }
+ return b
+}
+
+func max(a, b int) int {
+ if a > b {
+ return a
+ }
+ return b
+}
+
+// Match stores line numbers of size of match
+type Match struct {
+ A int
+ B int
+ Size int
+}
+
+// OpCode identifies the type of diff
+type OpCode struct {
+ Tag byte
+ I1 int
+ I2 int
+ J1 int
+ J2 int
+}
+
+// SequenceMatcher compares sequence of strings. The basic
+// algorithm predates, and is a little fancier than, an algorithm
+// published in the late 1980's by Ratcliff and Obershelp under the
+// hyperbolic name "gestalt pattern matching". The basic idea is to find
+// the longest contiguous matching subsequence that contains no "junk"
+// elements (R-O doesn't address junk). The same idea is then applied
+// recursively to the pieces of the sequences to the left and to the right
+// of the matching subsequence. This does not yield minimal edit
+// sequences, but does tend to yield matches that "look right" to people.
+//
+// SequenceMatcher tries to compute a "human-friendly diff" between two
+// sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the
+// longest *contiguous* & junk-free matching subsequence. That's what
+// catches peoples' eyes. The Windows(tm) windiff has another interesting
+// notion, pairing up elements that appear uniquely in each sequence.
+// That, and the method here, appear to yield more intuitive difference
+// reports than does diff. This method appears to be the least vulnerable
+// to synching up on blocks of "junk lines", though (like blank lines in
+// ordinary text files, or maybe "" lines in HTML files). That may be
+// because this is the only method of the 3 that has a *concept* of
+// "junk" .
+//
+// Timing: Basic R-O is cubic time worst case and quadratic time expected
+// case. SequenceMatcher is quadratic time for the worst case and has
+// expected-case behavior dependent in a complicated way on how many
+// elements the sequences have in common; best case time is linear.
+type SequenceMatcher struct {
+ a []string
+ b []string
+ b2j map[string][]int
+ IsJunk func(string) bool
+ autoJunk bool
+ bJunk map[string]struct{}
+ matchingBlocks []Match
+ fullBCount map[string]int
+ bPopular map[string]struct{}
+ opCodes []OpCode
+}
+
+// NewMatcher returns a new SequenceMatcher
+func NewMatcher(a, b []string) *SequenceMatcher {
+ m := SequenceMatcher{autoJunk: true}
+ m.SetSeqs(a, b)
+ return &m
+}
+
+// SetSeqs sets two sequences to be compared.
+func (m *SequenceMatcher) SetSeqs(a, b []string) {
+ m.SetSeq1(a)
+ m.SetSeq2(b)
+}
+
+// SetSeq1 sets the first sequence to be compared. The second sequence to be compared is
+// not changed.
+//
+// SequenceMatcher computes and caches detailed information about the second
+// sequence, so if you want to compare one sequence S against many sequences,
+// use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other
+// sequences.
+//
+// See also SetSeqs() and SetSeq2().
+func (m *SequenceMatcher) SetSeq1(a []string) {
+ if &a == &m.a {
+ return
+ }
+ m.a = a
+ m.matchingBlocks = nil
+ m.opCodes = nil
+}
+
+// SetSeq2 sets the second sequence to be compared. The first sequence to be compared is
+// not changed.
+func (m *SequenceMatcher) SetSeq2(b []string) {
+ if &b == &m.b {
+ return
+ }
+ m.b = b
+ m.matchingBlocks = nil
+ m.opCodes = nil
+ m.fullBCount = nil
+ m.chainB()
+}
+
+func (m *SequenceMatcher) chainB() {
+ // Populate line -> index mapping
+ b2j := map[string][]int{}
+ for i, s := range m.b {
+ indices := b2j[s]
+ indices = append(indices, i)
+ b2j[s] = indices
+ }
+
+ // Purge junk elements
+ m.bJunk = map[string]struct{}{}
+ if m.IsJunk != nil {
+ junk := m.bJunk
+ for s := range b2j {
+ if m.IsJunk(s) {
+ junk[s] = struct{}{}
+ }
+ }
+ for s := range junk {
+ delete(b2j, s)
+ }
+ }
+
+ // Purge remaining popular elements
+ popular := map[string]struct{}{}
+ n := len(m.b)
+ if m.autoJunk && n >= 200 {
+ ntest := n/100 + 1
+ for s, indices := range b2j {
+ if len(indices) > ntest {
+ popular[s] = struct{}{}
+ }
+ }
+ for s := range popular {
+ delete(b2j, s)
+ }
+ }
+ m.bPopular = popular
+ m.b2j = b2j
+}
+
+func (m *SequenceMatcher) isBJunk(s string) bool {
+ _, ok := m.bJunk[s]
+ return ok
+}
+
+// Find longest matching block in a[alo:ahi] and b[blo:bhi].
+//
+// If IsJunk is not defined:
+//
+// Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where
+// alo <= i <= i+k <= ahi
+// blo <= j <= j+k <= bhi
+// and for all (i',j',k') meeting those conditions,
+// k >= k'
+// i <= i'
+// and if i == i', j <= j'
+//
+// In other words, of all maximal matching blocks, return one that
+// starts earliest in a, and of all those maximal matching blocks that
+// start earliest in a, return the one that starts earliest in b.
+//
+// If IsJunk is defined, first the longest matching block is
+// determined as above, but with the additional restriction that no
+// junk element appears in the block. Then that block is extended as
+// far as possible by matching (only) junk elements on both sides. So
+// the resulting block never matches on junk except as identical junk
+// happens to be adjacent to an "interesting" match.
+//
+// If no blocks match, return (alo, blo, 0).
+func (m *SequenceMatcher) findLongestMatch(alo, ahi, blo, bhi int) Match {
+ // CAUTION: stripping common prefix or suffix would be incorrect.
+ // E.g.,
+ // ab
+ // acab
+ // Longest matching block is "ab", but if common prefix is
+ // stripped, it's "a" (tied with "b"). UNIX(tm) diff does so
+ // strip, so ends up claiming that ab is changed to acab by
+ // inserting "ca" in the middle. That's minimal but unintuitive:
+ // "it's obvious" that someone inserted "ac" at the front.
+ // Windiff ends up at the same place as diff, but by pairing up
+ // the unique 'b's and then matching the first two 'a's.
+ besti, bestj, bestsize := alo, blo, 0
+
+ // find longest junk-free match
+ // during an iteration of the loop, j2len[j] = length of longest
+ // junk-free match ending with a[i-1] and b[j]
+ j2len := map[int]int{}
+ for i := alo; i != ahi; i++ {
+ // look at all instances of a[i] in b; note that because
+ // b2j has no junk keys, the loop is skipped if a[i] is junk
+ newj2len := map[int]int{}
+ for _, j := range m.b2j[m.a[i]] {
+ // a[i] matches b[j]
+ if j < blo {
+ continue
+ }
+ if j >= bhi {
+ break
+ }
+ k := j2len[j-1] + 1
+ newj2len[j] = k
+ if k > bestsize {
+ besti, bestj, bestsize = i-k+1, j-k+1, k
+ }
+ }
+ j2len = newj2len
+ }
+
+ // Extend the best by non-junk elements on each end. In particular,
+ // "popular" non-junk elements aren't in b2j, which greatly speeds
+ // the inner loop above, but also means "the best" match so far
+ // doesn't contain any junk *or* popular non-junk elements.
+ for besti > alo && bestj > blo && !m.isBJunk(m.b[bestj-1]) &&
+ m.a[besti-1] == m.b[bestj-1] {
+ besti, bestj, bestsize = besti-1, bestj-1, bestsize+1
+ }
+ for besti+bestsize < ahi && bestj+bestsize < bhi &&
+ !m.isBJunk(m.b[bestj+bestsize]) &&
+ m.a[besti+bestsize] == m.b[bestj+bestsize] {
+ bestsize += 1
+ }
+
+ // Now that we have a wholly interesting match (albeit possibly
+ // empty!), we may as well suck up the matching junk on each
+ // side of it too. Can't think of a good reason not to, and it
+ // saves post-processing the (possibly considerable) expense of
+ // figuring out what to do with it. In the case of an empty
+ // interesting match, this is clearly the right thing to do,
+ // because no other kind of match is possible in the regions.
+ for besti > alo && bestj > blo && m.isBJunk(m.b[bestj-1]) &&
+ m.a[besti-1] == m.b[bestj-1] {
+ besti, bestj, bestsize = besti-1, bestj-1, bestsize+1
+ }
+ for besti+bestsize < ahi && bestj+bestsize < bhi &&
+ m.isBJunk(m.b[bestj+bestsize]) &&
+ m.a[besti+bestsize] == m.b[bestj+bestsize] {
+ bestsize += 1
+ }
+
+ return Match{A: besti, B: bestj, Size: bestsize}
+}
+
+// GetMatchingBlocks returns a list of triples describing matching subsequences.
+//
+// Each triple is of the form (i, j, n), and means that
+// a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in
+// i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are
+// adjacent triples in the list, and the second is not the last triple in the
+// list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe
+// adjacent equal blocks.
+//
+// The last triple is a dummy, (len(a), len(b), 0), and is the only
+// triple with n==0.
+func (m *SequenceMatcher) GetMatchingBlocks() []Match {
+ if m.matchingBlocks != nil {
+ return m.matchingBlocks
+ }
+
+ var matchBlocks func(alo, ahi, blo, bhi int, matched []Match) []Match
+ matchBlocks = func(alo, ahi, blo, bhi int, matched []Match) []Match {
+ match := m.findLongestMatch(alo, ahi, blo, bhi)
+ i, j, k := match.A, match.B, match.Size
+ if match.Size > 0 {
+ if alo < i && blo < j {
+ matched = matchBlocks(alo, i, blo, j, matched)
+ }
+ matched = append(matched, match)
+ if i+k < ahi && j+k < bhi {
+ matched = matchBlocks(i+k, ahi, j+k, bhi, matched)
+ }
+ }
+ return matched
+ }
+ matched := matchBlocks(0, len(m.a), 0, len(m.b), nil)
+
+ // It's possible that we have adjacent equal blocks in the
+ // matching_blocks list now.
+ nonAdjacent := []Match{}
+ i1, j1, k1 := 0, 0, 0
+ for _, b := range matched {
+ // Is this block adjacent to i1, j1, k1?
+ i2, j2, k2 := b.A, b.B, b.Size
+ if i1+k1 == i2 && j1+k1 == j2 {
+ // Yes, so collapse them -- this just increases the length of
+ // the first block by the length of the second, and the first
+ // block so lengthened remains the block to compare against.
+ k1 += k2
+ } else {
+ // Not adjacent. Remember the first block (k1==0 means it's
+ // the dummy we started with), and make the second block the
+ // new block to compare against.
+ if k1 > 0 {
+ nonAdjacent = append(nonAdjacent, Match{i1, j1, k1})
+ }
+ i1, j1, k1 = i2, j2, k2
+ }
+ }
+ if k1 > 0 {
+ nonAdjacent = append(nonAdjacent, Match{i1, j1, k1})
+ }
+
+ nonAdjacent = append(nonAdjacent, Match{len(m.a), len(m.b), 0})
+ m.matchingBlocks = nonAdjacent
+ return m.matchingBlocks
+}
+
+// GetOpCodes returns a list of 5-tuples describing how to turn a into b.
+//
+// Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple
+// has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the
+// tuple preceding it, and likewise for j1 == the previous j2.
+//
+// The tags are characters, with these meanings:
+//
+// 'r' (replace): a[i1:i2] should be replaced by b[j1:j2]
+//
+// 'd' (delete): a[i1:i2] should be deleted, j1==j2 in this case.
+//
+// 'i' (insert): b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case.
+//
+// 'e' (equal): a[i1:i2] == b[j1:j2]
+func (m *SequenceMatcher) GetOpCodes() []OpCode {
+ if m.opCodes != nil {
+ return m.opCodes
+ }
+ i, j := 0, 0
+ matching := m.GetMatchingBlocks()
+ opCodes := make([]OpCode, 0, len(matching))
+ for _, m := range matching {
+ // invariant: we've pumped out correct diffs to change
+ // a[:i] into b[:j], and the next matching block is
+ // a[ai:ai+size] == b[bj:bj+size]. So we need to pump
+ // out a diff to change a[i:ai] into b[j:bj], pump out
+ // the matching block, and move (i,j) beyond the match
+ ai, bj, size := m.A, m.B, m.Size
+ tag := byte(0)
+ if i < ai && j < bj {
+ tag = 'r'
+ } else if i < ai {
+ tag = 'd'
+ } else if j < bj {
+ tag = 'i'
+ }
+ if tag > 0 {
+ opCodes = append(opCodes, OpCode{tag, i, ai, j, bj})
+ }
+ i, j = ai+size, bj+size
+ // the list of matching blocks is terminated by a
+ // sentinel with size 0
+ if size > 0 {
+ opCodes = append(opCodes, OpCode{'e', ai, i, bj, j})
+ }
+ }
+ m.opCodes = opCodes
+ return m.opCodes
+}
+
+// GetGroupedOpCodes isolates change clusters by eliminating ranges with no changes.
+//
+// Return a generator of groups with up to n lines of context.
+// Each group is in the same format as returned by GetOpCodes().
+func (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode {
+ if n < 0 {
+ n = 3
+ }
+ codes := m.GetOpCodes()
+ if len(codes) == 0 {
+ codes = []OpCode{{'e', 0, 1, 0, 1}}
+ }
+ // Fixup leading and trailing groups if they show no changes.
+ if codes[0].Tag == 'e' {
+ c := codes[0]
+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2
+ codes[0] = OpCode{c.Tag, max(i1, i2-n), i2, max(j1, j2-n), j2}
+ }
+ if codes[len(codes)-1].Tag == 'e' {
+ c := codes[len(codes)-1]
+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2
+ codes[len(codes)-1] = OpCode{c.Tag, i1, min(i2, i1+n), j1, min(j2, j1+n)}
+ }
+ nn := n + n
+ groups := [][]OpCode{}
+ group := []OpCode{}
+ for _, c := range codes {
+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2
+ // End the current group and start a new one whenever
+ // there is a large range with no changes.
+ if c.Tag == 'e' && i2-i1 > nn {
+ group = append(group, OpCode{c.Tag, i1, min(i2, i1+n),
+ j1, min(j2, j1+n)})
+ groups = append(groups, group)
+ group = []OpCode{}
+ i1, j1 = max(i1, i2-n), max(j1, j2-n)
+ }
+ group = append(group, OpCode{c.Tag, i1, i2, j1, j2})
+ }
+ if len(group) > 0 && !(len(group) == 1 && group[0].Tag == 'e') {
+ groups = append(groups, group)
+ }
+ return groups
+}
diff --git a/vendor/gotest.tools/internal/format/diff.go b/vendor/gotest.tools/internal/format/diff.go
new file mode 100644
index 00000000..c938c97b
--- /dev/null
+++ b/vendor/gotest.tools/internal/format/diff.go
@@ -0,0 +1,161 @@
+package format
+
+import (
+ "bytes"
+ "fmt"
+ "strings"
+ "unicode"
+
+ "gotest.tools/internal/difflib"
+)
+
+const (
+ contextLines = 2
+)
+
+// DiffConfig for a unified diff
+type DiffConfig struct {
+ A string
+ B string
+ From string
+ To string
+}
+
+// UnifiedDiff is a modified version of difflib.WriteUnifiedDiff with better
+// support for showing the whitespace differences.
+func UnifiedDiff(conf DiffConfig) string {
+ a := strings.SplitAfter(conf.A, "\n")
+ b := strings.SplitAfter(conf.B, "\n")
+ groups := difflib.NewMatcher(a, b).GetGroupedOpCodes(contextLines)
+ if len(groups) == 0 {
+ return ""
+ }
+
+ buf := new(bytes.Buffer)
+ writeFormat := func(format string, args ...interface{}) {
+ buf.WriteString(fmt.Sprintf(format, args...))
+ }
+ writeLine := func(prefix string, s string) {
+ buf.WriteString(prefix + s)
+ }
+ if hasWhitespaceDiffLines(groups, a, b) {
+ writeLine = visibleWhitespaceLine(writeLine)
+ }
+ formatHeader(writeFormat, conf)
+ for _, group := range groups {
+ formatRangeLine(writeFormat, group)
+ for _, opCode := range group {
+ in, out := a[opCode.I1:opCode.I2], b[opCode.J1:opCode.J2]
+ switch opCode.Tag {
+ case 'e':
+ formatLines(writeLine, " ", in)
+ case 'r':
+ formatLines(writeLine, "-", in)
+ formatLines(writeLine, "+", out)
+ case 'd':
+ formatLines(writeLine, "-", in)
+ case 'i':
+ formatLines(writeLine, "+", out)
+ }
+ }
+ }
+ return buf.String()
+}
+
+// hasWhitespaceDiffLines returns true if any diff groups is only different
+// because of whitespace characters.
+func hasWhitespaceDiffLines(groups [][]difflib.OpCode, a, b []string) bool {
+ for _, group := range groups {
+ in, out := new(bytes.Buffer), new(bytes.Buffer)
+ for _, opCode := range group {
+ if opCode.Tag == 'e' {
+ continue
+ }
+ for _, line := range a[opCode.I1:opCode.I2] {
+ in.WriteString(line)
+ }
+ for _, line := range b[opCode.J1:opCode.J2] {
+ out.WriteString(line)
+ }
+ }
+ if removeWhitespace(in.String()) == removeWhitespace(out.String()) {
+ return true
+ }
+ }
+ return false
+}
+
+func removeWhitespace(s string) string {
+ var result []rune
+ for _, r := range s {
+ if !unicode.IsSpace(r) {
+ result = append(result, r)
+ }
+ }
+ return string(result)
+}
+
+func visibleWhitespaceLine(ws func(string, string)) func(string, string) {
+ mapToVisibleSpace := func(r rune) rune {
+ switch r {
+ case '\n':
+ case ' ':
+ return '·'
+ case '\t':
+ return '▷'
+ case '\v':
+ return '▽'
+ case '\r':
+ return '↵'
+ case '\f':
+ return '↓'
+ default:
+ if unicode.IsSpace(r) {
+ return '�'
+ }
+ }
+ return r
+ }
+ return func(prefix, s string) {
+ ws(prefix, strings.Map(mapToVisibleSpace, s))
+ }
+}
+
+func formatHeader(wf func(string, ...interface{}), conf DiffConfig) {
+ if conf.From != "" || conf.To != "" {
+ wf("--- %s\n", conf.From)
+ wf("+++ %s\n", conf.To)
+ }
+}
+
+func formatRangeLine(wf func(string, ...interface{}), group []difflib.OpCode) {
+ first, last := group[0], group[len(group)-1]
+ range1 := formatRangeUnified(first.I1, last.I2)
+ range2 := formatRangeUnified(first.J1, last.J2)
+ wf("@@ -%s +%s @@\n", range1, range2)
+}
+
+// Convert range to the "ed" format
+func formatRangeUnified(start, stop int) string {
+ // Per the diff spec at http://www.unix.org/single_unix_specification/
+ beginning := start + 1 // lines start numbering with one
+ length := stop - start
+ if length == 1 {
+ return fmt.Sprintf("%d", beginning)
+ }
+ if length == 0 {
+ beginning-- // empty ranges begin at line just before the range
+ }
+ return fmt.Sprintf("%d,%d", beginning, length)
+}
+
+func formatLines(writeLine func(string, string), prefix string, lines []string) {
+ for _, line := range lines {
+ writeLine(prefix, line)
+ }
+ // Add a newline if the last line is missing one so that the diff displays
+ // properly.
+ if !strings.HasSuffix(lines[len(lines)-1], "\n") {
+ writeLine("", "\n")
+ }
+}
diff --git a/vendor/gotest.tools/internal/format/format.go b/vendor/gotest.tools/internal/format/format.go
new file mode 100644
index 00000000..8f6494f9
--- /dev/null
+++ b/vendor/gotest.tools/internal/format/format.go
@@ -0,0 +1,27 @@
+package format // import "gotest.tools/internal/format"
+
+import "fmt"
+
+// Message accepts a msgAndArgs varargs and formats it using fmt.Sprintf
+func Message(msgAndArgs ...interface{}) string {
+ switch len(msgAndArgs) {
+ case 0:
+ return ""
+ case 1:
+ return fmt.Sprintf("%v", msgAndArgs[0])
+ default:
+ return fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...)
+ }
+}
+
+// WithCustomMessage accepts one or two messages and formats them appropriately
+func WithCustomMessage(source string, msgAndArgs ...interface{}) string {
+ custom := Message(msgAndArgs...)
+ switch {
+ case custom == "":
+ return source
+ case source == "":
+ return custom
+ }
+ return fmt.Sprintf("%s: %s", source, custom)
+}
diff --git a/vendor/gotest.tools/internal/source/defers.go b/vendor/gotest.tools/internal/source/defers.go
new file mode 100644
index 00000000..66cfafbb
--- /dev/null
+++ b/vendor/gotest.tools/internal/source/defers.go
@@ -0,0 +1,53 @@
+package source
+
+import (
+ "go/ast"
+ "go/token"
+
+ "github.com/pkg/errors"
+)
+
+func scanToDeferLine(fileset *token.FileSet, node ast.Node, lineNum int) ast.Node {
+ var matchedNode ast.Node
+ ast.Inspect(node, func(node ast.Node) bool {
+ switch {
+ case node == nil || matchedNode != nil:
+ return false
+ case fileset.Position(node.End()).Line == lineNum:
+ if funcLit, ok := node.(*ast.FuncLit); ok {
+ matchedNode = funcLit
+ return false
+ }
+ }
+ return true
+ })
+ debug("defer line node: %s", debugFormatNode{matchedNode})
+ return matchedNode
+}
+
+func guessDefer(node ast.Node) (ast.Node, error) {
+ defers := collectDefers(node)
+ switch len(defers) {
+ case 0:
+ return nil, errors.New("failed to expression in defer")
+ case 1:
+ return defers[0].Call, nil
+ default:
+ return nil, errors.Errorf(
+ "ambiguous call expression: multiple (%d) defers in call block",
+ len(defers))
+ }
+}
+
+func collectDefers(node ast.Node) []*ast.DeferStmt {
+ var defers []*ast.DeferStmt
+ ast.Inspect(node, func(node ast.Node) bool {
+ if d, ok := node.(*ast.DeferStmt); ok {
+ defers = append(defers, d)
+ debug("defer: %s", debugFormatNode{d})
+ return false
+ }
+ return true
+ })
+ return defers
+}
diff --git a/vendor/gotest.tools/internal/source/source.go b/vendor/gotest.tools/internal/source/source.go
new file mode 100644
index 00000000..8a5d0e8d
--- /dev/null
+++ b/vendor/gotest.tools/internal/source/source.go
@@ -0,0 +1,166 @@
+package source // import "gotest.tools/internal/source"
+
+import (
+ "bytes"
+ "fmt"
+ "go/ast"
+ "go/format"
+ "go/parser"
+ "go/token"
+ "os"
+ "runtime"
+ "strconv"
+ "strings"
+
+ "github.com/pkg/errors"
+)
+
+const baseStackIndex = 1
+
+// FormattedCallExprArg returns the argument from an ast.CallExpr at the
+// index in the call stack. The argument is formatted using FormatNode.
+func FormattedCallExprArg(stackIndex int, argPos int) (string, error) {
+ args, err := CallExprArgs(stackIndex + 1)
+ if err != nil {
+ return "", err
+ }
+ if argPos >= len(args) {
+ return "", errors.New("failed to find expression")
+ }
+ return FormatNode(args[argPos])
+}
+
+// CallExprArgs returns the ast.Expr slice for the args of an ast.CallExpr at
+// the index in the call stack.
+func CallExprArgs(stackIndex int) ([]ast.Expr, error) {
+ _, filename, lineNum, ok := runtime.Caller(baseStackIndex + stackIndex)
+ if !ok {
+ return nil, errors.New("failed to get call stack")
+ }
+ debug("call stack position: %s:%d", filename, lineNum)
+
+ node, err := getNodeAtLine(filename, lineNum)
+ if err != nil {
+ return nil, err
+ }
+ debug("found node: %s", debugFormatNode{node})
+
+ return getCallExprArgs(node)
+}
+
+func getNodeAtLine(filename string, lineNum int) (ast.Node, error) {
+ fileset := token.NewFileSet()
+ astFile, err := parser.ParseFile(fileset, filename, nil, parser.AllErrors)
+ if err != nil {
+ return nil, errors.Wrapf(err, "failed to parse source file: %s", filename)
+ }
+
+ if node := scanToLine(fileset, astFile, lineNum); node != nil {
+ return node, nil
+ }
+ if node := scanToDeferLine(fileset, astFile, lineNum); node != nil {
+ node, err := guessDefer(node)
+ if err != nil || node != nil {
+ return node, err
+ }
+ }
+ return nil, errors.Errorf(
+ "failed to find an expression on line %d in %s", lineNum, filename)
+}
+
+func scanToLine(fileset *token.FileSet, node ast.Node, lineNum int) ast.Node {
+ var matchedNode ast.Node
+ ast.Inspect(node, func(node ast.Node) bool {
+ switch {
+ case node == nil || matchedNode != nil:
+ return false
+ case nodePosition(fileset, node).Line == lineNum:
+ matchedNode = node
+ return false
+ }
+ return true
+ })
+ return matchedNode
+}
+
+// In golang 1.9 the line number changed from being the line where the statement
+// ended to the line where the statement began.
+func nodePosition(fileset *token.FileSet, node ast.Node) token.Position {
+ if goVersionBefore19 {
+ return fileset.Position(node.End())
+ }
+ return fileset.Position(node.Pos())
+}
+
+var goVersionBefore19 = func() bool {
+ version := runtime.Version()
+ // not a release version
+ if !strings.HasPrefix(version, "go") {
+ return false
+ }
+ version = strings.TrimPrefix(version, "go")
+ parts := strings.Split(version, ".")
+ if len(parts) < 2 {
+ return false
+ }
+ minor, err := strconv.ParseInt(parts[1], 10, 32)
+ return err == nil && parts[0] == "1" && minor < 9
+}()
+
+func getCallExprArgs(node ast.Node) ([]ast.Expr, error) {
+ visitor := &callExprVisitor{}
+ ast.Walk(visitor, node)
+ if visitor.expr == nil {
+ return nil, errors.New("failed to find call expression")
+ }
+ debug("callExpr: %s", debugFormatNode{visitor.expr})
+ return visitor.expr.Args, nil
+}
+
+type callExprVisitor struct {
+ expr *ast.CallExpr
+}
+
+func (v *callExprVisitor) Visit(node ast.Node) ast.Visitor {
+ if v.expr != nil || node == nil {
+ return nil
+ }
+ debug("visit: %s", debugFormatNode{node})
+
+ switch typed := node.(type) {
+ case *ast.CallExpr:
+ v.expr = typed
+ return nil
+ case *ast.DeferStmt:
+ ast.Walk(v, typed.Call.Fun)
+ return nil
+ }
+ return v
+}
+
+// FormatNode using go/format.Node and return the result as a string
+func FormatNode(node ast.Node) (string, error) {
+ buf := new(bytes.Buffer)
+ err := format.Node(buf, token.NewFileSet(), node)
+ return buf.String(), err
+}
+
+var debugEnabled = os.Getenv("GOTESTTOOLS_DEBUG") != ""
+
+func debug(format string, args ...interface{}) {
+ if debugEnabled {
+ fmt.Fprintf(os.Stderr, "DEBUG: "+format+"\n", args...)
+ }
+}
+
+type debugFormatNode struct {
+ ast.Node
+}
+
+func (n debugFormatNode) String() string {
+ out, err := FormatNode(n.Node)
+ if err != nil {
+ return fmt.Sprintf("failed to format %s: %s", n.Node, err)
+ }
+ return fmt.Sprintf("(%T) %s", n.Node, out)
+}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 168f80b7..832762f8 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -22,7 +22,7 @@ github.com/StackExchange/wmi
github.com/VictorAvelar/devto-api-go/devto
# github.com/adlio/trello v1.6.0
github.com/adlio/trello
-# github.com/alecthomas/chroma v0.7.0
+# github.com/alecthomas/chroma v0.7.1
github.com/alecthomas/chroma
github.com/alecthomas/chroma/formatters
github.com/alecthomas/chroma/formatters/html
@@ -69,7 +69,7 @@ github.com/danwakefield/fnmatch
github.com/davecgh/go-spew/spew
# github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/dgrijalva/jwt-go
-# github.com/digitalocean/godo v1.22.0
+# github.com/digitalocean/godo v1.29.0
github.com/digitalocean/godo
# github.com/dlclark/regexp2 v1.1.6
github.com/dlclark/regexp2
@@ -163,12 +163,18 @@ github.com/godbus/dbus
# github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d
github.com/gogo/protobuf/proto
github.com/gogo/protobuf/sortkeys
-# github.com/golang/protobuf v1.3.1
+# github.com/golang/protobuf v1.3.2
github.com/golang/protobuf/proto
github.com/golang/protobuf/ptypes
github.com/golang/protobuf/ptypes/any
github.com/golang/protobuf/ptypes/duration
github.com/golang/protobuf/ptypes/timestamp
+# github.com/google/go-cmp v0.3.0
+github.com/google/go-cmp/cmp
+github.com/google/go-cmp/cmp/internal/diff
+github.com/google/go-cmp/cmp/internal/flags
+github.com/google/go-cmp/cmp/internal/function
+github.com/google/go-cmp/cmp/internal/value
# github.com/google/go-github/v26 v26.1.3
github.com/google/go-github/v26/github
# github.com/google/go-querystring v1.0.0
@@ -236,13 +242,15 @@ github.com/mmcdole/goxpp
github.com/modern-go/concurrent
# github.com/modern-go/reflect2 v1.0.1
github.com/modern-go/reflect2
+# github.com/nicklaw5/helix v0.5.4
+github.com/nicklaw5/helix
# github.com/olebedev/config v0.0.0-20190528211619-364964f3a8e4
github.com/olebedev/config
# github.com/olekukonko/tablewriter v0.0.4
github.com/olekukonko/tablewriter
# github.com/opencontainers/go-digest v1.0.0-rc1
github.com/opencontainers/go-digest
-# github.com/pkg/errors v0.8.1
+# github.com/pkg/errors v0.9.1
github.com/pkg/errors
# github.com/pkg/profile v1.4.0
github.com/pkg/profile
@@ -250,9 +258,9 @@ github.com/pkg/profile
github.com/pmezard/go-difflib/difflib
# github.com/radovskyb/watcher v1.0.7
github.com/radovskyb/watcher
-# github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341
+# github.com/rivo/tview v0.0.0-20200108161608-1316ea7a4b35
github.com/rivo/tview
-# github.com/rivo/uniseg v0.0.0-20190513083848-b9f5b9457d44
+# github.com/rivo/uniseg v0.1.0
github.com/rivo/uniseg
# github.com/shirou/gopsutil v2.19.11+incompatible
github.com/shirou/gopsutil/cpu
@@ -266,7 +274,7 @@ github.com/stretchr/testify/assert
github.com/wtfutil/spotigopher/spotigopher
# github.com/wtfutil/todoist v0.0.2-0.20191216004217-0ec29ceda61a
github.com/wtfutil/todoist
-# github.com/xanzy/go-gitlab v0.22.2
+# github.com/xanzy/go-gitlab v0.22.3
github.com/xanzy/go-gitlab
# github.com/zmb3/spotify v0.0.0-20191010212056-e12fb981aacb
github.com/zmb3/spotify
@@ -289,7 +297,7 @@ go.opencensus.io/trace
go.opencensus.io/trace/internal
go.opencensus.io/trace/propagation
go.opencensus.io/trace/tracestate
-# golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
+# golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550
golang.org/x/crypto/cast5
golang.org/x/crypto/openpgp
golang.org/x/crypto/openpgp/armor
@@ -298,7 +306,7 @@ golang.org/x/crypto/openpgp/errors
golang.org/x/crypto/openpgp/packet
golang.org/x/crypto/openpgp/s2k
golang.org/x/crypto/ssh/terminal
-# golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc
+# golang.org/x/net v0.0.0-20190923162816-aa69164e4478
golang.org/x/net/context
golang.org/x/net/context/ctxhttp
golang.org/x/net/html
@@ -319,7 +327,7 @@ golang.org/x/oauth2/google
golang.org/x/oauth2/internal
golang.org/x/oauth2/jws
golang.org/x/oauth2/jwt
-# golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756
+# golang.org/x/sys v0.0.0-20191018095205-727590c5006e
golang.org/x/sys/unix
golang.org/x/sys/windows
# golang.org/x/text v0.3.2
@@ -333,11 +341,19 @@ golang.org/x/text/encoding/korean
golang.org/x/text/encoding/simplifiedchinese
golang.org/x/text/encoding/traditionalchinese
golang.org/x/text/encoding/unicode
+golang.org/x/text/feature/plural
+golang.org/x/text/internal
+golang.org/x/text/internal/catmsg
+golang.org/x/text/internal/format
golang.org/x/text/internal/language
golang.org/x/text/internal/language/compact
+golang.org/x/text/internal/number
+golang.org/x/text/internal/stringset
golang.org/x/text/internal/tag
golang.org/x/text/internal/utf8internal
golang.org/x/text/language
+golang.org/x/text/message
+golang.org/x/text/message/catalog
golang.org/x/text/runes
golang.org/x/text/secure/bidirule
golang.org/x/text/transform
@@ -345,7 +361,7 @@ golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
# golang.org/x/time v0.0.0-20181108054448-85acf8d2951c
golang.org/x/time/rate
-# google.golang.org/api v0.14.0
+# google.golang.org/api v0.15.0
google.golang.org/api/analytics/v3
google.golang.org/api/analyticsreporting/v4
google.golang.org/api/calendar/v3
@@ -408,6 +424,12 @@ google.golang.org/grpc/tap
gopkg.in/inf.v0
# gopkg.in/yaml.v2 v2.2.7
gopkg.in/yaml.v2
+# gotest.tools v2.2.0+incompatible
+gotest.tools/assert
+gotest.tools/assert/cmp
+gotest.tools/internal/difflib
+gotest.tools/internal/format
+gotest.tools/internal/source
# k8s.io/api v0.0.0-20191010143144-fbf594f18f80
k8s.io/api/admissionregistration/v1beta1
k8s.io/api/apps/v1