mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-06 01:38:10 +00:00
Merge pull request #317 from johanneswuerbach/openapi
Serve openapi spec
This commit is contained in:
commit
b9e5a71d72
955 changed files with 80224 additions and 106877 deletions
7
Makefile
7
Makefile
|
|
@ -5,6 +5,8 @@ ALL_ARCH=amd64 arm arm64 ppc64le s390x
|
||||||
ML_PLATFORMS=linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x
|
ML_PLATFORMS=linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x
|
||||||
OUT_DIR?=$(PWD)/_output
|
OUT_DIR?=$(PWD)/_output
|
||||||
|
|
||||||
|
OPENAPI_PATH=$(GOPATH)/src/k8s.io/kube-openapi
|
||||||
|
|
||||||
VERSION?=latest
|
VERSION?=latest
|
||||||
GOIMAGE=golang:1.13
|
GOIMAGE=golang:1.13
|
||||||
GO111MODULE=on
|
GO111MODULE=on
|
||||||
|
|
@ -77,3 +79,8 @@ go-mod:
|
||||||
go mod verify
|
go mod verify
|
||||||
|
|
||||||
verify: verify-gofmt go-mod test
|
verify: verify-gofmt go-mod test
|
||||||
|
|
||||||
|
pkg/api/generated/openapi/zz_generated.openapi.go:
|
||||||
|
GO111MODULE=off go get -d k8s.io/kube-openapi || true
|
||||||
|
rm -rf pkg/api/generated/openapi
|
||||||
|
cd $(OPENAPI_PATH) && go run ./cmd/openapi-gen/openapi-gen.go --logtostderr -i k8s.io/metrics/pkg/apis/custom_metrics,k8s.io/metrics/pkg/apis/custom_metrics/v1beta1,k8s.io/metrics/pkg/apis/custom_metrics/v1beta2,k8s.io/metrics/pkg/apis/external_metrics,k8s.io/metrics/pkg/apis/external_metrics/v1beta1,k8s.io/metrics/pkg/apis/metrics,k8s.io/metrics/pkg/apis/metrics/v1beta1,k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/api/resource,k8s.io/apimachinery/pkg/version,k8s.io/api/core/v1 -p github.com/directxman12/k8s-prometheus-adapter/pkg/api/generated/openapi -O zz_generated.openapi -r /dev/null
|
||||||
|
|
|
||||||
|
|
@ -28,16 +28,20 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
|
openapinamer "k8s.io/apiserver/pkg/endpoints/openapi"
|
||||||
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
"k8s.io/client-go/transport"
|
"k8s.io/client-go/transport"
|
||||||
"k8s.io/component-base/logs"
|
"k8s.io/component-base/logs"
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
|
"k8s.io/sample-apiserver/pkg/apiserver"
|
||||||
|
|
||||||
basecmd "github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd"
|
basecmd "github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd"
|
||||||
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/provider"
|
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/provider"
|
||||||
"sigs.k8s.io/metrics-server/pkg/api"
|
"sigs.k8s.io/metrics-server/pkg/api"
|
||||||
|
|
||||||
|
generatedopenapi "github.com/directxman12/k8s-prometheus-adapter/pkg/api/generated/openapi"
|
||||||
prom "github.com/directxman12/k8s-prometheus-adapter/pkg/client"
|
prom "github.com/directxman12/k8s-prometheus-adapter/pkg/client"
|
||||||
mprom "github.com/directxman12/k8s-prometheus-adapter/pkg/client/metrics"
|
mprom "github.com/directxman12/k8s-prometheus-adapter/pkg/client/metrics"
|
||||||
adaptercfg "github.com/directxman12/k8s-prometheus-adapter/pkg/config"
|
adaptercfg "github.com/directxman12/k8s-prometheus-adapter/pkg/config"
|
||||||
|
|
@ -241,6 +245,11 @@ func main() {
|
||||||
MetricsRelistInterval: 10 * time.Minute,
|
MetricsRelistInterval: 10 * time.Minute,
|
||||||
}
|
}
|
||||||
cmd.Name = "prometheus-metrics-adapter"
|
cmd.Name = "prometheus-metrics-adapter"
|
||||||
|
|
||||||
|
cmd.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions, openapinamer.NewDefinitionNamer(apiserver.Scheme))
|
||||||
|
cmd.OpenAPIConfig.Info.Title = "prometheus-metrics-adapter"
|
||||||
|
cmd.OpenAPIConfig.Info.Version = "1.0.0"
|
||||||
|
|
||||||
cmd.addFlags()
|
cmd.addFlags()
|
||||||
cmd.Flags().AddGoFlagSet(flag.CommandLine) // make sure we get the klog flags
|
cmd.Flags().AddGoFlagSet(flag.CommandLine) // make sure we get the klog flags
|
||||||
if err := cmd.Flags().Parse(os.Args); err != nil {
|
if err := cmd.Flags().Parse(os.Args); err != nil {
|
||||||
|
|
|
||||||
33
go.mod
33
go.mod
|
|
@ -4,28 +4,27 @@ go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/NYTimes/gziphandler v1.0.1 // indirect
|
github.com/NYTimes/gziphandler v1.0.1 // indirect
|
||||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
|
github.com/go-openapi/spec v0.19.8
|
||||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef // indirect
|
github.com/imdario/mergo v0.3.8 // indirect
|
||||||
github.com/kubernetes-incubator/custom-metrics-apiserver v0.0.0-20200323093244-5046ce1afe6b
|
github.com/kubernetes-incubator/custom-metrics-apiserver v0.0.0-20201023074945-51cc7b53320e
|
||||||
github.com/onsi/ginkgo v1.10.1
|
github.com/onsi/ginkgo v1.11.0
|
||||||
github.com/onsi/gomega v1.7.0
|
github.com/onsi/gomega v1.7.0
|
||||||
github.com/prometheus/client_golang v1.0.0
|
github.com/prometheus/client_golang v1.0.0
|
||||||
github.com/prometheus/common v0.4.1
|
github.com/prometheus/common v0.10.0
|
||||||
github.com/spf13/cobra v0.0.5
|
github.com/spf13/cobra v1.0.0
|
||||||
github.com/stretchr/testify v1.4.0
|
github.com/stretchr/testify v1.4.0
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect
|
|
||||||
gopkg.in/yaml.v2 v2.2.8
|
gopkg.in/yaml.v2 v2.2.8
|
||||||
k8s.io/api v0.17.3
|
k8s.io/api v0.18.5
|
||||||
k8s.io/apimachinery v0.17.3
|
k8s.io/apimachinery v0.18.5
|
||||||
k8s.io/client-go v0.17.3
|
k8s.io/apiserver v0.18.5
|
||||||
k8s.io/component-base v0.17.3
|
k8s.io/client-go v0.18.5
|
||||||
|
k8s.io/component-base v0.18.5
|
||||||
k8s.io/klog v1.0.0
|
k8s.io/klog v1.0.0
|
||||||
k8s.io/metrics v0.17.3
|
k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6
|
||||||
sigs.k8s.io/metrics-server v0.3.7
|
k8s.io/metrics v0.18.5
|
||||||
|
k8s.io/sample-apiserver v0.18.5
|
||||||
|
sigs.k8s.io/metrics-server v0.3.7-0.20200925134111-c39853110962
|
||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
|
||||||
// forced by the inclusion of sigs.k8s.io/metrics-server's use of this in their go.mod
|
// forced by the inclusion of sigs.k8s.io/metrics-server's use of this in their go.mod
|
||||||
k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1 => ./localvendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1
|
replace k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1 => ./localvendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1
|
||||||
sigs.k8s.io/metrics-server v0.3.7 => sigs.k8s.io/metrics-server v0.0.0-20200406215547-5fcf6956a533
|
|
||||||
)
|
|
||||||
|
|
|
||||||
195
go.sum
195
go.sum
|
|
@ -11,10 +11,10 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L
|
||||||
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
|
||||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||||
github.com/NYTimes/gziphandler v1.0.1 h1:iLrQrdwjDd52kHDA5op2UBJFjmOb9g+7scBan4RN8F0=
|
github.com/NYTimes/gziphandler v1.0.1 h1:iLrQrdwjDd52kHDA5op2UBJFjmOb9g+7scBan4RN8F0=
|
||||||
github.com/NYTimes/gziphandler v1.0.1/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
github.com/NYTimes/gziphandler v1.0.1/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||||
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||||
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
||||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||||
|
|
@ -22,8 +22,9 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/alessio/shellescape v0.0.0-20190409004728-b115ca0f9053/go.mod h1:xW8sBma2LE3QxFSzCnH9qe6gAE2yO9GvQaWwX89HxbE=
|
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
|
|
@ -32,9 +33,13 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
|
||||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||||
github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs=
|
github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs=
|
||||||
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||||
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
|
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||||
|
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y=
|
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y=
|
||||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||||
|
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
||||||
github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
|
github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
|
||||||
|
|
@ -50,28 +55,29 @@ github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfc
|
||||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=
|
||||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||||
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
|
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||||
github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
|
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
|
||||||
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||||
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
||||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||||
github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
||||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||||
github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
|
github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
|
||||||
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||||
github.com/emicklei/go-restful-swagger12 v0.0.0-20170208215640-dcef7f557305 h1:2vAWk0wMCWb/pYiyat2rRZp5I5ZM+efPlagySNZ3JeM=
|
github.com/emicklei/go-restful-swagger12 v0.0.0-20170208215640-dcef7f557305 h1:2vAWk0wMCWb/pYiyat2rRZp5I5ZM+efPlagySNZ3JeM=
|
||||||
github.com/emicklei/go-restful-swagger12 v0.0.0-20170208215640-dcef7f557305/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ=
|
github.com/emicklei/go-restful-swagger12 v0.0.0-20170208215640-dcef7f557305/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
|
github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
|
||||||
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M=
|
|
||||||
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
|
|
@ -80,7 +86,9 @@ github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2H
|
||||||
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
|
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||||
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
|
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
|
||||||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
|
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
|
||||||
|
|
@ -93,16 +101,20 @@ github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL9
|
||||||
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
|
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
|
||||||
github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc=
|
github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc=
|
||||||
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
|
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
|
||||||
|
github.com/go-openapi/spec v0.19.8 h1:qAdZLh1r6QF/hI/gTq+TJTvsQUodZsM7KLqkAJdiJNg=
|
||||||
|
github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
|
||||||
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
|
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
|
||||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||||
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
|
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
|
||||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||||
|
github.com/go-openapi/swag v0.19.9 h1:1IxuqvBUU3S2Bi4YC7tlP9SJF1gVpCvqN0T2Qof4azE=
|
||||||
|
github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
|
github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||||
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
|
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
|
||||||
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
|
@ -116,15 +128,19 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
||||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/google/addlicense v0.0.0-20200906110928-a0294312aa76/go.mod h1:EMjYTRimagHs1FwlIqKyX3wAM0u3rA+McvlIIWmSamA=
|
||||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
|
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
|
||||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
||||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
|
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
||||||
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
|
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
|
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
|
||||||
|
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
||||||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
||||||
github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA=
|
github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA=
|
||||||
|
|
@ -134,15 +150,19 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k=
|
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k=
|
||||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||||
|
github.com/googleapis/gnostic v0.1.0 h1:rVsPeBmXbYv4If/cumu1AzZPwV58q433hvONV1UEZoI=
|
||||||
|
github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||||
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
|
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
|
||||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
||||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||||
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI=
|
github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
||||||
|
|
@ -160,7 +180,6 @@ github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NH
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
||||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||||
github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
|
||||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
|
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
|
||||||
|
|
@ -179,17 +198,18 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kubernetes-incubator/custom-metrics-apiserver v0.0.0-20200323093244-5046ce1afe6b h1:+hyh/xJbvel82RP6HBASIudJ1O8/bH8RA2SaRJ8v7+E=
|
github.com/kubernetes-incubator/custom-metrics-apiserver v0.0.0-20201023074945-51cc7b53320e h1:3/grBSh6yFHl9M9vcKi6gADLDTRY5HXyBsP9m8D/BCM=
|
||||||
github.com/kubernetes-incubator/custom-metrics-apiserver v0.0.0-20200323093244-5046ce1afe6b/go.mod h1:ipPARShJU/8FZINT0WNtWoAD6BZkc7ZkU/K40Gg/mRk=
|
github.com/kubernetes-incubator/custom-metrics-apiserver v0.0.0-20201023074945-51cc7b53320e/go.mod h1:HC8NX3rFsf/fQLvm2T/Jj4EZsGB6nmH7AMC+upfd1og=
|
||||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM=
|
github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM=
|
||||||
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
||||||
|
github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8=
|
||||||
|
github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
||||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||||
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
|
||||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
|
|
@ -198,7 +218,6 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
|
||||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
|
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
|
||||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
|
|
@ -207,56 +226,66 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
||||||
|
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||||
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
|
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
|
||||||
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
|
github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
|
github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
|
||||||
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||||
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
|
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
|
||||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
|
|
||||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||||
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
|
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.9.0 h1:J8lpUdobwIeCI7OiSxHqEwJUKvJwicL5+3v1oe2Yb4k=
|
|
||||||
github.com/pkg/errors v0.9.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
|
github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
|
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||||
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
|
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
|
||||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
|
||||||
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||||
|
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
|
||||||
|
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
|
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=
|
github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=
|
||||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||||
|
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||||
github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
|
github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
|
||||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
|
github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
|
||||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||||
github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
|
|
||||||
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
||||||
|
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
||||||
|
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
|
|
@ -264,10 +293,10 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
|
||||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
||||||
|
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||||
github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
|
@ -276,11 +305,13 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
||||||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
|
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
|
||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
|
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
|
go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
|
||||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0=
|
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0=
|
||||||
|
|
@ -288,6 +319,8 @@ go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mI
|
||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||||
go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4=
|
go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4=
|
||||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
|
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
|
||||||
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
|
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
|
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
|
||||||
|
|
@ -298,17 +331,15 @@ golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnf
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
|
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
|
||||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||||
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
||||||
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
|
||||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
|
||||||
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
|
@ -320,12 +351,15 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
|
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
|
||||||
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
|
||||||
|
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
|
||||||
|
|
@ -336,6 +370,8 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FY
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
|
||||||
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
|
@ -346,22 +382,24 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h
|
||||||
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
|
||||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg=
|
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg=
|
||||||
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1 h1:gZpLHxUX5BdYLA08Lj4YCJNN/jk7KtquiArPoeX0WvA=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
|
||||||
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
|
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2 h1:+DCIGbF/swA92ohVg0//6X2IVY3KZs6p9mix0ziNYJM=
|
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2 h1:+DCIGbF/swA92ohVg0//6X2IVY3KZs6p9mix0ziNYJM=
|
||||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
|
@ -372,18 +410,15 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
|
||||||
golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
|
|
||||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
|
@ -392,12 +427,16 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873 h1:nfPFGzJkUDX6uBmpN/pSw7MbOAWegH5QDQuoXFHedLg=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE=
|
||||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
|
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk=
|
google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk=
|
||||||
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
|
google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg=
|
||||||
|
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|
@ -420,48 +459,60 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
|
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
|
||||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
||||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
k8s.io/api v0.17.3 h1:XAm3PZp3wnEdzekNkcmj/9Y1zdmQYJ1I4GKSBBZ8aG0=
|
k8s.io/api v0.18.2 h1:wG5g5ZmSVgm5B+eHMIbI9EGATS2L8Z72rda19RIEgY8=
|
||||||
k8s.io/api v0.17.3/go.mod h1:YZ0OTkuw7ipbe305fMpIdf3GLXZKRigjtZaV5gzC2J0=
|
k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78=
|
||||||
k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
|
k8s.io/api v0.18.5 h1:fKbCxr+U3fu7k6jB+QeYPD/c6xKYeSJ2KVWmyUypuWM=
|
||||||
k8s.io/apimachinery v0.17.3 h1:f+uZV6rm4/tHE7xXgLyToprg6xWairaClGVkm2t8omg=
|
k8s.io/api v0.18.5/go.mod h1:tN+e/2nbdGKOAH55NMV8oGrMG+3uRlA9GaRfvnCCSNk=
|
||||||
k8s.io/apimachinery v0.17.3/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g=
|
k8s.io/apimachinery v0.18.2 h1:44CmtbmkzVDAhCpRVSiP2R5PPrC2RtlIv/MoB8xpdRA=
|
||||||
k8s.io/apiserver v0.17.3 h1:faZbSuFtJ4dx09vctKZGHms/7bp3qFtbqb10Swswqfs=
|
k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA=
|
||||||
k8s.io/apiserver v0.17.3/go.mod h1:iJtsPpu1ZpEnHaNawpSV0nYTGBhhX2dUlnn7/QS7QiY=
|
k8s.io/apimachinery v0.18.5 h1:Lh6tgsM9FMkC12K5T5QjRm7rDs6aQN5JHkA0JomULDM=
|
||||||
k8s.io/client-go v0.17.3 h1:deUna1Ksx05XeESH6XGCyONNFfiQmDdqeqUvicvP6nU=
|
k8s.io/apimachinery v0.18.5/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko=
|
||||||
k8s.io/client-go v0.17.3/go.mod h1:cLXlTMtWHkuK4tD360KpWz2gG2KtdWEr/OT02i3emRQ=
|
k8s.io/apiserver v0.18.2 h1:fwKxdTWwwYhxvtjo0UUfX+/fsitsNtfErPNegH2x9ic=
|
||||||
k8s.io/code-generator v0.17.3/go.mod h1:l8BLVwASXQZTo2xamW5mQNFCe1XPiAesVq7Y1t7PiQQ=
|
k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw=
|
||||||
k8s.io/component-base v0.17.3 h1:hQzTSshY14aLSR6WGIYvmw+w+u6V4d+iDR2iDGMrlUg=
|
k8s.io/apiserver v0.18.5 h1:+kk0J2Qf6xd8a5rxcNpf80jwCF99KUWA7tpvctTWObc=
|
||||||
k8s.io/component-base v0.17.3/go.mod h1:GeQf4BrgelWm64PXkIXiPh/XS0hnO42d9gx9BtbZRp8=
|
k8s.io/apiserver v0.18.5/go.mod h1:+1XgOMq7YJ3OyqPNSJ54EveHwCoBWcJT9CaPycYI5ps=
|
||||||
|
k8s.io/client-go v0.18.2 h1:aLB0iaD4nmwh7arT2wIn+lMnAq7OswjaejkQ8p9bBYE=
|
||||||
|
k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU=
|
||||||
|
k8s.io/client-go v0.18.5 h1:cLhGZdOmyPhwtt20Lrb7uAqxxB1uvY+NTmNJvno1oKA=
|
||||||
|
k8s.io/client-go v0.18.5/go.mod h1:EsiD+7Fx+bRckKWZXnAXRKKetm1WuzPagH4iOSC8x58=
|
||||||
|
k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
|
||||||
|
k8s.io/code-generator v0.18.5/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
|
||||||
|
k8s.io/component-base v0.18.2 h1:SJweNZAGcUvsypLGNPNGeJ9UgPZQ6+bW+gEHe8uyh/Y=
|
||||||
|
k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM=
|
||||||
|
k8s.io/component-base v0.18.5 h1:QIz2xFax8W5XQREoNcP/MHgnt4ClgfZ837Qx9yCeCzA=
|
||||||
|
k8s.io/component-base v0.18.5/go.mod h1:RSbcboNk4B+S8Acs2JaBOVW3XNz1+A637s2jL+QQrlU=
|
||||||
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||||
k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||||
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||||
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||||
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
|
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
|
||||||
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||||
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU=
|
k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c h1:/KUFqjjqAcY4Us6luF5RDNZ16KJtb49HfR3ZHB9qYXM=
|
||||||
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
|
k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
|
||||||
k8s.io/metrics v0.17.3 h1:IqXkNK+5E3vnobFD923Mn1QJEt3fb6+sK0wIjtBzOvw=
|
k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6 h1:Oh3Mzx5pJ+yIumsAD0MOECPVeXsVot0UkiaCGVyfGQY=
|
||||||
k8s.io/metrics v0.17.3/go.mod h1:HEJGy1fhHOjHggW9rMDBJBD3YuGroH3Y1pnIRw9FFaI=
|
k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
|
||||||
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f h1:GiPwtSzdP43eI1hpPCbROQCCIgCuiMMNF8YUVLF3vJo=
|
k8s.io/metrics v0.18.2 h1:v4J7WKu/Zo/htSH3w//UWJZT9/CpUThXWYyUbQ/F/jY=
|
||||||
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
k8s.io/metrics v0.18.2/go.mod h1:qga8E7QfYNR9Q89cSCAjinC9pTZ7yv1XSVGUB0vJypg=
|
||||||
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
|
k8s.io/metrics v0.18.5 h1:Q2YSvV3x3Z20LviLqPTyCC7HmdOZ1ijuSxEyEMh/4nc=
|
||||||
modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
|
k8s.io/metrics v0.18.5/go.mod h1:pqn6YiCCxUt067ivZVo4KtvppvdykV6HHG5+7ygVkNg=
|
||||||
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
|
k8s.io/sample-apiserver v0.18.5 h1:h8r4/BHRhw8OrcUBCiIBQ6VnejjPaArUpix+AL0z0gw=
|
||||||
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
|
k8s.io/sample-apiserver v0.18.5/go.mod h1:j6O2qoyFCKA6q8MudWKwNQ+/h9nJgwetyzqsbMLlY+g=
|
||||||
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
|
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 h1:d4vVOjXm687F1iLSP2q3lyPPuyvTUt3aVoBpi2DqRsU=
|
||||||
sigs.k8s.io/kind v0.7.0/go.mod h1:An/AbWHT6pA/Lm0Og8j3ukGhfJP3RiVN/IBU6Lo3zl8=
|
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||||
sigs.k8s.io/metrics-server v0.0.0-20200406215547-5fcf6956a533 h1:540Q0iT8PVI3b9hY8+cGNjLLosvoYLeyBaqZdvNTxPM=
|
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7 h1:uuHDyjllyzRyCIvvn0OBjiRB0SgBZGqHNYAmjR7fO50=
|
||||||
sigs.k8s.io/metrics-server v0.0.0-20200406215547-5fcf6956a533/go.mod h1:ARGPbFxbgiAhy6+8jmNNdJ2jcDbOBl7kolMpf+FL6WM=
|
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
|
||||||
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
|
sigs.k8s.io/metrics-server v0.3.7-0.20200925134111-c39853110962 h1:ZrrCkazddayRJmBfdShojMou0ZT7wUm93sdF1DCSoMc=
|
||||||
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU=
|
sigs.k8s.io/metrics-server v0.3.7-0.20200925134111-c39853110962/go.mod h1:6e/nycRyaA5SewyQQhsVuZHET4FjDU3/rMWW7g0LWRo=
|
||||||
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18=
|
sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
|
||||||
|
sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E=
|
||||||
|
sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
|
||||||
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
|
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
|
||||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||||
|
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||||
|
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
||||||
|
|
|
||||||
14083
pkg/api/generated/openapi/zz_generated.openapi.go
Normal file
14083
pkg/api/generated/openapi/zz_generated.openapi.go
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -120,9 +120,9 @@ type nsQueryResults struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetContainerMetrics implements the api.MetricsProvider interface. It may return nil, nil, nil.
|
// GetContainerMetrics implements the api.MetricsProvider interface. It may return nil, nil, nil.
|
||||||
func (p *resourceProvider) GetContainerMetrics(pods ...apitypes.NamespacedName) ([]api.TimeInfo, [][]metrics.ContainerMetrics, error) {
|
func (p *resourceProvider) GetContainerMetrics(pods ...apitypes.NamespacedName) ([]api.TimeInfo, [][]metrics.ContainerMetrics) {
|
||||||
if len(pods) == 0 {
|
if len(pods) == 0 {
|
||||||
return nil, nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(directxman12): figure out how well this scales if we go to list 1000+ pods
|
// TODO(directxman12): figure out how well this scales if we go to list 1000+ pods
|
||||||
|
|
@ -168,7 +168,7 @@ func (p *resourceProvider) GetContainerMetrics(pods ...apitypes.NamespacedName)
|
||||||
p.assignForPod(pod, resultsByNs, &resMetrics[i], &resTimes[i])
|
p.assignForPod(pod, resultsByNs, &resMetrics[i], &resTimes[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
return resTimes, resMetrics, nil
|
return resTimes, resMetrics
|
||||||
}
|
}
|
||||||
|
|
||||||
// assignForPod takes the resource metrics for all containers in the given pod
|
// assignForPod takes the resource metrics for all containers in the given pod
|
||||||
|
|
@ -240,10 +240,10 @@ func (p *resourceProvider) assignForPod(pod apitypes.NamespacedName, resultsByNs
|
||||||
*resMetrics = containerMetricsList
|
*resMetrics = containerMetricsList
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNodeMetrics implements the api.MetricsProvider interface. It may return nil, nil, nil.
|
// GetNodeMetrics implements the api.MetricsProvider interface. It may return nil, nil.
|
||||||
func (p *resourceProvider) GetNodeMetrics(nodes ...string) ([]api.TimeInfo, []corev1.ResourceList, error) {
|
func (p *resourceProvider) GetNodeMetrics(nodes ...string) ([]api.TimeInfo, []corev1.ResourceList) {
|
||||||
if len(nodes) == 0 {
|
if len(nodes) == 0 {
|
||||||
return nil, nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
now := pmodel.Now()
|
now := pmodel.Now()
|
||||||
|
|
@ -251,7 +251,8 @@ func (p *resourceProvider) GetNodeMetrics(nodes ...string) ([]api.TimeInfo, []co
|
||||||
// run the actual query
|
// run the actual query
|
||||||
qRes := p.queryBoth(now, nodeResource, "", nodes...)
|
qRes := p.queryBoth(now, nodeResource, "", nodes...)
|
||||||
if qRes.err != nil {
|
if qRes.err != nil {
|
||||||
return nil, nil, qRes.err
|
klog.Errorf("failed querying node metrics: %v", qRes.err)
|
||||||
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
resTimes := make([]api.TimeInfo, len(nodes))
|
resTimes := make([]api.TimeInfo, len(nodes))
|
||||||
|
|
@ -295,7 +296,7 @@ func (p *resourceProvider) GetNodeMetrics(nodes ...string) ([]api.TimeInfo, []co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return resTimes, resMetrics, nil
|
return resTimes, resMetrics
|
||||||
}
|
}
|
||||||
|
|
||||||
// queryBoth queries for both CPU and memory metrics on the given
|
// queryBoth queries for both CPU and memory metrics on the given
|
||||||
|
|
|
||||||
|
|
@ -146,8 +146,7 @@ var _ = Describe("Resource Metrics Provider", func() {
|
||||||
}
|
}
|
||||||
|
|
||||||
By("querying for metrics for some pods")
|
By("querying for metrics for some pods")
|
||||||
times, metricVals, err := prov.GetContainerMetrics(pods...)
|
times, metricVals := prov.GetContainerMetrics(pods...)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
|
|
||||||
By("verifying that the reported times for each are the earliest times for each pod")
|
By("verifying that the reported times for each are the earliest times for each pod")
|
||||||
Expect(times).To(Equal([]api.TimeInfo{
|
Expect(times).To(Equal([]api.TimeInfo{
|
||||||
|
|
@ -185,11 +184,10 @@ var _ = Describe("Resource Metrics Provider", func() {
|
||||||
}
|
}
|
||||||
|
|
||||||
By("querying for metrics for some pods, one of which is missing")
|
By("querying for metrics for some pods, one of which is missing")
|
||||||
times, metricVals, err := prov.GetContainerMetrics(
|
times, metricVals := prov.GetContainerMetrics(
|
||||||
types.NamespacedName{Namespace: "some-ns", Name: "pod1"},
|
types.NamespacedName{Namespace: "some-ns", Name: "pod1"},
|
||||||
types.NamespacedName{Namespace: "some-ns", Name: "pod-nonexistant"},
|
types.NamespacedName{Namespace: "some-ns", Name: "pod-nonexistant"},
|
||||||
)
|
)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
|
|
||||||
By("verifying that the missing pod had nil metrics")
|
By("verifying that the missing pod had nil metrics")
|
||||||
Expect(metricVals).To(HaveLen(2))
|
Expect(metricVals).To(HaveLen(2))
|
||||||
|
|
@ -216,8 +214,7 @@ var _ = Describe("Resource Metrics Provider", func() {
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
By("querying for metrics for some nodes")
|
By("querying for metrics for some nodes")
|
||||||
times, metricVals, err := prov.GetNodeMetrics("node1", "node2")
|
times, metricVals := prov.GetNodeMetrics("node1", "node2")
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
|
|
||||||
By("verifying that the reported times for each are the earliest times for each pod")
|
By("verifying that the reported times for each are the earliest times for each pod")
|
||||||
Expect(times).To(Equal([]api.TimeInfo{
|
Expect(times).To(Equal([]api.TimeInfo{
|
||||||
|
|
@ -244,8 +241,7 @@ var _ = Describe("Resource Metrics Provider", func() {
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
By("querying for metrics for some nodes, one of which is missing")
|
By("querying for metrics for some nodes, one of which is missing")
|
||||||
times, metricVals, err := prov.GetNodeMetrics("node1", "node2", "node3")
|
times, metricVals := prov.GetNodeMetrics("node1", "node2", "node3")
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
|
|
||||||
By("verifying that the missing pod had nil metrics")
|
By("verifying that the missing pod had nil metrics")
|
||||||
Expect(metricVals).To(HaveLen(3))
|
Expect(metricVals).To(HaveLen(3))
|
||||||
|
|
|
||||||
204
vendor/github.com/evanphx/json-patch/patch.go
generated
vendored
204
vendor/github.com/evanphx/json-patch/patch.go
generated
vendored
|
|
@ -6,8 +6,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -26,14 +24,6 @@ var (
|
||||||
AccumulatedCopySizeLimit int64 = 0
|
AccumulatedCopySizeLimit int64 = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
ErrTestFailed = errors.New("test failed")
|
|
||||||
ErrMissing = errors.New("missing value")
|
|
||||||
ErrUnknownType = errors.New("unknown object type")
|
|
||||||
ErrInvalid = errors.New("invalid state detected")
|
|
||||||
ErrInvalidIndex = errors.New("invalid index referenced")
|
|
||||||
)
|
|
||||||
|
|
||||||
type lazyNode struct {
|
type lazyNode struct {
|
||||||
raw *json.RawMessage
|
raw *json.RawMessage
|
||||||
doc partialDoc
|
doc partialDoc
|
||||||
|
|
@ -41,11 +31,10 @@ type lazyNode struct {
|
||||||
which int
|
which int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Operation is a single JSON-Patch step, such as a single 'add' operation.
|
type operation map[string]*json.RawMessage
|
||||||
type Operation map[string]*json.RawMessage
|
|
||||||
|
|
||||||
// Patch is an ordered collection of Operations.
|
// Patch is an ordered collection of operations.
|
||||||
type Patch []Operation
|
type Patch []operation
|
||||||
|
|
||||||
type partialDoc map[string]*lazyNode
|
type partialDoc map[string]*lazyNode
|
||||||
type partialArray []*lazyNode
|
type partialArray []*lazyNode
|
||||||
|
|
@ -70,7 +59,7 @@ func (n *lazyNode) MarshalJSON() ([]byte, error) {
|
||||||
case eAry:
|
case eAry:
|
||||||
return json.Marshal(n.ary)
|
return json.Marshal(n.ary)
|
||||||
default:
|
default:
|
||||||
return nil, ErrUnknownType
|
return nil, fmt.Errorf("Unknown type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -102,7 +91,7 @@ func (n *lazyNode) intoDoc() (*partialDoc, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if n.raw == nil {
|
if n.raw == nil {
|
||||||
return nil, ErrInvalid
|
return nil, fmt.Errorf("Unable to unmarshal nil pointer as partial document")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := json.Unmarshal(*n.raw, &n.doc)
|
err := json.Unmarshal(*n.raw, &n.doc)
|
||||||
|
|
@ -121,7 +110,7 @@ func (n *lazyNode) intoAry() (*partialArray, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if n.raw == nil {
|
if n.raw == nil {
|
||||||
return nil, ErrInvalid
|
return nil, fmt.Errorf("Unable to unmarshal nil pointer as partial array")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := json.Unmarshal(*n.raw, &n.ary)
|
err := json.Unmarshal(*n.raw, &n.ary)
|
||||||
|
|
@ -238,8 +227,7 @@ func (n *lazyNode) equal(o *lazyNode) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kind reads the "op" field of the Operation.
|
func (o operation) kind() string {
|
||||||
func (o Operation) Kind() string {
|
|
||||||
if obj, ok := o["op"]; ok && obj != nil {
|
if obj, ok := o["op"]; ok && obj != nil {
|
||||||
var op string
|
var op string
|
||||||
|
|
||||||
|
|
@ -255,41 +243,39 @@ func (o Operation) Kind() string {
|
||||||
return "unknown"
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path reads the "path" field of the Operation.
|
func (o operation) path() string {
|
||||||
func (o Operation) Path() (string, error) {
|
|
||||||
if obj, ok := o["path"]; ok && obj != nil {
|
if obj, ok := o["path"]; ok && obj != nil {
|
||||||
var op string
|
var op string
|
||||||
|
|
||||||
err := json.Unmarshal(*obj, &op)
|
err := json.Unmarshal(*obj, &op)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "unknown", err
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
return op, nil
|
return op
|
||||||
}
|
}
|
||||||
|
|
||||||
return "unknown", errors.Wrapf(ErrMissing, "operation missing path field")
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
// From reads the "from" field of the Operation.
|
func (o operation) from() string {
|
||||||
func (o Operation) From() (string, error) {
|
|
||||||
if obj, ok := o["from"]; ok && obj != nil {
|
if obj, ok := o["from"]; ok && obj != nil {
|
||||||
var op string
|
var op string
|
||||||
|
|
||||||
err := json.Unmarshal(*obj, &op)
|
err := json.Unmarshal(*obj, &op)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "unknown", err
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
return op, nil
|
return op
|
||||||
}
|
}
|
||||||
|
|
||||||
return "unknown", errors.Wrapf(ErrMissing, "operation, missing from field")
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o Operation) value() *lazyNode {
|
func (o operation) value() *lazyNode {
|
||||||
if obj, ok := o["value"]; ok {
|
if obj, ok := o["value"]; ok {
|
||||||
return newLazyNode(obj)
|
return newLazyNode(obj)
|
||||||
}
|
}
|
||||||
|
|
@ -297,23 +283,6 @@ func (o Operation) value() *lazyNode {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValueInterface decodes the operation value into an interface.
|
|
||||||
func (o Operation) ValueInterface() (interface{}, error) {
|
|
||||||
if obj, ok := o["value"]; ok && obj != nil {
|
|
||||||
var v interface{}
|
|
||||||
|
|
||||||
err := json.Unmarshal(*obj, &v)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return v, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, errors.Wrapf(ErrMissing, "operation, missing value field")
|
|
||||||
}
|
|
||||||
|
|
||||||
func isArray(buf []byte) bool {
|
func isArray(buf []byte) bool {
|
||||||
Loop:
|
Loop:
|
||||||
for _, c := range buf {
|
for _, c := range buf {
|
||||||
|
|
@ -390,7 +359,7 @@ func (d *partialDoc) get(key string) (*lazyNode, error) {
|
||||||
func (d *partialDoc) remove(key string) error {
|
func (d *partialDoc) remove(key string) error {
|
||||||
_, ok := (*d)[key]
|
_, ok := (*d)[key]
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Wrapf(ErrMissing, "Unable to remove nonexistent key: %s", key)
|
return fmt.Errorf("Unable to remove nonexistent key: %s", key)
|
||||||
}
|
}
|
||||||
|
|
||||||
delete(*d, key)
|
delete(*d, key)
|
||||||
|
|
@ -416,7 +385,7 @@ func (d *partialArray) add(key string, val *lazyNode) error {
|
||||||
|
|
||||||
idx, err := strconv.Atoi(key)
|
idx, err := strconv.Atoi(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "value was not a proper array index: '%s'", key)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
sz := len(*d) + 1
|
sz := len(*d) + 1
|
||||||
|
|
@ -426,12 +395,12 @@ func (d *partialArray) add(key string, val *lazyNode) error {
|
||||||
cur := *d
|
cur := *d
|
||||||
|
|
||||||
if idx >= len(ary) {
|
if idx >= len(ary) {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d", idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if SupportNegativeIndices {
|
if SupportNegativeIndices {
|
||||||
if idx < -len(ary) {
|
if idx < -len(ary) {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d", idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if idx < 0 {
|
if idx < 0 {
|
||||||
|
|
@ -455,7 +424,7 @@ func (d *partialArray) get(key string) (*lazyNode, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if idx >= len(*d) {
|
if idx >= len(*d) {
|
||||||
return nil, errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return nil, fmt.Errorf("Unable to access invalid index: %d", idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (*d)[idx], nil
|
return (*d)[idx], nil
|
||||||
|
|
@ -470,12 +439,12 @@ func (d *partialArray) remove(key string) error {
|
||||||
cur := *d
|
cur := *d
|
||||||
|
|
||||||
if idx >= len(cur) {
|
if idx >= len(cur) {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d", idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if SupportNegativeIndices {
|
if SupportNegativeIndices {
|
||||||
if idx < -len(cur) {
|
if idx < -len(cur) {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d", idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if idx < 0 {
|
if idx < 0 {
|
||||||
|
|
@ -493,189 +462,140 @@ func (d *partialArray) remove(key string) error {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p Patch) add(doc *container, op Operation) error {
|
func (p Patch) add(doc *container, op operation) error {
|
||||||
path, err := op.Path()
|
path := op.path()
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(ErrMissing, "add operation failed to decode path")
|
|
||||||
}
|
|
||||||
|
|
||||||
con, key := findObject(doc, path)
|
con, key := findObject(doc, path)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "add operation does not apply: doc is missing path: \"%s\"", path)
|
return fmt.Errorf("jsonpatch add operation does not apply: doc is missing path: \"%s\"", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.add(key, op.value())
|
return con.add(key, op.value())
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "error in add for path: '%s'", path)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
func (p Patch) remove(doc *container, op operation) error {
|
||||||
}
|
path := op.path()
|
||||||
|
|
||||||
func (p Patch) remove(doc *container, op Operation) error {
|
|
||||||
path, err := op.Path()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(ErrMissing, "remove operation failed to decode path")
|
|
||||||
}
|
|
||||||
|
|
||||||
con, key := findObject(doc, path)
|
con, key := findObject(doc, path)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "remove operation does not apply: doc is missing path: \"%s\"", path)
|
return fmt.Errorf("jsonpatch remove operation does not apply: doc is missing path: \"%s\"", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.remove(key)
|
return con.remove(key)
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "error in remove for path: '%s'", path)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
func (p Patch) replace(doc *container, op operation) error {
|
||||||
}
|
path := op.path()
|
||||||
|
|
||||||
func (p Patch) replace(doc *container, op Operation) error {
|
|
||||||
path, err := op.Path()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "replace operation failed to decode path")
|
|
||||||
}
|
|
||||||
|
|
||||||
con, key := findObject(doc, path)
|
con, key := findObject(doc, path)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "replace operation does not apply: doc is missing path: %s", path)
|
return fmt.Errorf("jsonpatch replace operation does not apply: doc is missing path: %s", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok := con.get(key)
|
_, ok := con.get(key)
|
||||||
if ok != nil {
|
if ok != nil {
|
||||||
return errors.Wrapf(ErrMissing, "replace operation does not apply: doc is missing key: %s", path)
|
return fmt.Errorf("jsonpatch replace operation does not apply: doc is missing key: %s", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.set(key, op.value())
|
return con.set(key, op.value())
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "error in remove for path: '%s'", path)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
func (p Patch) move(doc *container, op operation) error {
|
||||||
}
|
from := op.from()
|
||||||
|
|
||||||
func (p Patch) move(doc *container, op Operation) error {
|
|
||||||
from, err := op.From()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "move operation failed to decode from")
|
|
||||||
}
|
|
||||||
|
|
||||||
con, key := findObject(doc, from)
|
con, key := findObject(doc, from)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "move operation does not apply: doc is missing from path: %s", from)
|
return fmt.Errorf("jsonpatch move operation does not apply: doc is missing from path: %s", from)
|
||||||
}
|
}
|
||||||
|
|
||||||
val, err := con.get(key)
|
val, err := con.get(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in move for path: '%s'", key)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.remove(key)
|
err = con.remove(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in move for path: '%s'", key)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
path, err := op.Path()
|
path := op.path()
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "move operation failed to decode path")
|
|
||||||
}
|
|
||||||
|
|
||||||
con, key = findObject(doc, path)
|
con, key = findObject(doc, path)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "move operation does not apply: doc is missing destination path: %s", path)
|
return fmt.Errorf("jsonpatch move operation does not apply: doc is missing destination path: %s", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.add(key, val)
|
return con.add(key, val)
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "error in move for path: '%s'", path)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
func (p Patch) test(doc *container, op operation) error {
|
||||||
}
|
path := op.path()
|
||||||
|
|
||||||
func (p Patch) test(doc *container, op Operation) error {
|
|
||||||
path, err := op.Path()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "test operation failed to decode path")
|
|
||||||
}
|
|
||||||
|
|
||||||
con, key := findObject(doc, path)
|
con, key := findObject(doc, path)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "test operation does not apply: is missing path: %s", path)
|
return fmt.Errorf("jsonpatch test operation does not apply: is missing path: %s", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
val, err := con.get(key)
|
val, err := con.get(key)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in test for path: '%s'", path)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if val == nil {
|
if val == nil {
|
||||||
if op.value().raw == nil {
|
if op.value().raw == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return errors.Wrapf(ErrTestFailed, "testing value %s failed", path)
|
return fmt.Errorf("Testing value %s failed", path)
|
||||||
} else if op.value() == nil {
|
} else if op.value() == nil {
|
||||||
return errors.Wrapf(ErrTestFailed, "testing value %s failed", path)
|
return fmt.Errorf("Testing value %s failed", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
if val.equal(op.value()) {
|
if val.equal(op.value()) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.Wrapf(ErrTestFailed, "testing value %s failed", path)
|
return fmt.Errorf("Testing value %s failed", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p Patch) copy(doc *container, op Operation, accumulatedCopySize *int64) error {
|
func (p Patch) copy(doc *container, op operation, accumulatedCopySize *int64) error {
|
||||||
from, err := op.From()
|
from := op.from()
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "copy operation failed to decode from")
|
|
||||||
}
|
|
||||||
|
|
||||||
con, key := findObject(doc, from)
|
con, key := findObject(doc, from)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "copy operation does not apply: doc is missing from path: %s", from)
|
return fmt.Errorf("jsonpatch copy operation does not apply: doc is missing from path: %s", from)
|
||||||
}
|
}
|
||||||
|
|
||||||
val, err := con.get(key)
|
val, err := con.get(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in copy for from: '%s'", from)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
path, err := op.Path()
|
path := op.path()
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(ErrMissing, "copy operation failed to decode path")
|
|
||||||
}
|
|
||||||
|
|
||||||
con, key = findObject(doc, path)
|
con, key = findObject(doc, path)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "copy operation does not apply: doc is missing destination path: %s", path)
|
return fmt.Errorf("jsonpatch copy operation does not apply: doc is missing destination path: %s", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
valCopy, sz, err := deepCopy(val)
|
valCopy, sz, err := deepCopy(val)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error while performing deep copy")
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
(*accumulatedCopySize) += int64(sz)
|
(*accumulatedCopySize) += int64(sz)
|
||||||
if AccumulatedCopySizeLimit > 0 && *accumulatedCopySize > AccumulatedCopySizeLimit {
|
if AccumulatedCopySizeLimit > 0 && *accumulatedCopySize > AccumulatedCopySizeLimit {
|
||||||
return NewAccumulatedCopySizeError(AccumulatedCopySizeLimit, *accumulatedCopySize)
|
return NewAccumulatedCopySizeError(AccumulatedCopySizeLimit, *accumulatedCopySize)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.add(key, valCopy)
|
return con.add(key, valCopy)
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "error while adding value during copy")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Equal indicates if 2 JSON documents have the same structural equality.
|
// Equal indicates if 2 JSON documents have the same structural equality.
|
||||||
|
|
@ -731,7 +651,7 @@ func (p Patch) ApplyIndent(doc []byte, indent string) ([]byte, error) {
|
||||||
var accumulatedCopySize int64
|
var accumulatedCopySize int64
|
||||||
|
|
||||||
for _, op := range p {
|
for _, op := range p {
|
||||||
switch op.Kind() {
|
switch op.kind() {
|
||||||
case "add":
|
case "add":
|
||||||
err = p.add(&pd, op)
|
err = p.add(&pd, op)
|
||||||
case "remove":
|
case "remove":
|
||||||
|
|
@ -745,7 +665,7 @@ func (p Patch) ApplyIndent(doc []byte, indent string) ([]byte, error) {
|
||||||
case "copy":
|
case "copy":
|
||||||
err = p.copy(&pd, op, &accumulatedCopySize)
|
err = p.copy(&pd, op, &accumulatedCopySize)
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("Unexpected kind: %s", op.Kind())
|
err = fmt.Errorf("Unexpected kind: %s", op.kind())
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
5
vendor/github.com/go-openapi/spec/.golangci.yml
generated
vendored
5
vendor/github.com/go-openapi/spec/.golangci.yml
generated
vendored
|
|
@ -21,3 +21,8 @@ linters:
|
||||||
- lll
|
- lll
|
||||||
- gochecknoinits
|
- gochecknoinits
|
||||||
- gochecknoglobals
|
- gochecknoglobals
|
||||||
|
- funlen
|
||||||
|
- godox
|
||||||
|
- gocognit
|
||||||
|
- whitespace
|
||||||
|
- wsl
|
||||||
|
|
|
||||||
6
vendor/github.com/go-openapi/spec/.travis.yml
generated
vendored
6
vendor/github.com/go-openapi/spec/.travis.yml
generated
vendored
|
|
@ -1,12 +1,10 @@
|
||||||
after_success:
|
after_success:
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
go:
|
go:
|
||||||
- 1.11.x
|
- 1.13.x
|
||||||
- 1.12.x
|
- 1.14.x
|
||||||
install:
|
install:
|
||||||
- GO111MODULE=off go get -u gotest.tools/gotestsum
|
- GO111MODULE=off go get -u gotest.tools/gotestsum
|
||||||
env:
|
|
||||||
- GO111MODULE=on
|
|
||||||
language: go
|
language: go
|
||||||
notifications:
|
notifications:
|
||||||
slack:
|
slack:
|
||||||
|
|
|
||||||
36
vendor/github.com/go-openapi/spec/bindata.go
generated
vendored
36
vendor/github.com/go-openapi/spec/bindata.go
generated
vendored
File diff suppressed because one or more lines are too long
30
vendor/github.com/go-openapi/spec/contact_info.go
generated
vendored
30
vendor/github.com/go-openapi/spec/contact_info.go
generated
vendored
|
|
@ -14,11 +14,41 @@
|
||||||
|
|
||||||
package spec
|
package spec
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/go-openapi/swag"
|
||||||
|
)
|
||||||
|
|
||||||
// ContactInfo contact information for the exposed API.
|
// ContactInfo contact information for the exposed API.
|
||||||
//
|
//
|
||||||
// For more information: http://goo.gl/8us55a#contactObject
|
// For more information: http://goo.gl/8us55a#contactObject
|
||||||
type ContactInfo struct {
|
type ContactInfo struct {
|
||||||
|
ContactInfoProps
|
||||||
|
VendorExtensible
|
||||||
|
}
|
||||||
|
|
||||||
|
type ContactInfoProps struct {
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
URL string `json:"url,omitempty"`
|
URL string `json:"url,omitempty"`
|
||||||
Email string `json:"email,omitempty"`
|
Email string `json:"email,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ContactInfo) UnmarshalJSON(data []byte) error {
|
||||||
|
if err := json.Unmarshal(data, &c.ContactInfoProps); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return json.Unmarshal(data, &c.VendorExtensible)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c ContactInfo) MarshalJSON() ([]byte, error) {
|
||||||
|
b1, err := json.Marshal(c.ContactInfoProps)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
b2, err := json.Marshal(c.VendorExtensible)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return swag.ConcatJSON(b1, b2), nil
|
||||||
|
}
|
||||||
|
|
|
||||||
9
vendor/github.com/go-openapi/spec/expander.go
generated
vendored
9
vendor/github.com/go-openapi/spec/expander.go
generated
vendored
|
|
@ -200,11 +200,11 @@ func ExpandSpec(spec *Swagger, options *ExpandOptions) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const rootBase = "root"
|
||||||
// baseForRoot loads in the cache the root document and produces a fake "root" base path entry
|
// baseForRoot loads in the cache the root document and produces a fake "root" base path entry
|
||||||
// for further $ref resolution
|
// for further $ref resolution
|
||||||
func baseForRoot(root interface{}, cache ResolutionCache) string {
|
func baseForRoot(root interface{}, cache ResolutionCache) string {
|
||||||
// cache the root document to resolve $ref's
|
// cache the root document to resolve $ref's
|
||||||
const rootBase = "root"
|
|
||||||
if root != nil {
|
if root != nil {
|
||||||
base, _ := absPath(rootBase)
|
base, _ := absPath(rootBase)
|
||||||
normalizedBase := normalizeAbsPath(base)
|
normalizedBase := normalizeAbsPath(base)
|
||||||
|
|
@ -452,11 +452,12 @@ func expandPathItem(pathItem *PathItem, resolver *schemaLoader, basePath string)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if pathItem.Ref.String() != "" {
|
if pathItem.Ref.String() != "" {
|
||||||
var err error
|
transitiveResolver, err := resolver.transitiveResolver(basePath, pathItem.Ref)
|
||||||
resolver, err = resolver.transitiveResolver(basePath, pathItem.Ref)
|
if transitiveResolver.shouldStopOnError(err) {
|
||||||
if resolver.shouldStopOnError(err) {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
basePath = transitiveResolver.updateBasePath(resolver, basePath)
|
||||||
|
resolver = transitiveResolver
|
||||||
}
|
}
|
||||||
pathItem.Ref = Ref{}
|
pathItem.Ref = Ref{}
|
||||||
|
|
||||||
|
|
|
||||||
7
vendor/github.com/go-openapi/spec/go.mod
generated
vendored
7
vendor/github.com/go-openapi/spec/go.mod
generated
vendored
|
|
@ -4,14 +4,9 @@ require (
|
||||||
github.com/go-openapi/jsonpointer v0.19.3
|
github.com/go-openapi/jsonpointer v0.19.3
|
||||||
github.com/go-openapi/jsonreference v0.19.2
|
github.com/go-openapi/jsonreference v0.19.2
|
||||||
github.com/go-openapi/swag v0.19.5
|
github.com/go-openapi/swag v0.19.5
|
||||||
github.com/kr/pty v1.1.5 // indirect
|
|
||||||
github.com/stretchr/objx v0.2.0 // indirect
|
|
||||||
github.com/stretchr/testify v1.3.0
|
github.com/stretchr/testify v1.3.0
|
||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 // indirect
|
|
||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect
|
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect
|
||||||
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f // indirect
|
gopkg.in/yaml.v2 v2.2.4
|
||||||
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59 // indirect
|
|
||||||
gopkg.in/yaml.v2 v2.2.2
|
|
||||||
)
|
)
|
||||||
|
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
|
||||||
29
vendor/github.com/go-openapi/spec/go.sum
generated
vendored
29
vendor/github.com/go-openapi/spec/go.sum
generated
vendored
|
|
@ -1,5 +1,3 @@
|
||||||
github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4=
|
|
||||||
github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
|
||||||
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
||||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||||
|
|
@ -7,20 +5,12 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/go-openapi/jsonpointer v0.17.0 h1:nH6xp8XdXHx8dqveo0ZuJBluCO2qGrPbDNZ0dwoRHP0=
|
|
||||||
github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
|
|
||||||
github.com/go-openapi/jsonpointer v0.19.0 h1:FTUMcX77w5rQkClIzDtTxvn6Bsa894CcrzNj2MMfeg8=
|
|
||||||
github.com/go-openapi/jsonpointer v0.19.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
|
|
||||||
github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0=
|
github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0=
|
||||||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
|
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
|
||||||
github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
|
github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
|
||||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||||
github.com/go-openapi/jsonreference v0.19.0 h1:BqWKpV1dFd+AuiKlgtddwVIFQsuMpxfBDBHGfM2yNpk=
|
|
||||||
github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
|
|
||||||
github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w=
|
github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w=
|
||||||
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
|
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
|
||||||
github.com/go-openapi/swag v0.17.0 h1:iqrgMg7Q7SvtbWLlltPrkMs0UBJI6oTSs79JFRUi880=
|
|
||||||
github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
|
|
||||||
github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE=
|
github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE=
|
||||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||||
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
|
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
|
||||||
|
|
@ -28,11 +18,8 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic=
|
|
||||||
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
|
||||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4=
|
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4=
|
||||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
|
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
|
||||||
|
|
@ -40,35 +27,23 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
|
||||||
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/net v0.0.0-20181005035420-146acd28ed58 h1:otZG8yDCO4LVps5+9bxOeNiCvgmOyt96J3roHTYs7oE=
|
|
||||||
golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU=
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU=
|
||||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM=
|
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM=
|
||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
|
||||||
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
|
|
||||||
30
vendor/github.com/go-openapi/spec/license.go
generated
vendored
30
vendor/github.com/go-openapi/spec/license.go
generated
vendored
|
|
@ -14,10 +14,40 @@
|
||||||
|
|
||||||
package spec
|
package spec
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/go-openapi/swag"
|
||||||
|
)
|
||||||
|
|
||||||
// License information for the exposed API.
|
// License information for the exposed API.
|
||||||
//
|
//
|
||||||
// For more information: http://goo.gl/8us55a#licenseObject
|
// For more information: http://goo.gl/8us55a#licenseObject
|
||||||
type License struct {
|
type License struct {
|
||||||
|
LicenseProps
|
||||||
|
VendorExtensible
|
||||||
|
}
|
||||||
|
|
||||||
|
type LicenseProps struct {
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
URL string `json:"url,omitempty"`
|
URL string `json:"url,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l *License) UnmarshalJSON(data []byte) error {
|
||||||
|
if err := json.Unmarshal(data, &l.LicenseProps); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return json.Unmarshal(data, &l.VendorExtensible)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l License) MarshalJSON() ([]byte, error) {
|
||||||
|
b1, err := json.Marshal(l.LicenseProps)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
b2, err := json.Marshal(l.VendorExtensible)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return swag.ConcatJSON(b1, b2), nil
|
||||||
|
}
|
||||||
|
|
|
||||||
2
vendor/github.com/go-openapi/spec/ref.go
generated
vendored
2
vendor/github.com/go-openapi/spec/ref.go
generated
vendored
|
|
@ -68,10 +68,12 @@ func (r *Ref) IsValidURI(basepaths ...string) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.HasFullURL {
|
if r.HasFullURL {
|
||||||
|
//#nosec
|
||||||
rr, err := http.Get(v)
|
rr, err := http.Get(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
defer rr.Body.Close()
|
||||||
|
|
||||||
return rr.StatusCode/100 == 2
|
return rr.StatusCode/100 == 2
|
||||||
}
|
}
|
||||||
|
|
|
||||||
17
vendor/github.com/go-openapi/spec/schema_loader.go
generated
vendored
17
vendor/github.com/go-openapi/spec/schema_loader.go
generated
vendored
|
|
@ -86,12 +86,7 @@ func (r *schemaLoader) transitiveResolver(basePath string, ref Ref) (*schemaLoad
|
||||||
newOptions := r.options
|
newOptions := r.options
|
||||||
newOptions.RelativeBase = rootURL.String()
|
newOptions.RelativeBase = rootURL.String()
|
||||||
debugLog("setting new root: %s", newOptions.RelativeBase)
|
debugLog("setting new root: %s", newOptions.RelativeBase)
|
||||||
resolver, err := defaultSchemaLoader(root, newOptions, r.cache, r.context)
|
return defaultSchemaLoader(root, newOptions, r.cache, r.context)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return resolver, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *schemaLoader) updateBasePath(transitive *schemaLoader, basePath string) string {
|
func (r *schemaLoader) updateBasePath(transitive *schemaLoader, basePath string) string {
|
||||||
|
|
@ -154,7 +149,15 @@ func (r *schemaLoader) load(refURL *url.URL) (interface{}, url.URL, bool, error)
|
||||||
toFetch := *refURL
|
toFetch := *refURL
|
||||||
toFetch.Fragment = ""
|
toFetch.Fragment = ""
|
||||||
|
|
||||||
normalized := normalizeAbsPath(toFetch.String())
|
var err error
|
||||||
|
path := toFetch.String()
|
||||||
|
if path == rootBase {
|
||||||
|
path, err = absPath(rootBase)
|
||||||
|
if err != nil {
|
||||||
|
return nil, url.URL{}, false, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
normalized := normalizeAbsPath(path)
|
||||||
|
|
||||||
data, fromCache := r.cache.Get(normalized)
|
data, fromCache := r.cache.Get(normalized)
|
||||||
if !fromCache {
|
if !fromCache {
|
||||||
|
|
|
||||||
6
vendor/github.com/go-openapi/swag/.travis.yml
generated
vendored
6
vendor/github.com/go-openapi/swag/.travis.yml
generated
vendored
|
|
@ -1,12 +1,10 @@
|
||||||
after_success:
|
after_success:
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
go:
|
go:
|
||||||
- 1.11.x
|
- 1.13.x
|
||||||
- 1.12.x
|
- 1.14.x
|
||||||
install:
|
install:
|
||||||
- GO111MODULE=off go get -u gotest.tools/gotestsum
|
- GO111MODULE=off go get -u gotest.tools/gotestsum
|
||||||
env:
|
|
||||||
- GO111MODULE=on
|
|
||||||
language: go
|
language: go
|
||||||
notifications:
|
notifications:
|
||||||
slack:
|
slack:
|
||||||
|
|
|
||||||
16
vendor/github.com/go-openapi/swag/convert.go
generated
vendored
16
vendor/github.com/go-openapi/swag/convert.go
generated
vendored
|
|
@ -88,7 +88,7 @@ func ConvertFloat64(str string) (float64, error) {
|
||||||
return strconv.ParseFloat(str, 64)
|
return strconv.ParseFloat(str, 64)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertInt8 turn a string into int8 boolean
|
// ConvertInt8 turn a string into an int8
|
||||||
func ConvertInt8(str string) (int8, error) {
|
func ConvertInt8(str string) (int8, error) {
|
||||||
i, err := strconv.ParseInt(str, 10, 8)
|
i, err := strconv.ParseInt(str, 10, 8)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -97,7 +97,7 @@ func ConvertInt8(str string) (int8, error) {
|
||||||
return int8(i), nil
|
return int8(i), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertInt16 turn a string into a int16
|
// ConvertInt16 turn a string into an int16
|
||||||
func ConvertInt16(str string) (int16, error) {
|
func ConvertInt16(str string) (int16, error) {
|
||||||
i, err := strconv.ParseInt(str, 10, 16)
|
i, err := strconv.ParseInt(str, 10, 16)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -106,7 +106,7 @@ func ConvertInt16(str string) (int16, error) {
|
||||||
return int16(i), nil
|
return int16(i), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertInt32 turn a string into a int32
|
// ConvertInt32 turn a string into an int32
|
||||||
func ConvertInt32(str string) (int32, error) {
|
func ConvertInt32(str string) (int32, error) {
|
||||||
i, err := strconv.ParseInt(str, 10, 32)
|
i, err := strconv.ParseInt(str, 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -115,12 +115,12 @@ func ConvertInt32(str string) (int32, error) {
|
||||||
return int32(i), nil
|
return int32(i), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertInt64 turn a string into a int64
|
// ConvertInt64 turn a string into an int64
|
||||||
func ConvertInt64(str string) (int64, error) {
|
func ConvertInt64(str string) (int64, error) {
|
||||||
return strconv.ParseInt(str, 10, 64)
|
return strconv.ParseInt(str, 10, 64)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertUint8 turn a string into a uint8
|
// ConvertUint8 turn a string into an uint8
|
||||||
func ConvertUint8(str string) (uint8, error) {
|
func ConvertUint8(str string) (uint8, error) {
|
||||||
i, err := strconv.ParseUint(str, 10, 8)
|
i, err := strconv.ParseUint(str, 10, 8)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -129,7 +129,7 @@ func ConvertUint8(str string) (uint8, error) {
|
||||||
return uint8(i), nil
|
return uint8(i), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertUint16 turn a string into a uint16
|
// ConvertUint16 turn a string into an uint16
|
||||||
func ConvertUint16(str string) (uint16, error) {
|
func ConvertUint16(str string) (uint16, error) {
|
||||||
i, err := strconv.ParseUint(str, 10, 16)
|
i, err := strconv.ParseUint(str, 10, 16)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -138,7 +138,7 @@ func ConvertUint16(str string) (uint16, error) {
|
||||||
return uint16(i), nil
|
return uint16(i), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertUint32 turn a string into a uint32
|
// ConvertUint32 turn a string into an uint32
|
||||||
func ConvertUint32(str string) (uint32, error) {
|
func ConvertUint32(str string) (uint32, error) {
|
||||||
i, err := strconv.ParseUint(str, 10, 32)
|
i, err := strconv.ParseUint(str, 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -147,7 +147,7 @@ func ConvertUint32(str string) (uint32, error) {
|
||||||
return uint32(i), nil
|
return uint32(i), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertUint64 turn a string into a uint64
|
// ConvertUint64 turn a string into an uint64
|
||||||
func ConvertUint64(str string) (uint64, error) {
|
func ConvertUint64(str string) (uint64, error) {
|
||||||
return strconv.ParseUint(str, 10, 64)
|
return strconv.ParseUint(str, 10, 64)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
195
vendor/github.com/go-openapi/swag/convert_types.go
generated
vendored
195
vendor/github.com/go-openapi/swag/convert_types.go
generated
vendored
|
|
@ -181,12 +181,12 @@ func IntValueMap(src map[string]*int) map[string]int {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Int32 returns a pointer to of the int64 value passed in.
|
// Int32 returns a pointer to of the int32 value passed in.
|
||||||
func Int32(v int32) *int32 {
|
func Int32(v int32) *int32 {
|
||||||
return &v
|
return &v
|
||||||
}
|
}
|
||||||
|
|
||||||
// Int32Value returns the value of the int64 pointer passed in or
|
// Int32Value returns the value of the int32 pointer passed in or
|
||||||
// 0 if the pointer is nil.
|
// 0 if the pointer is nil.
|
||||||
func Int32Value(v *int32) int32 {
|
func Int32Value(v *int32) int32 {
|
||||||
if v != nil {
|
if v != nil {
|
||||||
|
|
@ -195,7 +195,7 @@ func Int32Value(v *int32) int32 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Int32Slice converts a slice of int64 values into a slice of
|
// Int32Slice converts a slice of int32 values into a slice of
|
||||||
// int32 pointers
|
// int32 pointers
|
||||||
func Int32Slice(src []int32) []*int32 {
|
func Int32Slice(src []int32) []*int32 {
|
||||||
dst := make([]*int32, len(src))
|
dst := make([]*int32, len(src))
|
||||||
|
|
@ -299,13 +299,80 @@ func Int64ValueMap(src map[string]*int64) map[string]int64 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint returns a pouinter to of the uint value passed in.
|
// Uint16 returns a pointer to of the uint16 value passed in.
|
||||||
|
func Uint16(v uint16) *uint16 {
|
||||||
|
return &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint16Value returns the value of the uint16 pointer passed in or
|
||||||
|
// 0 if the pointer is nil.
|
||||||
|
func Uint16Value(v *uint16) uint16 {
|
||||||
|
if v != nil {
|
||||||
|
return *v
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint16Slice converts a slice of uint16 values into a slice of
|
||||||
|
// uint16 pointers
|
||||||
|
func Uint16Slice(src []uint16) []*uint16 {
|
||||||
|
dst := make([]*uint16, len(src))
|
||||||
|
for i := 0; i < len(src); i++ {
|
||||||
|
dst[i] = &(src[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint16ValueSlice converts a slice of uint16 pointers into a slice of
|
||||||
|
// uint16 values
|
||||||
|
func Uint16ValueSlice(src []*uint16) []uint16 {
|
||||||
|
dst := make([]uint16, len(src))
|
||||||
|
|
||||||
|
for i := 0; i < len(src); i++ {
|
||||||
|
if src[i] != nil {
|
||||||
|
dst[i] = *(src[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint16Map converts a string map of uint16 values into a string
|
||||||
|
// map of uint16 pointers
|
||||||
|
func Uint16Map(src map[string]uint16) map[string]*uint16 {
|
||||||
|
dst := make(map[string]*uint16)
|
||||||
|
|
||||||
|
for k, val := range src {
|
||||||
|
v := val
|
||||||
|
dst[k] = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint16ValueMap converts a string map of uint16 pointers into a string
|
||||||
|
// map of uint16 values
|
||||||
|
func Uint16ValueMap(src map[string]*uint16) map[string]uint16 {
|
||||||
|
dst := make(map[string]uint16)
|
||||||
|
|
||||||
|
for k, val := range src {
|
||||||
|
if val != nil {
|
||||||
|
dst[k] = *val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint returns a pointer to of the uint value passed in.
|
||||||
func Uint(v uint) *uint {
|
func Uint(v uint) *uint {
|
||||||
return &v
|
return &v
|
||||||
}
|
}
|
||||||
|
|
||||||
// UintValue returns the value of the uint pouinter passed in or
|
// UintValue returns the value of the uint pointer passed in or
|
||||||
// 0 if the pouinter is nil.
|
// 0 if the pointer is nil.
|
||||||
func UintValue(v *uint) uint {
|
func UintValue(v *uint) uint {
|
||||||
if v != nil {
|
if v != nil {
|
||||||
return *v
|
return *v
|
||||||
|
|
@ -313,8 +380,8 @@ func UintValue(v *uint) uint {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// UintSlice converts a slice of uint values uinto a slice of
|
// UintSlice converts a slice of uint values into a slice of
|
||||||
// uint pouinters
|
// uint pointers
|
||||||
func UintSlice(src []uint) []*uint {
|
func UintSlice(src []uint) []*uint {
|
||||||
dst := make([]*uint, len(src))
|
dst := make([]*uint, len(src))
|
||||||
for i := 0; i < len(src); i++ {
|
for i := 0; i < len(src); i++ {
|
||||||
|
|
@ -323,7 +390,7 @@ func UintSlice(src []uint) []*uint {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// UintValueSlice converts a slice of uint pouinters uinto a slice of
|
// UintValueSlice converts a slice of uint pointers into a slice of
|
||||||
// uint values
|
// uint values
|
||||||
func UintValueSlice(src []*uint) []uint {
|
func UintValueSlice(src []*uint) []uint {
|
||||||
dst := make([]uint, len(src))
|
dst := make([]uint, len(src))
|
||||||
|
|
@ -335,8 +402,8 @@ func UintValueSlice(src []*uint) []uint {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// UintMap converts a string map of uint values uinto a string
|
// UintMap converts a string map of uint values into a string
|
||||||
// map of uint pouinters
|
// map of uint pointers
|
||||||
func UintMap(src map[string]uint) map[string]*uint {
|
func UintMap(src map[string]uint) map[string]*uint {
|
||||||
dst := make(map[string]*uint)
|
dst := make(map[string]*uint)
|
||||||
for k, val := range src {
|
for k, val := range src {
|
||||||
|
|
@ -346,7 +413,7 @@ func UintMap(src map[string]uint) map[string]*uint {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// UintValueMap converts a string map of uint pouinters uinto a string
|
// UintValueMap converts a string map of uint pointers into a string
|
||||||
// map of uint values
|
// map of uint values
|
||||||
func UintValueMap(src map[string]*uint) map[string]uint {
|
func UintValueMap(src map[string]*uint) map[string]uint {
|
||||||
dst := make(map[string]uint)
|
dst := make(map[string]uint)
|
||||||
|
|
@ -358,13 +425,13 @@ func UintValueMap(src map[string]*uint) map[string]uint {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint32 returns a pouinter to of the uint64 value passed in.
|
// Uint32 returns a pointer to of the uint32 value passed in.
|
||||||
func Uint32(v uint32) *uint32 {
|
func Uint32(v uint32) *uint32 {
|
||||||
return &v
|
return &v
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint32Value returns the value of the uint64 pouinter passed in or
|
// Uint32Value returns the value of the uint32 pointer passed in or
|
||||||
// 0 if the pouinter is nil.
|
// 0 if the pointer is nil.
|
||||||
func Uint32Value(v *uint32) uint32 {
|
func Uint32Value(v *uint32) uint32 {
|
||||||
if v != nil {
|
if v != nil {
|
||||||
return *v
|
return *v
|
||||||
|
|
@ -372,8 +439,8 @@ func Uint32Value(v *uint32) uint32 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint32Slice converts a slice of uint64 values uinto a slice of
|
// Uint32Slice converts a slice of uint32 values into a slice of
|
||||||
// uint32 pouinters
|
// uint32 pointers
|
||||||
func Uint32Slice(src []uint32) []*uint32 {
|
func Uint32Slice(src []uint32) []*uint32 {
|
||||||
dst := make([]*uint32, len(src))
|
dst := make([]*uint32, len(src))
|
||||||
for i := 0; i < len(src); i++ {
|
for i := 0; i < len(src); i++ {
|
||||||
|
|
@ -382,7 +449,7 @@ func Uint32Slice(src []uint32) []*uint32 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint32ValueSlice converts a slice of uint32 pouinters uinto a slice of
|
// Uint32ValueSlice converts a slice of uint32 pointers into a slice of
|
||||||
// uint32 values
|
// uint32 values
|
||||||
func Uint32ValueSlice(src []*uint32) []uint32 {
|
func Uint32ValueSlice(src []*uint32) []uint32 {
|
||||||
dst := make([]uint32, len(src))
|
dst := make([]uint32, len(src))
|
||||||
|
|
@ -394,8 +461,8 @@ func Uint32ValueSlice(src []*uint32) []uint32 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint32Map converts a string map of uint32 values uinto a string
|
// Uint32Map converts a string map of uint32 values into a string
|
||||||
// map of uint32 pouinters
|
// map of uint32 pointers
|
||||||
func Uint32Map(src map[string]uint32) map[string]*uint32 {
|
func Uint32Map(src map[string]uint32) map[string]*uint32 {
|
||||||
dst := make(map[string]*uint32)
|
dst := make(map[string]*uint32)
|
||||||
for k, val := range src {
|
for k, val := range src {
|
||||||
|
|
@ -405,7 +472,7 @@ func Uint32Map(src map[string]uint32) map[string]*uint32 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint32ValueMap converts a string map of uint32 pouinters uinto a string
|
// Uint32ValueMap converts a string map of uint32 pointers into a string
|
||||||
// map of uint32 values
|
// map of uint32 values
|
||||||
func Uint32ValueMap(src map[string]*uint32) map[string]uint32 {
|
func Uint32ValueMap(src map[string]*uint32) map[string]uint32 {
|
||||||
dst := make(map[string]uint32)
|
dst := make(map[string]uint32)
|
||||||
|
|
@ -417,13 +484,13 @@ func Uint32ValueMap(src map[string]*uint32) map[string]uint32 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint64 returns a pouinter to of the uint64 value passed in.
|
// Uint64 returns a pointer to of the uint64 value passed in.
|
||||||
func Uint64(v uint64) *uint64 {
|
func Uint64(v uint64) *uint64 {
|
||||||
return &v
|
return &v
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint64Value returns the value of the uint64 pouinter passed in or
|
// Uint64Value returns the value of the uint64 pointer passed in or
|
||||||
// 0 if the pouinter is nil.
|
// 0 if the pointer is nil.
|
||||||
func Uint64Value(v *uint64) uint64 {
|
func Uint64Value(v *uint64) uint64 {
|
||||||
if v != nil {
|
if v != nil {
|
||||||
return *v
|
return *v
|
||||||
|
|
@ -431,8 +498,8 @@ func Uint64Value(v *uint64) uint64 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint64Slice converts a slice of uint64 values uinto a slice of
|
// Uint64Slice converts a slice of uint64 values into a slice of
|
||||||
// uint64 pouinters
|
// uint64 pointers
|
||||||
func Uint64Slice(src []uint64) []*uint64 {
|
func Uint64Slice(src []uint64) []*uint64 {
|
||||||
dst := make([]*uint64, len(src))
|
dst := make([]*uint64, len(src))
|
||||||
for i := 0; i < len(src); i++ {
|
for i := 0; i < len(src); i++ {
|
||||||
|
|
@ -441,7 +508,7 @@ func Uint64Slice(src []uint64) []*uint64 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint64ValueSlice converts a slice of uint64 pouinters uinto a slice of
|
// Uint64ValueSlice converts a slice of uint64 pointers into a slice of
|
||||||
// uint64 values
|
// uint64 values
|
||||||
func Uint64ValueSlice(src []*uint64) []uint64 {
|
func Uint64ValueSlice(src []*uint64) []uint64 {
|
||||||
dst := make([]uint64, len(src))
|
dst := make([]uint64, len(src))
|
||||||
|
|
@ -453,8 +520,8 @@ func Uint64ValueSlice(src []*uint64) []uint64 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint64Map converts a string map of uint64 values uinto a string
|
// Uint64Map converts a string map of uint64 values into a string
|
||||||
// map of uint64 pouinters
|
// map of uint64 pointers
|
||||||
func Uint64Map(src map[string]uint64) map[string]*uint64 {
|
func Uint64Map(src map[string]uint64) map[string]*uint64 {
|
||||||
dst := make(map[string]*uint64)
|
dst := make(map[string]*uint64)
|
||||||
for k, val := range src {
|
for k, val := range src {
|
||||||
|
|
@ -464,7 +531,7 @@ func Uint64Map(src map[string]uint64) map[string]*uint64 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uint64ValueMap converts a string map of uint64 pouinters uinto a string
|
// Uint64ValueMap converts a string map of uint64 pointers into a string
|
||||||
// map of uint64 values
|
// map of uint64 values
|
||||||
func Uint64ValueMap(src map[string]*uint64) map[string]uint64 {
|
func Uint64ValueMap(src map[string]*uint64) map[string]uint64 {
|
||||||
dst := make(map[string]uint64)
|
dst := make(map[string]uint64)
|
||||||
|
|
@ -476,6 +543,74 @@ func Uint64ValueMap(src map[string]*uint64) map[string]uint64 {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Float32 returns a pointer to of the float32 value passed in.
|
||||||
|
func Float32(v float32) *float32 {
|
||||||
|
return &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float32Value returns the value of the float32 pointer passed in or
|
||||||
|
// 0 if the pointer is nil.
|
||||||
|
func Float32Value(v *float32) float32 {
|
||||||
|
if v != nil {
|
||||||
|
return *v
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float32Slice converts a slice of float32 values into a slice of
|
||||||
|
// float32 pointers
|
||||||
|
func Float32Slice(src []float32) []*float32 {
|
||||||
|
dst := make([]*float32, len(src))
|
||||||
|
|
||||||
|
for i := 0; i < len(src); i++ {
|
||||||
|
dst[i] = &(src[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float32ValueSlice converts a slice of float32 pointers into a slice of
|
||||||
|
// float32 values
|
||||||
|
func Float32ValueSlice(src []*float32) []float32 {
|
||||||
|
dst := make([]float32, len(src))
|
||||||
|
|
||||||
|
for i := 0; i < len(src); i++ {
|
||||||
|
if src[i] != nil {
|
||||||
|
dst[i] = *(src[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float32Map converts a string map of float32 values into a string
|
||||||
|
// map of float32 pointers
|
||||||
|
func Float32Map(src map[string]float32) map[string]*float32 {
|
||||||
|
dst := make(map[string]*float32)
|
||||||
|
|
||||||
|
for k, val := range src {
|
||||||
|
v := val
|
||||||
|
dst[k] = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float32ValueMap converts a string map of float32 pointers into a string
|
||||||
|
// map of float32 values
|
||||||
|
func Float32ValueMap(src map[string]*float32) map[string]float32 {
|
||||||
|
dst := make(map[string]float32)
|
||||||
|
|
||||||
|
for k, val := range src {
|
||||||
|
if val != nil {
|
||||||
|
dst[k] = *val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
// Float64 returns a pointer to of the float64 value passed in.
|
// Float64 returns a pointer to of the float64 value passed in.
|
||||||
func Float64(v float64) *float64 {
|
func Float64(v float64) *float64 {
|
||||||
return &v
|
return &v
|
||||||
|
|
|
||||||
4
vendor/github.com/go-openapi/swag/go.mod
generated
vendored
4
vendor/github.com/go-openapi/swag/go.mod
generated
vendored
|
|
@ -6,9 +6,11 @@ require (
|
||||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63
|
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63
|
||||||
github.com/stretchr/testify v1.3.0
|
github.com/stretchr/testify v1.3.0
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
||||||
gopkg.in/yaml.v2 v2.2.2
|
gopkg.in/yaml.v2 v2.2.4
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/golang/lint => golang.org/x/lint v0.0.0-20190409202823-959b441ac422
|
replace github.com/golang/lint => golang.org/x/lint v0.0.0-20190409202823-959b441ac422
|
||||||
|
|
||||||
replace sourcegraph.com/sourcegraph/go-diff => github.com/sourcegraph/go-diff v0.5.1
|
replace sourcegraph.com/sourcegraph/go-diff => github.com/sourcegraph/go-diff v0.5.1
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
|
||||||
4
vendor/github.com/go-openapi/swag/go.sum
generated
vendored
4
vendor/github.com/go-openapi/swag/go.sum
generated
vendored
|
|
@ -16,5 +16,5 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
|
|
||||||
8
vendor/github.com/go-openapi/swag/json.go
generated
vendored
8
vendor/github.com/go-openapi/swag/json.go
generated
vendored
|
|
@ -51,7 +51,7 @@ type ejUnmarshaler interface {
|
||||||
UnmarshalEasyJSON(w *jlexer.Lexer)
|
UnmarshalEasyJSON(w *jlexer.Lexer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteJSON writes json data, prefers finding an appropriate interface to short-circuit the marshaller
|
// WriteJSON writes json data, prefers finding an appropriate interface to short-circuit the marshaler
|
||||||
// so it takes the fastest option available.
|
// so it takes the fastest option available.
|
||||||
func WriteJSON(data interface{}) ([]byte, error) {
|
func WriteJSON(data interface{}) ([]byte, error) {
|
||||||
if d, ok := data.(ejMarshaler); ok {
|
if d, ok := data.(ejMarshaler); ok {
|
||||||
|
|
@ -65,8 +65,8 @@ func WriteJSON(data interface{}) ([]byte, error) {
|
||||||
return json.Marshal(data)
|
return json.Marshal(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadJSON reads json data, prefers finding an appropriate interface to short-circuit the unmarshaller
|
// ReadJSON reads json data, prefers finding an appropriate interface to short-circuit the unmarshaler
|
||||||
// so it takes the fastes option available
|
// so it takes the fastest option available
|
||||||
func ReadJSON(data []byte, value interface{}) error {
|
func ReadJSON(data []byte, value interface{}) error {
|
||||||
trimmedData := bytes.Trim(data, "\x00")
|
trimmedData := bytes.Trim(data, "\x00")
|
||||||
if d, ok := value.(ejUnmarshaler); ok {
|
if d, ok := value.(ejUnmarshaler); ok {
|
||||||
|
|
@ -189,7 +189,7 @@ func FromDynamicJSON(data, target interface{}) error {
|
||||||
return json.Unmarshal(b, target)
|
return json.Unmarshal(b, target)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NameProvider represents an object capabale of translating from go property names
|
// NameProvider represents an object capable of translating from go property names
|
||||||
// to json property names
|
// to json property names
|
||||||
// This type is thread-safe.
|
// This type is thread-safe.
|
||||||
type NameProvider struct {
|
type NameProvider struct {
|
||||||
|
|
|
||||||
18
vendor/github.com/go-openapi/swag/loading.go
generated
vendored
18
vendor/github.com/go-openapi/swag/loading.go
generated
vendored
|
|
@ -27,6 +27,15 @@ import (
|
||||||
// LoadHTTPTimeout the default timeout for load requests
|
// LoadHTTPTimeout the default timeout for load requests
|
||||||
var LoadHTTPTimeout = 30 * time.Second
|
var LoadHTTPTimeout = 30 * time.Second
|
||||||
|
|
||||||
|
// LoadHTTPBasicAuthUsername the username to use when load requests require basic auth
|
||||||
|
var LoadHTTPBasicAuthUsername = ""
|
||||||
|
|
||||||
|
// LoadHTTPBasicAuthPassword the password to use when load requests require basic auth
|
||||||
|
var LoadHTTPBasicAuthPassword = ""
|
||||||
|
|
||||||
|
// LoadHTTPCustomHeaders an optional collection of custom HTTP headers for load requests
|
||||||
|
var LoadHTTPCustomHeaders = map[string]string{}
|
||||||
|
|
||||||
// LoadFromFileOrHTTP loads the bytes from a file or a remote http server based on the path passed in
|
// LoadFromFileOrHTTP loads the bytes from a file or a remote http server based on the path passed in
|
||||||
func LoadFromFileOrHTTP(path string) ([]byte, error) {
|
func LoadFromFileOrHTTP(path string) ([]byte, error) {
|
||||||
return LoadStrategy(path, ioutil.ReadFile, loadHTTPBytes(LoadHTTPTimeout))(path)
|
return LoadStrategy(path, ioutil.ReadFile, loadHTTPBytes(LoadHTTPTimeout))(path)
|
||||||
|
|
@ -59,6 +68,15 @@ func loadHTTPBytes(timeout time.Duration) func(path string) ([]byte, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if LoadHTTPBasicAuthUsername != "" && LoadHTTPBasicAuthPassword != "" {
|
||||||
|
req.SetBasicAuth(LoadHTTPBasicAuthUsername, LoadHTTPBasicAuthPassword)
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, val := range LoadHTTPCustomHeaders {
|
||||||
|
req.Header.Set(key, val)
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
defer func() {
|
defer func() {
|
||||||
if resp != nil {
|
if resp != nil {
|
||||||
|
|
|
||||||
2
vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go
generated
vendored
2
vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go
generated
vendored
|
|
@ -19,7 +19,7 @@ var _ = math.Inf
|
||||||
// is compatible with the proto package it is being compiled against.
|
// is compatible with the proto package it is being compiled against.
|
||||||
// A compilation error at this line likely means your copy of the
|
// A compilation error at this line likely means your copy of the
|
||||||
// proto package needs to be updated.
|
// proto package needs to be updated.
|
||||||
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
|
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
||||||
|
|
||||||
var E_GoprotoEnumPrefix = &proto.ExtensionDesc{
|
var E_GoprotoEnumPrefix = &proto.ExtensionDesc{
|
||||||
ExtendedType: (*descriptor.EnumOptions)(nil),
|
ExtendedType: (*descriptor.EnumOptions)(nil),
|
||||||
|
|
|
||||||
2
vendor/github.com/gogo/protobuf/proto/encode.go
generated
vendored
2
vendor/github.com/gogo/protobuf/proto/encode.go
generated
vendored
|
|
@ -189,6 +189,8 @@ type Marshaler interface {
|
||||||
// prefixed by a varint-encoded length.
|
// prefixed by a varint-encoded length.
|
||||||
func (p *Buffer) EncodeMessage(pb Message) error {
|
func (p *Buffer) EncodeMessage(pb Message) error {
|
||||||
siz := Size(pb)
|
siz := Size(pb)
|
||||||
|
sizVar := SizeVarint(uint64(siz))
|
||||||
|
p.grow(siz + sizVar)
|
||||||
p.EncodeVarint(uint64(siz))
|
p.EncodeVarint(uint64(siz))
|
||||||
return p.Marshal(pb)
|
return p.Marshal(pb)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
10
vendor/github.com/gogo/protobuf/proto/lib.go
generated
vendored
10
vendor/github.com/gogo/protobuf/proto/lib.go
generated
vendored
|
|
@ -948,13 +948,19 @@ func isProto3Zero(v reflect.Value) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ProtoPackageIsVersion3 is referenced from generated protocol buffer files
|
||||||
|
// to assert that that code is compatible with this version of the proto package.
|
||||||
|
GoGoProtoPackageIsVersion3 = true
|
||||||
|
|
||||||
// ProtoPackageIsVersion2 is referenced from generated protocol buffer files
|
// ProtoPackageIsVersion2 is referenced from generated protocol buffer files
|
||||||
// to assert that that code is compatible with this version of the proto package.
|
// to assert that that code is compatible with this version of the proto package.
|
||||||
const GoGoProtoPackageIsVersion2 = true
|
GoGoProtoPackageIsVersion2 = true
|
||||||
|
|
||||||
// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
|
// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
|
||||||
// to assert that that code is compatible with this version of the proto package.
|
// to assert that that code is compatible with this version of the proto package.
|
||||||
const GoGoProtoPackageIsVersion1 = true
|
GoGoProtoPackageIsVersion1 = true
|
||||||
|
)
|
||||||
|
|
||||||
// InternalMessageInfo is a type used internally by generated .pb.go files.
|
// InternalMessageInfo is a type used internally by generated .pb.go files.
|
||||||
// This type is not intended to be used by non-generated code.
|
// This type is not intended to be used by non-generated code.
|
||||||
|
|
|
||||||
29
vendor/github.com/gogo/protobuf/proto/properties.go
generated
vendored
29
vendor/github.com/gogo/protobuf/proto/properties.go
generated
vendored
|
|
@ -43,7 +43,6 @@ package proto
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
@ -205,7 +204,7 @@ func (p *Properties) Parse(s string) {
|
||||||
// "bytes,49,opt,name=foo,def=hello!"
|
// "bytes,49,opt,name=foo,def=hello!"
|
||||||
fields := strings.Split(s, ",") // breaks def=, but handled below.
|
fields := strings.Split(s, ",") // breaks def=, but handled below.
|
||||||
if len(fields) < 2 {
|
if len(fields) < 2 {
|
||||||
fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s)
|
log.Printf("proto: tag has too few fields: %q", s)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,7 +224,7 @@ func (p *Properties) Parse(s string) {
|
||||||
p.WireType = WireBytes
|
p.WireType = WireBytes
|
||||||
// no numeric converter for non-numeric types
|
// no numeric converter for non-numeric types
|
||||||
default:
|
default:
|
||||||
fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s)
|
log.Printf("proto: tag has unknown wire type: %q", s)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -400,6 +399,15 @@ func GetProperties(t reflect.Type) *StructProperties {
|
||||||
return sprop
|
return sprop
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
oneofFuncsIface interface {
|
||||||
|
XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
|
||||||
|
}
|
||||||
|
oneofWrappersIface interface {
|
||||||
|
XXX_OneofWrappers() []interface{}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// getPropertiesLocked requires that propertiesMu is held.
|
// getPropertiesLocked requires that propertiesMu is held.
|
||||||
func getPropertiesLocked(t reflect.Type) *StructProperties {
|
func getPropertiesLocked(t reflect.Type) *StructProperties {
|
||||||
if prop, ok := propertiesMap[t]; ok {
|
if prop, ok := propertiesMap[t]; ok {
|
||||||
|
|
@ -441,13 +449,15 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
|
||||||
// Re-order prop.order.
|
// Re-order prop.order.
|
||||||
sort.Sort(prop)
|
sort.Sort(prop)
|
||||||
|
|
||||||
type oneofMessage interface {
|
if isOneofMessage {
|
||||||
XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
|
|
||||||
}
|
|
||||||
if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); isOneofMessage && ok {
|
|
||||||
var oots []interface{}
|
var oots []interface{}
|
||||||
_, _, _, oots = om.XXX_OneofFuncs()
|
switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
|
||||||
|
case oneofFuncsIface:
|
||||||
|
_, _, _, oots = m.XXX_OneofFuncs()
|
||||||
|
case oneofWrappersIface:
|
||||||
|
oots = m.XXX_OneofWrappers()
|
||||||
|
}
|
||||||
|
if len(oots) > 0 {
|
||||||
// Interpret oneof metadata.
|
// Interpret oneof metadata.
|
||||||
prop.OneofTypes = make(map[string]*OneofProperties)
|
prop.OneofTypes = make(map[string]*OneofProperties)
|
||||||
for _, oot := range oots {
|
for _, oot := range oots {
|
||||||
|
|
@ -474,6 +484,7 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
|
||||||
prop.OneofTypes[oop.Prop.OrigName] = oop
|
prop.OneofTypes[oop.Prop.OrigName] = oop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// build required counts
|
// build required counts
|
||||||
// build tags
|
// build tags
|
||||||
|
|
|
||||||
15
vendor/github.com/gogo/protobuf/proto/table_marshal.go
generated
vendored
15
vendor/github.com/gogo/protobuf/proto/table_marshal.go
generated
vendored
|
|
@ -389,8 +389,13 @@ func (u *marshalInfo) computeMarshalInfo() {
|
||||||
// get oneof implementers
|
// get oneof implementers
|
||||||
var oneofImplementers []interface{}
|
var oneofImplementers []interface{}
|
||||||
// gogo: isOneofMessage is needed for embedded oneof messages, without a marshaler and unmarshaler
|
// gogo: isOneofMessage is needed for embedded oneof messages, without a marshaler and unmarshaler
|
||||||
if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok && isOneofMessage {
|
if isOneofMessage {
|
||||||
|
switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
|
||||||
|
case oneofFuncsIface:
|
||||||
_, _, _, oneofImplementers = m.XXX_OneofFuncs()
|
_, _, _, oneofImplementers = m.XXX_OneofFuncs()
|
||||||
|
case oneofWrappersIface:
|
||||||
|
oneofImplementers = m.XXX_OneofWrappers()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// normal fields
|
// normal fields
|
||||||
|
|
@ -519,10 +524,6 @@ func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type oneofMessage interface {
|
|
||||||
XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
|
|
||||||
}
|
|
||||||
|
|
||||||
// wiretype returns the wire encoding of the type.
|
// wiretype returns the wire encoding of the type.
|
||||||
func wiretype(encoding string) uint64 {
|
func wiretype(encoding string) uint64 {
|
||||||
switch encoding {
|
switch encoding {
|
||||||
|
|
@ -2968,7 +2969,9 @@ func (p *Buffer) Marshal(pb Message) error {
|
||||||
if m, ok := pb.(newMarshaler); ok {
|
if m, ok := pb.(newMarshaler); ok {
|
||||||
siz := m.XXX_Size()
|
siz := m.XXX_Size()
|
||||||
p.grow(siz) // make sure buf has enough capacity
|
p.grow(siz) // make sure buf has enough capacity
|
||||||
p.buf, err = m.XXX_Marshal(p.buf, p.deterministic)
|
pp := p.buf[len(p.buf) : len(p.buf) : len(p.buf)+siz]
|
||||||
|
pp, err = m.XXX_Marshal(pp, p.deterministic)
|
||||||
|
p.buf = append(p.buf, pp...)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if m, ok := pb.(Marshaler); ok {
|
if m, ok := pb.(Marshaler); ok {
|
||||||
|
|
|
||||||
19
vendor/github.com/gogo/protobuf/proto/table_merge.go
generated
vendored
19
vendor/github.com/gogo/protobuf/proto/table_merge.go
generated
vendored
|
|
@ -530,6 +530,25 @@ func (mi *mergeInfo) computeMergeInfo() {
|
||||||
}
|
}
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
switch {
|
switch {
|
||||||
|
case isSlice && !isPointer: // E.g. []pb.T
|
||||||
|
mergeInfo := getMergeInfo(tf)
|
||||||
|
zero := reflect.Zero(tf)
|
||||||
|
mfi.merge = func(dst, src pointer) {
|
||||||
|
// TODO: Make this faster?
|
||||||
|
dstsp := dst.asPointerTo(f.Type)
|
||||||
|
dsts := dstsp.Elem()
|
||||||
|
srcs := src.asPointerTo(f.Type).Elem()
|
||||||
|
for i := 0; i < srcs.Len(); i++ {
|
||||||
|
dsts = reflect.Append(dsts, zero)
|
||||||
|
srcElement := srcs.Index(i).Addr()
|
||||||
|
dstElement := dsts.Index(dsts.Len() - 1).Addr()
|
||||||
|
mergeInfo.merge(valToPointer(dstElement), valToPointer(srcElement))
|
||||||
|
}
|
||||||
|
if dsts.IsNil() {
|
||||||
|
dsts = reflect.MakeSlice(f.Type, 0, 0)
|
||||||
|
}
|
||||||
|
dstsp.Elem().Set(dsts)
|
||||||
|
}
|
||||||
case !isPointer:
|
case !isPointer:
|
||||||
mergeInfo := getMergeInfo(tf)
|
mergeInfo := getMergeInfo(tf)
|
||||||
mfi.merge = func(dst, src pointer) {
|
mfi.merge = func(dst, src pointer) {
|
||||||
|
|
|
||||||
20
vendor/github.com/gogo/protobuf/proto/table_unmarshal.go
generated
vendored
20
vendor/github.com/gogo/protobuf/proto/table_unmarshal.go
generated
vendored
|
|
@ -371,14 +371,17 @@ func (u *unmarshalInfo) computeUnmarshalInfo() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find any types associated with oneof fields.
|
// Find any types associated with oneof fields.
|
||||||
// TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it?
|
|
||||||
fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs")
|
|
||||||
// gogo: len(oneofFields) > 0 is needed for embedded oneof messages, without a marshaler and unmarshaler
|
// gogo: len(oneofFields) > 0 is needed for embedded oneof messages, without a marshaler and unmarshaler
|
||||||
if fn.IsValid() && len(oneofFields) > 0 {
|
if len(oneofFields) > 0 {
|
||||||
res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{}
|
var oneofImplementers []interface{}
|
||||||
for i := res.Len() - 1; i >= 0; i-- {
|
switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
|
||||||
v := res.Index(i) // interface{}
|
case oneofFuncsIface:
|
||||||
tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X
|
_, _, _, oneofImplementers = m.XXX_OneofFuncs()
|
||||||
|
case oneofWrappersIface:
|
||||||
|
oneofImplementers = m.XXX_OneofWrappers()
|
||||||
|
}
|
||||||
|
for _, v := range oneofImplementers {
|
||||||
|
tptr := reflect.TypeOf(v) // *Msg_X
|
||||||
typ := tptr.Elem() // Msg_X
|
typ := tptr.Elem() // Msg_X
|
||||||
|
|
||||||
f := typ.Field(0) // oneof implementers have one field
|
f := typ.Field(0) // oneof implementers have one field
|
||||||
|
|
@ -407,11 +410,12 @@ func (u *unmarshalInfo) computeUnmarshalInfo() {
|
||||||
u.setTag(fieldNum, of.field, unmarshal, 0, name)
|
u.setTag(fieldNum, of.field, unmarshal, 0, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get extension ranges, if any.
|
// Get extension ranges, if any.
|
||||||
fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
|
fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
|
||||||
if fn.IsValid() {
|
if fn.IsValid() {
|
||||||
if !u.extensions.IsValid() && !u.oldExtensions.IsValid() && !u.bytesExtensions.IsValid() {
|
if !u.extensions.IsValid() && !u.oldExtensions.IsValid() && !u.bytesExtensions.IsValid() {
|
||||||
panic("a message with extensions, but no extensions field in " + t.Name())
|
panic("a message with extensions, but no extensions field in " + t.Name())
|
||||||
|
|
|
||||||
6
vendor/github.com/gogo/protobuf/proto/text.go
generated
vendored
6
vendor/github.com/gogo/protobuf/proto/text.go
generated
vendored
|
|
@ -476,6 +476,8 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()
|
||||||
|
|
||||||
// writeAny writes an arbitrary field.
|
// writeAny writes an arbitrary field.
|
||||||
func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
||||||
v = reflect.Indirect(v)
|
v = reflect.Indirect(v)
|
||||||
|
|
@ -589,8 +591,8 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert
|
||||||
// mutating this value.
|
// mutating this value.
|
||||||
v = v.Addr()
|
v = v.Addr()
|
||||||
}
|
}
|
||||||
if etm, ok := v.Interface().(encoding.TextMarshaler); ok {
|
if v.Type().Implements(textMarshalerType) {
|
||||||
text, err := etm.MarshalText()
|
text, err := v.Interface().(encoding.TextMarshaler).MarshalText()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
10
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
generated
vendored
10
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
generated
vendored
|
|
@ -18,7 +18,7 @@ var _ = math.Inf
|
||||||
// is compatible with the proto package it is being compiled against.
|
// is compatible with the proto package it is being compiled against.
|
||||||
// A compilation error at this line likely means your copy of the
|
// A compilation error at this line likely means your copy of the
|
||||||
// proto package needs to be updated.
|
// proto package needs to be updated.
|
||||||
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
|
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
||||||
|
|
||||||
type FieldDescriptorProto_Type int32
|
type FieldDescriptorProto_Type int32
|
||||||
|
|
||||||
|
|
@ -1364,8 +1364,8 @@ type FileOptions struct {
|
||||||
// determining the namespace.
|
// determining the namespace.
|
||||||
PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"`
|
PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"`
|
||||||
// Use this option to change the namespace of php generated metadata classes.
|
// Use this option to change the namespace of php generated metadata classes.
|
||||||
// Default is empty. When this option is empty, the proto file name will be used
|
// Default is empty. When this option is empty, the proto file name will be
|
||||||
// for determining the namespace.
|
// used for determining the namespace.
|
||||||
PhpMetadataNamespace *string `protobuf:"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace" json:"php_metadata_namespace,omitempty"`
|
PhpMetadataNamespace *string `protobuf:"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace" json:"php_metadata_namespace,omitempty"`
|
||||||
// Use this option to change the package of ruby generated classes. Default
|
// Use this option to change the package of ruby generated classes. Default
|
||||||
// is empty. When this option is not set, the package name will be used for
|
// is empty. When this option is not set, the package name will be used for
|
||||||
|
|
@ -1615,7 +1615,7 @@ type MessageOptions struct {
|
||||||
//
|
//
|
||||||
// Implementations may choose not to generate the map_entry=true message, but
|
// Implementations may choose not to generate the map_entry=true message, but
|
||||||
// use a native map in the target language to hold the keys and values.
|
// use a native map in the target language to hold the keys and values.
|
||||||
// The reflection APIs in such implementions still need to work as
|
// The reflection APIs in such implementations still need to work as
|
||||||
// if the field is a repeated message field.
|
// if the field is a repeated message field.
|
||||||
//
|
//
|
||||||
// NOTE: Do not set the option in .proto files. Always use the maps syntax
|
// NOTE: Do not set the option in .proto files. Always use the maps syntax
|
||||||
|
|
@ -2363,7 +2363,7 @@ type SourceCodeInfo struct {
|
||||||
// beginning of the "extend" block and is shared by all extensions within
|
// beginning of the "extend" block and is shared by all extensions within
|
||||||
// the block.
|
// the block.
|
||||||
// - Just because a location's span is a subset of some other location's span
|
// - Just because a location's span is a subset of some other location's span
|
||||||
// does not mean that it is a descendent. For example, a "group" defines
|
// does not mean that it is a descendant. For example, a "group" defines
|
||||||
// both a type and a field in a single declaration. Thus, the locations
|
// both a type and a field in a single declaration. Thus, the locations
|
||||||
// corresponding to the type and field and their components will overlap.
|
// corresponding to the type and field and their components will overlap.
|
||||||
// - Code which tries to interpret locations should probably be designed to
|
// - Code which tries to interpret locations should probably be designed to
|
||||||
|
|
|
||||||
81
vendor/github.com/google/go-cmp/cmp/compare.go
generated
vendored
81
vendor/github.com/google/go-cmp/cmp/compare.go
generated
vendored
|
|
@ -22,8 +22,8 @@
|
||||||
// equality is determined by recursively comparing the primitive kinds on both
|
// equality is determined by recursively comparing the primitive kinds on both
|
||||||
// values, much like reflect.DeepEqual. Unlike reflect.DeepEqual, unexported
|
// values, much like reflect.DeepEqual. Unlike reflect.DeepEqual, unexported
|
||||||
// fields are not compared by default; they result in panics unless suppressed
|
// fields are not compared by default; they result in panics unless suppressed
|
||||||
// by using an Ignore option (see cmpopts.IgnoreUnexported) or explicitly compared
|
// by using an Ignore option (see cmpopts.IgnoreUnexported) or explicitly
|
||||||
// using the AllowUnexported option.
|
// compared using the Exporter option.
|
||||||
package cmp
|
package cmp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
@ -62,8 +62,8 @@ import (
|
||||||
//
|
//
|
||||||
// Structs are equal if recursively calling Equal on all fields report equal.
|
// Structs are equal if recursively calling Equal on all fields report equal.
|
||||||
// If a struct contains unexported fields, Equal panics unless an Ignore option
|
// If a struct contains unexported fields, Equal panics unless an Ignore option
|
||||||
// (e.g., cmpopts.IgnoreUnexported) ignores that field or the AllowUnexported
|
// (e.g., cmpopts.IgnoreUnexported) ignores that field or the Exporter option
|
||||||
// option explicitly permits comparing the unexported field.
|
// explicitly permits comparing the unexported field.
|
||||||
//
|
//
|
||||||
// Slices are equal if they are both nil or both non-nil, where recursively
|
// Slices are equal if they are both nil or both non-nil, where recursively
|
||||||
// calling Equal on all non-ignored slice or array elements report equal.
|
// calling Equal on all non-ignored slice or array elements report equal.
|
||||||
|
|
@ -80,6 +80,11 @@ import (
|
||||||
// Pointers and interfaces are equal if they are both nil or both non-nil,
|
// Pointers and interfaces are equal if they are both nil or both non-nil,
|
||||||
// where they have the same underlying concrete type and recursively
|
// where they have the same underlying concrete type and recursively
|
||||||
// calling Equal on the underlying values reports equal.
|
// calling Equal on the underlying values reports equal.
|
||||||
|
//
|
||||||
|
// Before recursing into a pointer, slice element, or map, the current path
|
||||||
|
// is checked to detect whether the address has already been visited.
|
||||||
|
// If there is a cycle, then the pointed at values are considered equal
|
||||||
|
// only if both addresses were previously visited in the same path step.
|
||||||
func Equal(x, y interface{}, opts ...Option) bool {
|
func Equal(x, y interface{}, opts ...Option) bool {
|
||||||
vx := reflect.ValueOf(x)
|
vx := reflect.ValueOf(x)
|
||||||
vy := reflect.ValueOf(y)
|
vy := reflect.ValueOf(y)
|
||||||
|
|
@ -137,6 +142,7 @@ type state struct {
|
||||||
// Calling statelessCompare must not result in observable changes to these.
|
// Calling statelessCompare must not result in observable changes to these.
|
||||||
result diff.Result // The current result of comparison
|
result diff.Result // The current result of comparison
|
||||||
curPath Path // The current path in the value tree
|
curPath Path // The current path in the value tree
|
||||||
|
curPtrs pointerPath // The current set of visited pointers
|
||||||
reporters []reporter // Optional reporters
|
reporters []reporter // Optional reporters
|
||||||
|
|
||||||
// recChecker checks for infinite cycles applying the same set of
|
// recChecker checks for infinite cycles applying the same set of
|
||||||
|
|
@ -148,13 +154,14 @@ type state struct {
|
||||||
dynChecker dynChecker
|
dynChecker dynChecker
|
||||||
|
|
||||||
// These fields, once set by processOption, will not change.
|
// These fields, once set by processOption, will not change.
|
||||||
exporters map[reflect.Type]bool // Set of structs with unexported field visibility
|
exporters []exporter // List of exporters for structs with unexported fields
|
||||||
opts Options // List of all fundamental and filter options
|
opts Options // List of all fundamental and filter options
|
||||||
}
|
}
|
||||||
|
|
||||||
func newState(opts []Option) *state {
|
func newState(opts []Option) *state {
|
||||||
// Always ensure a validator option exists to validate the inputs.
|
// Always ensure a validator option exists to validate the inputs.
|
||||||
s := &state{opts: Options{validator{}}}
|
s := &state{opts: Options{validator{}}}
|
||||||
|
s.curPtrs.Init()
|
||||||
s.processOption(Options(opts))
|
s.processOption(Options(opts))
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
@ -174,13 +181,8 @@ func (s *state) processOption(opt Option) {
|
||||||
panic(fmt.Sprintf("cannot use an unfiltered option: %v", opt))
|
panic(fmt.Sprintf("cannot use an unfiltered option: %v", opt))
|
||||||
}
|
}
|
||||||
s.opts = append(s.opts, opt)
|
s.opts = append(s.opts, opt)
|
||||||
case visibleStructs:
|
case exporter:
|
||||||
if s.exporters == nil {
|
s.exporters = append(s.exporters, opt)
|
||||||
s.exporters = make(map[reflect.Type]bool)
|
|
||||||
}
|
|
||||||
for t := range opt {
|
|
||||||
s.exporters[t] = true
|
|
||||||
}
|
|
||||||
case reporter:
|
case reporter:
|
||||||
s.reporters = append(s.reporters, opt)
|
s.reporters = append(s.reporters, opt)
|
||||||
default:
|
default:
|
||||||
|
|
@ -192,9 +194,9 @@ func (s *state) processOption(opt Option) {
|
||||||
// This function is stateless in that it does not alter the current result,
|
// This function is stateless in that it does not alter the current result,
|
||||||
// or output to any registered reporters.
|
// or output to any registered reporters.
|
||||||
func (s *state) statelessCompare(step PathStep) diff.Result {
|
func (s *state) statelessCompare(step PathStep) diff.Result {
|
||||||
// We do not save and restore the curPath because all of the compareX
|
// We do not save and restore curPath and curPtrs because all of the
|
||||||
// methods should properly push and pop from the path.
|
// compareX methods should properly push and pop from them.
|
||||||
// It is an implementation bug if the contents of curPath differs from
|
// It is an implementation bug if the contents of the paths differ from
|
||||||
// when calling this function to when returning from it.
|
// when calling this function to when returning from it.
|
||||||
|
|
||||||
oldResult, oldReporters := s.result, s.reporters
|
oldResult, oldReporters := s.result, s.reporters
|
||||||
|
|
@ -216,9 +218,17 @@ func (s *state) compareAny(step PathStep) {
|
||||||
}
|
}
|
||||||
s.recChecker.Check(s.curPath)
|
s.recChecker.Check(s.curPath)
|
||||||
|
|
||||||
// Obtain the current type and values.
|
// Cycle-detection for slice elements (see NOTE in compareSlice).
|
||||||
t := step.Type()
|
t := step.Type()
|
||||||
vx, vy := step.Values()
|
vx, vy := step.Values()
|
||||||
|
if si, ok := step.(SliceIndex); ok && si.isSlice && vx.IsValid() && vy.IsValid() {
|
||||||
|
px, py := vx.Addr(), vy.Addr()
|
||||||
|
if eq, visited := s.curPtrs.Push(px, py); visited {
|
||||||
|
s.report(eq, reportByCycle)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer s.curPtrs.Pop(px, py)
|
||||||
|
}
|
||||||
|
|
||||||
// Rule 1: Check whether an option applies on this node in the value tree.
|
// Rule 1: Check whether an option applies on this node in the value tree.
|
||||||
if s.tryOptions(t, vx, vy) {
|
if s.tryOptions(t, vx, vy) {
|
||||||
|
|
@ -354,6 +364,7 @@ func sanitizeValue(v reflect.Value, t reflect.Type) reflect.Value {
|
||||||
func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) {
|
func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) {
|
||||||
var vax, vay reflect.Value // Addressable versions of vx and vy
|
var vax, vay reflect.Value // Addressable versions of vx and vy
|
||||||
|
|
||||||
|
var mayForce, mayForceInit bool
|
||||||
step := StructField{&structField{}}
|
step := StructField{&structField{}}
|
||||||
for i := 0; i < t.NumField(); i++ {
|
for i := 0; i < t.NumField(); i++ {
|
||||||
step.typ = t.Field(i).Type
|
step.typ = t.Field(i).Type
|
||||||
|
|
@ -375,7 +386,13 @@ func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) {
|
||||||
vax = makeAddressable(vx)
|
vax = makeAddressable(vx)
|
||||||
vay = makeAddressable(vy)
|
vay = makeAddressable(vy)
|
||||||
}
|
}
|
||||||
step.mayForce = s.exporters[t]
|
if !mayForceInit {
|
||||||
|
for _, xf := range s.exporters {
|
||||||
|
mayForce = mayForce || xf(t)
|
||||||
|
}
|
||||||
|
mayForceInit = true
|
||||||
|
}
|
||||||
|
step.mayForce = mayForce
|
||||||
step.pvx = vax
|
step.pvx = vax
|
||||||
step.pvy = vay
|
step.pvy = vay
|
||||||
step.field = t.Field(i)
|
step.field = t.Field(i)
|
||||||
|
|
@ -391,9 +408,21 @@ func (s *state) compareSlice(t reflect.Type, vx, vy reflect.Value) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Support cyclic data structures.
|
// NOTE: It is incorrect to call curPtrs.Push on the slice header pointer
|
||||||
|
// since slices represents a list of pointers, rather than a single pointer.
|
||||||
|
// The pointer checking logic must be handled on a per-element basis
|
||||||
|
// in compareAny.
|
||||||
|
//
|
||||||
|
// A slice header (see reflect.SliceHeader) in Go is a tuple of a starting
|
||||||
|
// pointer P, a length N, and a capacity C. Supposing each slice element has
|
||||||
|
// a memory size of M, then the slice is equivalent to the list of pointers:
|
||||||
|
// [P+i*M for i in range(N)]
|
||||||
|
//
|
||||||
|
// For example, v[:0] and v[:1] are slices with the same starting pointer,
|
||||||
|
// but they are clearly different values. Using the slice pointer alone
|
||||||
|
// violates the assumption that equal pointers implies equal values.
|
||||||
|
|
||||||
step := SliceIndex{&sliceIndex{pathStep: pathStep{typ: t.Elem()}}}
|
step := SliceIndex{&sliceIndex{pathStep: pathStep{typ: t.Elem()}, isSlice: isSlice}}
|
||||||
withIndexes := func(ix, iy int) SliceIndex {
|
withIndexes := func(ix, iy int) SliceIndex {
|
||||||
if ix >= 0 {
|
if ix >= 0 {
|
||||||
step.vx, step.xkey = vx.Index(ix), ix
|
step.vx, step.xkey = vx.Index(ix), ix
|
||||||
|
|
@ -470,7 +499,12 @@ func (s *state) compareMap(t reflect.Type, vx, vy reflect.Value) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Support cyclic data structures.
|
// Cycle-detection for maps.
|
||||||
|
if eq, visited := s.curPtrs.Push(vx, vy); visited {
|
||||||
|
s.report(eq, reportByCycle)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer s.curPtrs.Pop(vx, vy)
|
||||||
|
|
||||||
// We combine and sort the two map keys so that we can perform the
|
// We combine and sort the two map keys so that we can perform the
|
||||||
// comparisons in a deterministic order.
|
// comparisons in a deterministic order.
|
||||||
|
|
@ -507,7 +541,12 @@ func (s *state) comparePtr(t reflect.Type, vx, vy reflect.Value) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Support cyclic data structures.
|
// Cycle-detection for pointers.
|
||||||
|
if eq, visited := s.curPtrs.Push(vx, vy); visited {
|
||||||
|
s.report(eq, reportByCycle)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer s.curPtrs.Pop(vx, vy)
|
||||||
|
|
||||||
vx, vy = vx.Elem(), vy.Elem()
|
vx, vy = vx.Elem(), vy.Elem()
|
||||||
s.compareAny(Indirect{&indirect{pathStep{t.Elem(), vx, vy}}})
|
s.compareAny(Indirect{&indirect{pathStep{t.Elem(), vx, vy}}})
|
||||||
|
|
|
||||||
4
vendor/github.com/google/go-cmp/cmp/export_panic.go
generated
vendored
4
vendor/github.com/google/go-cmp/cmp/export_panic.go
generated
vendored
|
|
@ -8,8 +8,8 @@ package cmp
|
||||||
|
|
||||||
import "reflect"
|
import "reflect"
|
||||||
|
|
||||||
const supportAllowUnexported = false
|
const supportExporters = false
|
||||||
|
|
||||||
func retrieveUnexportedField(reflect.Value, reflect.StructField) reflect.Value {
|
func retrieveUnexportedField(reflect.Value, reflect.StructField) reflect.Value {
|
||||||
panic("retrieveUnexportedField is not implemented")
|
panic("no support for forcibly accessing unexported fields")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
6
vendor/github.com/google/go-cmp/cmp/export_unsafe.go
generated
vendored
6
vendor/github.com/google/go-cmp/cmp/export_unsafe.go
generated
vendored
|
|
@ -11,7 +11,7 @@ import (
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
const supportAllowUnexported = true
|
const supportExporters = true
|
||||||
|
|
||||||
// retrieveUnexportedField uses unsafe to forcibly retrieve any field from
|
// retrieveUnexportedField uses unsafe to forcibly retrieve any field from
|
||||||
// a struct such that the value has read-write permissions.
|
// a struct such that the value has read-write permissions.
|
||||||
|
|
@ -19,5 +19,7 @@ const supportAllowUnexported = true
|
||||||
// The parent struct, v, must be addressable, while f must be a StructField
|
// The parent struct, v, must be addressable, while f must be a StructField
|
||||||
// describing the field to retrieve.
|
// describing the field to retrieve.
|
||||||
func retrieveUnexportedField(v reflect.Value, f reflect.StructField) reflect.Value {
|
func retrieveUnexportedField(v reflect.Value, f reflect.StructField) reflect.Value {
|
||||||
return reflect.NewAt(f.Type, unsafe.Pointer(v.UnsafeAddr()+f.Offset)).Elem()
|
// See https://github.com/google/go-cmp/issues/167 for discussion of the
|
||||||
|
// following expression.
|
||||||
|
return reflect.NewAt(f.Type, unsafe.Pointer(uintptr(unsafe.Pointer(v.UnsafeAddr()))+f.Offset)).Elem()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
4
vendor/github.com/google/go-cmp/cmp/internal/value/sort.go
generated
vendored
4
vendor/github.com/google/go-cmp/cmp/internal/value/sort.go
generated
vendored
|
|
@ -19,7 +19,7 @@ func SortKeys(vs []reflect.Value) []reflect.Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort the map keys.
|
// Sort the map keys.
|
||||||
sort.Slice(vs, func(i, j int) bool { return isLess(vs[i], vs[j]) })
|
sort.SliceStable(vs, func(i, j int) bool { return isLess(vs[i], vs[j]) })
|
||||||
|
|
||||||
// Deduplicate keys (fails for NaNs).
|
// Deduplicate keys (fails for NaNs).
|
||||||
vs2 := vs[:1]
|
vs2 := vs[:1]
|
||||||
|
|
@ -42,6 +42,8 @@ func isLess(x, y reflect.Value) bool {
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||||
return x.Uint() < y.Uint()
|
return x.Uint() < y.Uint()
|
||||||
case reflect.Float32, reflect.Float64:
|
case reflect.Float32, reflect.Float64:
|
||||||
|
// NOTE: This does not sort -0 as less than +0
|
||||||
|
// since Go maps treat -0 and +0 as equal keys.
|
||||||
fx, fy := x.Float(), y.Float()
|
fx, fy := x.Float(), y.Float()
|
||||||
return fx < fy || math.IsNaN(fx) && !math.IsNaN(fy)
|
return fx < fy || math.IsNaN(fx) && !math.IsNaN(fy)
|
||||||
case reflect.Complex64, reflect.Complex128:
|
case reflect.Complex64, reflect.Complex128:
|
||||||
|
|
|
||||||
9
vendor/github.com/google/go-cmp/cmp/internal/value/zero.go
generated
vendored
9
vendor/github.com/google/go-cmp/cmp/internal/value/zero.go
generated
vendored
|
|
@ -4,7 +4,10 @@
|
||||||
|
|
||||||
package value
|
package value
|
||||||
|
|
||||||
import "reflect"
|
import (
|
||||||
|
"math"
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
// IsZero reports whether v is the zero value.
|
// IsZero reports whether v is the zero value.
|
||||||
// This does not rely on Interface and so can be used on unexported fields.
|
// This does not rely on Interface and so can be used on unexported fields.
|
||||||
|
|
@ -17,9 +20,9 @@ func IsZero(v reflect.Value) bool {
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||||
return v.Uint() == 0
|
return v.Uint() == 0
|
||||||
case reflect.Float32, reflect.Float64:
|
case reflect.Float32, reflect.Float64:
|
||||||
return v.Float() == 0
|
return math.Float64bits(v.Float()) == 0
|
||||||
case reflect.Complex64, reflect.Complex128:
|
case reflect.Complex64, reflect.Complex128:
|
||||||
return v.Complex() == 0
|
return math.Float64bits(real(v.Complex())) == 0 && math.Float64bits(imag(v.Complex())) == 0
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
return v.String() == ""
|
return v.String() == ""
|
||||||
case reflect.UnsafePointer:
|
case reflect.UnsafePointer:
|
||||||
|
|
|
||||||
55
vendor/github.com/google/go-cmp/cmp/options.go
generated
vendored
55
vendor/github.com/google/go-cmp/cmp/options.go
generated
vendored
|
|
@ -225,8 +225,20 @@ func (validator) apply(s *state, vx, vy reflect.Value) {
|
||||||
|
|
||||||
// Unable to Interface implies unexported field without visibility access.
|
// Unable to Interface implies unexported field without visibility access.
|
||||||
if !vx.CanInterface() || !vy.CanInterface() {
|
if !vx.CanInterface() || !vy.CanInterface() {
|
||||||
const help = "consider using a custom Comparer; if you control the implementation of type, you can also consider AllowUnexported or cmpopts.IgnoreUnexported"
|
const help = "consider using a custom Comparer; if you control the implementation of type, you can also consider using an Exporter, AllowUnexported, or cmpopts.IgnoreUnexported"
|
||||||
panic(fmt.Sprintf("cannot handle unexported field: %#v\n%s", s.curPath, help))
|
var name string
|
||||||
|
if t := s.curPath.Index(-2).Type(); t.Name() != "" {
|
||||||
|
// Named type with unexported fields.
|
||||||
|
name = fmt.Sprintf("%q.%v", t.PkgPath(), t.Name()) // e.g., "path/to/package".MyType
|
||||||
|
} else {
|
||||||
|
// Unnamed type with unexported fields. Derive PkgPath from field.
|
||||||
|
var pkgPath string
|
||||||
|
for i := 0; i < t.NumField() && pkgPath == ""; i++ {
|
||||||
|
pkgPath = t.Field(i).PkgPath
|
||||||
|
}
|
||||||
|
name = fmt.Sprintf("%q.(%v)", pkgPath, t.String()) // e.g., "path/to/package".(struct { a int })
|
||||||
|
}
|
||||||
|
panic(fmt.Sprintf("cannot handle unexported field at %#v:\n\t%v\n%s", s.curPath, name, help))
|
||||||
}
|
}
|
||||||
|
|
||||||
panic("not reachable")
|
panic("not reachable")
|
||||||
|
|
@ -360,9 +372,8 @@ func (cm comparer) String() string {
|
||||||
return fmt.Sprintf("Comparer(%s)", function.NameOf(cm.fnc))
|
return fmt.Sprintf("Comparer(%s)", function.NameOf(cm.fnc))
|
||||||
}
|
}
|
||||||
|
|
||||||
// AllowUnexported returns an Option that forcibly allows operations on
|
// Exporter returns an Option that specifies whether Equal is allowed to
|
||||||
// unexported fields in certain structs, which are specified by passing in a
|
// introspect into the unexported fields of certain struct types.
|
||||||
// value of each struct type.
|
|
||||||
//
|
//
|
||||||
// Users of this option must understand that comparing on unexported fields
|
// Users of this option must understand that comparing on unexported fields
|
||||||
// from external packages is not safe since changes in the internal
|
// from external packages is not safe since changes in the internal
|
||||||
|
|
@ -386,10 +397,24 @@ func (cm comparer) String() string {
|
||||||
//
|
//
|
||||||
// In other cases, the cmpopts.IgnoreUnexported option can be used to ignore
|
// In other cases, the cmpopts.IgnoreUnexported option can be used to ignore
|
||||||
// all unexported fields on specified struct types.
|
// all unexported fields on specified struct types.
|
||||||
func AllowUnexported(types ...interface{}) Option {
|
func Exporter(f func(reflect.Type) bool) Option {
|
||||||
if !supportAllowUnexported {
|
if !supportExporters {
|
||||||
panic("AllowUnexported is not supported on purego builds, Google App Engine Standard, or GopherJS")
|
panic("Exporter is not supported on purego builds")
|
||||||
}
|
}
|
||||||
|
return exporter(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
type exporter func(reflect.Type) bool
|
||||||
|
|
||||||
|
func (exporter) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableOption {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
// AllowUnexported returns an Options that allows Equal to forcibly introspect
|
||||||
|
// unexported fields of the specified struct types.
|
||||||
|
//
|
||||||
|
// See Exporter for the proper use of this option.
|
||||||
|
func AllowUnexported(types ...interface{}) Option {
|
||||||
m := make(map[reflect.Type]bool)
|
m := make(map[reflect.Type]bool)
|
||||||
for _, typ := range types {
|
for _, typ := range types {
|
||||||
t := reflect.TypeOf(typ)
|
t := reflect.TypeOf(typ)
|
||||||
|
|
@ -398,13 +423,7 @@ func AllowUnexported(types ...interface{}) Option {
|
||||||
}
|
}
|
||||||
m[t] = true
|
m[t] = true
|
||||||
}
|
}
|
||||||
return visibleStructs(m)
|
return exporter(func(t reflect.Type) bool { return m[t] })
|
||||||
}
|
|
||||||
|
|
||||||
type visibleStructs map[reflect.Type]bool
|
|
||||||
|
|
||||||
func (visibleStructs) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableOption {
|
|
||||||
panic("not implemented")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Result represents the comparison result for a single node and
|
// Result represents the comparison result for a single node and
|
||||||
|
|
@ -436,6 +455,11 @@ func (r Result) ByFunc() bool {
|
||||||
return r.flags&reportByFunc != 0
|
return r.flags&reportByFunc != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ByCycle reports whether a reference cycle was detected.
|
||||||
|
func (r Result) ByCycle() bool {
|
||||||
|
return r.flags&reportByCycle != 0
|
||||||
|
}
|
||||||
|
|
||||||
type resultFlags uint
|
type resultFlags uint
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -446,6 +470,7 @@ const (
|
||||||
reportByIgnore
|
reportByIgnore
|
||||||
reportByMethod
|
reportByMethod
|
||||||
reportByFunc
|
reportByFunc
|
||||||
|
reportByCycle
|
||||||
)
|
)
|
||||||
|
|
||||||
// Reporter is an Option that can be passed to Equal. When Equal traverses
|
// Reporter is an Option that can be passed to Equal. When Equal traverses
|
||||||
|
|
|
||||||
71
vendor/github.com/google/go-cmp/cmp/path.go
generated
vendored
71
vendor/github.com/google/go-cmp/cmp/path.go
generated
vendored
|
|
@ -10,6 +10,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp/internal/value"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Path is a list of PathSteps describing the sequence of operations to get
|
// Path is a list of PathSteps describing the sequence of operations to get
|
||||||
|
|
@ -41,7 +43,7 @@ type PathStep interface {
|
||||||
// In some cases, one or both may be invalid or have restrictions:
|
// In some cases, one or both may be invalid or have restrictions:
|
||||||
// • For StructField, both are not interface-able if the current field
|
// • For StructField, both are not interface-able if the current field
|
||||||
// is unexported and the struct type is not explicitly permitted by
|
// is unexported and the struct type is not explicitly permitted by
|
||||||
// AllowUnexported to traverse unexported fields.
|
// an Exporter to traverse unexported fields.
|
||||||
// • For SliceIndex, one may be invalid if an element is missing from
|
// • For SliceIndex, one may be invalid if an element is missing from
|
||||||
// either the x or y slice.
|
// either the x or y slice.
|
||||||
// • For MapIndex, one may be invalid if an entry is missing from
|
// • For MapIndex, one may be invalid if an entry is missing from
|
||||||
|
|
@ -207,6 +209,7 @@ type SliceIndex struct{ *sliceIndex }
|
||||||
type sliceIndex struct {
|
type sliceIndex struct {
|
||||||
pathStep
|
pathStep
|
||||||
xkey, ykey int
|
xkey, ykey int
|
||||||
|
isSlice bool // False for reflect.Array
|
||||||
}
|
}
|
||||||
|
|
||||||
func (si SliceIndex) Type() reflect.Type { return si.typ }
|
func (si SliceIndex) Type() reflect.Type { return si.typ }
|
||||||
|
|
@ -301,6 +304,72 @@ func (tf Transform) Func() reflect.Value { return tf.trans.fnc }
|
||||||
// The == operator can be used to detect the exact option used.
|
// The == operator can be used to detect the exact option used.
|
||||||
func (tf Transform) Option() Option { return tf.trans }
|
func (tf Transform) Option() Option { return tf.trans }
|
||||||
|
|
||||||
|
// pointerPath represents a dual-stack of pointers encountered when
|
||||||
|
// recursively traversing the x and y values. This data structure supports
|
||||||
|
// detection of cycles and determining whether the cycles are equal.
|
||||||
|
// In Go, cycles can occur via pointers, slices, and maps.
|
||||||
|
//
|
||||||
|
// The pointerPath uses a map to represent a stack; where descension into a
|
||||||
|
// pointer pushes the address onto the stack, and ascension from a pointer
|
||||||
|
// pops the address from the stack. Thus, when traversing into a pointer from
|
||||||
|
// reflect.Ptr, reflect.Slice element, or reflect.Map, we can detect cycles
|
||||||
|
// by checking whether the pointer has already been visited. The cycle detection
|
||||||
|
// uses a seperate stack for the x and y values.
|
||||||
|
//
|
||||||
|
// If a cycle is detected we need to determine whether the two pointers
|
||||||
|
// should be considered equal. The definition of equality chosen by Equal
|
||||||
|
// requires two graphs to have the same structure. To determine this, both the
|
||||||
|
// x and y values must have a cycle where the previous pointers were also
|
||||||
|
// encountered together as a pair.
|
||||||
|
//
|
||||||
|
// Semantically, this is equivalent to augmenting Indirect, SliceIndex, and
|
||||||
|
// MapIndex with pointer information for the x and y values.
|
||||||
|
// Suppose px and py are two pointers to compare, we then search the
|
||||||
|
// Path for whether px was ever encountered in the Path history of x, and
|
||||||
|
// similarly so with py. If either side has a cycle, the comparison is only
|
||||||
|
// equal if both px and py have a cycle resulting from the same PathStep.
|
||||||
|
//
|
||||||
|
// Using a map as a stack is more performant as we can perform cycle detection
|
||||||
|
// in O(1) instead of O(N) where N is len(Path).
|
||||||
|
type pointerPath struct {
|
||||||
|
// mx is keyed by x pointers, where the value is the associated y pointer.
|
||||||
|
mx map[value.Pointer]value.Pointer
|
||||||
|
// my is keyed by y pointers, where the value is the associated x pointer.
|
||||||
|
my map[value.Pointer]value.Pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pointerPath) Init() {
|
||||||
|
p.mx = make(map[value.Pointer]value.Pointer)
|
||||||
|
p.my = make(map[value.Pointer]value.Pointer)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Push indicates intent to descend into pointers vx and vy where
|
||||||
|
// visited reports whether either has been seen before. If visited before,
|
||||||
|
// equal reports whether both pointers were encountered together.
|
||||||
|
// Pop must be called if and only if the pointers were never visited.
|
||||||
|
//
|
||||||
|
// The pointers vx and vy must be a reflect.Ptr, reflect.Slice, or reflect.Map
|
||||||
|
// and be non-nil.
|
||||||
|
func (p pointerPath) Push(vx, vy reflect.Value) (equal, visited bool) {
|
||||||
|
px := value.PointerOf(vx)
|
||||||
|
py := value.PointerOf(vy)
|
||||||
|
_, ok1 := p.mx[px]
|
||||||
|
_, ok2 := p.my[py]
|
||||||
|
if ok1 || ok2 {
|
||||||
|
equal = p.mx[px] == py && p.my[py] == px // Pointers paired together
|
||||||
|
return equal, true
|
||||||
|
}
|
||||||
|
p.mx[px] = py
|
||||||
|
p.my[py] = px
|
||||||
|
return false, false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pop ascends from pointers vx and vy.
|
||||||
|
func (p pointerPath) Pop(vx, vy reflect.Value) {
|
||||||
|
delete(p.mx, value.PointerOf(vx))
|
||||||
|
delete(p.my, value.PointerOf(vy))
|
||||||
|
}
|
||||||
|
|
||||||
// isExported reports whether the identifier is exported.
|
// isExported reports whether the identifier is exported.
|
||||||
func isExported(id string) bool {
|
func isExported(id string) bool {
|
||||||
r, _ := utf8.DecodeRuneInString(id)
|
r, _ := utf8.DecodeRuneInString(id)
|
||||||
|
|
|
||||||
2
vendor/github.com/google/go-cmp/cmp/report_compare.go
generated
vendored
2
vendor/github.com/google/go-cmp/cmp/report_compare.go
generated
vendored
|
|
@ -168,7 +168,7 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te
|
||||||
var isZero bool
|
var isZero bool
|
||||||
switch opts.DiffMode {
|
switch opts.DiffMode {
|
||||||
case diffIdentical:
|
case diffIdentical:
|
||||||
isZero = value.IsZero(r.Value.ValueX) || value.IsZero(r.Value.ValueX)
|
isZero = value.IsZero(r.Value.ValueX) || value.IsZero(r.Value.ValueY)
|
||||||
case diffRemoved:
|
case diffRemoved:
|
||||||
isZero = value.IsZero(r.Value.ValueX)
|
isZero = value.IsZero(r.Value.ValueX)
|
||||||
case diffInserted:
|
case diffInserted:
|
||||||
|
|
|
||||||
1
vendor/github.com/google/go-cmp/cmp/report_reflect.go
generated
vendored
1
vendor/github.com/google/go-cmp/cmp/report_reflect.go
generated
vendored
|
|
@ -208,7 +208,6 @@ func (opts formatOptions) FormatValue(v reflect.Value, m visitedPointers) (out t
|
||||||
func formatMapKey(v reflect.Value) string {
|
func formatMapKey(v reflect.Value) string {
|
||||||
var opts formatOptions
|
var opts formatOptions
|
||||||
opts.TypeMode = elideType
|
opts.TypeMode = elideType
|
||||||
opts.AvoidStringer = true
|
|
||||||
opts.ShallowPointers = true
|
opts.ShallowPointers = true
|
||||||
s := opts.FormatValue(v, visitedPointers{}).String()
|
s := opts.FormatValue(v, visitedPointers{}).String()
|
||||||
return strings.TrimSpace(s)
|
return strings.TrimSpace(s)
|
||||||
|
|
|
||||||
4
vendor/github.com/google/go-cmp/cmp/report_slices.go
generated
vendored
4
vendor/github.com/google/go-cmp/cmp/report_slices.go
generated
vendored
|
|
@ -90,7 +90,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
|
||||||
}
|
}
|
||||||
if r == '\n' {
|
if r == '\n' {
|
||||||
if maxLineLen < i-lastLineIdx {
|
if maxLineLen < i-lastLineIdx {
|
||||||
lastLineIdx = i - lastLineIdx
|
maxLineLen = i - lastLineIdx
|
||||||
}
|
}
|
||||||
lastLineIdx = i + 1
|
lastLineIdx = i + 1
|
||||||
numLines++
|
numLines++
|
||||||
|
|
@ -322,7 +322,7 @@ func coalesceInterveningIdentical(groups []diffStats, windowSize int) []diffStat
|
||||||
hadX, hadY := prev.NumRemoved > 0, prev.NumInserted > 0
|
hadX, hadY := prev.NumRemoved > 0, prev.NumInserted > 0
|
||||||
hasX, hasY := next.NumRemoved > 0, next.NumInserted > 0
|
hasX, hasY := next.NumRemoved > 0, next.NumInserted > 0
|
||||||
if ((hadX || hasX) && (hadY || hasY)) && curr.NumIdentical <= windowSize {
|
if ((hadX || hasX) && (hadY || hasY)) && curr.NumIdentical <= windowSize {
|
||||||
*prev = (*prev).Append(*curr).Append(*next)
|
*prev = prev.Append(*curr).Append(*next)
|
||||||
groups = groups[:len(groups)-1] // Truncate off equal group
|
groups = groups[:len(groups)-1] // Truncate off equal group
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
||||||
7
vendor/github.com/google/go-cmp/cmp/report_text.go
generated
vendored
7
vendor/github.com/google/go-cmp/cmp/report_text.go
generated
vendored
|
|
@ -19,6 +19,11 @@ var randBool = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) == 0
|
||||||
type indentMode int
|
type indentMode int
|
||||||
|
|
||||||
func (n indentMode) appendIndent(b []byte, d diffMode) []byte {
|
func (n indentMode) appendIndent(b []byte, d diffMode) []byte {
|
||||||
|
// The output of Diff is documented as being unstable to provide future
|
||||||
|
// flexibility in changing the output for more humanly readable reports.
|
||||||
|
// This logic intentionally introduces instability to the exact output
|
||||||
|
// so that users can detect accidental reliance on stability early on,
|
||||||
|
// rather than much later when an actual change to the format occurs.
|
||||||
if flags.Deterministic || randBool {
|
if flags.Deterministic || randBool {
|
||||||
// Use regular spaces (U+0020).
|
// Use regular spaces (U+0020).
|
||||||
switch d {
|
switch d {
|
||||||
|
|
@ -360,7 +365,7 @@ func (s diffStats) String() string {
|
||||||
// Pluralize the name (adjusting for some obscure English grammar rules).
|
// Pluralize the name (adjusting for some obscure English grammar rules).
|
||||||
name := s.Name
|
name := s.Name
|
||||||
if sum > 1 {
|
if sum > 1 {
|
||||||
name = name + "s"
|
name += "s"
|
||||||
if strings.HasSuffix(name, "ys") {
|
if strings.HasSuffix(name, "ys") {
|
||||||
name = name[:len(name)-2] + "ies" // e.g., "entrys" => "entries"
|
name = name[:len(name)-2] + "ies" // e.g., "entrys" => "entries"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2
vendor/github.com/google/gofuzz/README.md
generated
vendored
2
vendor/github.com/google/gofuzz/README.md
generated
vendored
|
|
@ -3,7 +3,7 @@ gofuzz
|
||||||
|
|
||||||
gofuzz is a library for populating go objects with random values.
|
gofuzz is a library for populating go objects with random values.
|
||||||
|
|
||||||
[](https://godoc.org/github.com/google/gofuzz)
|
[](https://godoc.org/github.com/google/gofuzz)
|
||||||
[](https://travis-ci.org/google/gofuzz)
|
[](https://travis-ci.org/google/gofuzz)
|
||||||
|
|
||||||
This is useful for testing:
|
This is useful for testing:
|
||||||
|
|
|
||||||
19
vendor/github.com/google/gofuzz/fuzz.go
generated
vendored
19
vendor/github.com/google/gofuzz/fuzz.go
generated
vendored
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"regexp"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -35,6 +36,7 @@ type Fuzzer struct {
|
||||||
minElements int
|
minElements int
|
||||||
maxElements int
|
maxElements int
|
||||||
maxDepth int
|
maxDepth int
|
||||||
|
skipFieldPatterns []*regexp.Regexp
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns a new Fuzzer. Customize your Fuzzer further by calling Funcs,
|
// New returns a new Fuzzer. Customize your Fuzzer further by calling Funcs,
|
||||||
|
|
@ -150,6 +152,13 @@ func (f *Fuzzer) MaxDepth(d int) *Fuzzer {
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip fields which match the supplied pattern. Call this multiple times if needed
|
||||||
|
// This is useful to skip XXX_ fields generated by protobuf
|
||||||
|
func (f *Fuzzer) SkipFieldsWithPattern(pattern *regexp.Regexp) *Fuzzer {
|
||||||
|
f.skipFieldPatterns = append(f.skipFieldPatterns, pattern)
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
// Fuzz recursively fills all of obj's fields with something random. First
|
// Fuzz recursively fills all of obj's fields with something random. First
|
||||||
// this tries to find a custom fuzz function (see Funcs). If there is no
|
// this tries to find a custom fuzz function (see Funcs). If there is no
|
||||||
// custom function this tests whether the object implements fuzz.Interface and,
|
// custom function this tests whether the object implements fuzz.Interface and,
|
||||||
|
|
@ -274,8 +283,18 @@ func (fc *fuzzerContext) doFuzz(v reflect.Value, flags uint64) {
|
||||||
v.Set(reflect.Zero(v.Type()))
|
v.Set(reflect.Zero(v.Type()))
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
for i := 0; i < v.NumField(); i++ {
|
for i := 0; i < v.NumField(); i++ {
|
||||||
|
skipField := false
|
||||||
|
fieldName := v.Type().Field(i).Name
|
||||||
|
for _, pattern := range fc.fuzzer.skipFieldPatterns {
|
||||||
|
if pattern.MatchString(fieldName) {
|
||||||
|
skipField = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !skipField {
|
||||||
fc.doFuzz(v.Field(i), 0)
|
fc.doFuzz(v.Field(i), 0)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case reflect.Chan:
|
case reflect.Chan:
|
||||||
fallthrough
|
fallthrough
|
||||||
case reflect.Func:
|
case reflect.Func:
|
||||||
|
|
|
||||||
6
vendor/github.com/googleapis/gnostic/compiler/reader.go
generated
vendored
6
vendor/github.com/googleapis/gnostic/compiler/reader.go
generated
vendored
|
|
@ -15,6 +15,7 @@
|
||||||
package compiler
|
package compiler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
@ -53,11 +54,16 @@ func FetchFile(fileurl string) ([]byte, error) {
|
||||||
}
|
}
|
||||||
return bytes, nil
|
return bytes, nil
|
||||||
}
|
}
|
||||||
|
if verboseReader {
|
||||||
log.Printf("Fetching %s", fileurl)
|
log.Printf("Fetching %s", fileurl)
|
||||||
|
}
|
||||||
response, err := http.Get(fileurl)
|
response, err := http.Get(fileurl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if response.StatusCode != 200 {
|
||||||
|
return nil, errors.New(fmt.Sprintf("Error downloading %s: %s", fileurl, response.Status))
|
||||||
|
}
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
bytes, err = ioutil.ReadAll(response.Body)
|
bytes, err = ioutil.ReadAll(response.Body)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|
|
||||||
2
vendor/github.com/googleapis/gnostic/extensions/extension.pb.go
generated
vendored
2
vendor/github.com/googleapis/gnostic/extensions/extension.pb.go
generated
vendored
|
|
@ -193,7 +193,7 @@ func init() { proto.RegisterFile("extension.proto", fileDescriptor0) }
|
||||||
|
|
||||||
var fileDescriptor0 = []byte{
|
var fileDescriptor0 = []byte{
|
||||||
// 355 bytes of a gzipped FileDescriptorProto
|
// 355 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x91, 0x4d, 0x4b, 0xf3, 0x40,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0x4d, 0x4b, 0xf3, 0x40,
|
||||||
0x1c, 0xc4, 0x49, 0xdf, 0xf2, 0x64, 0x1f, 0xb4, 0xb2, 0x16, 0x8d, 0xe2, 0xa1, 0x04, 0x84, 0x22,
|
0x1c, 0xc4, 0x49, 0xdf, 0xf2, 0x64, 0x1f, 0xb4, 0xb2, 0x16, 0x8d, 0xe2, 0xa1, 0x04, 0x84, 0x22,
|
||||||
0xb8, 0xa5, 0x0a, 0xde, 0x5b, 0x28, 0xea, 0xc5, 0x96, 0x3d, 0xd4, 0x9b, 0x65, 0x9b, 0xfe, 0xdb,
|
0xb8, 0xa5, 0x0a, 0xde, 0x5b, 0x28, 0xea, 0xc5, 0x96, 0x3d, 0xd4, 0x9b, 0x65, 0x9b, 0xfe, 0xdb,
|
||||||
0x46, 0x92, 0xdd, 0x75, 0xf3, 0x62, 0xfb, 0x55, 0x3c, 0xfa, 0x49, 0x25, 0xbb, 0xd9, 0x7a, 0x50,
|
0x46, 0x92, 0xdd, 0x75, 0xf3, 0x62, 0xfb, 0x55, 0x3c, 0xfa, 0x49, 0x25, 0xbb, 0xd9, 0x7a, 0x50,
|
||||||
|
|
|
||||||
|
|
@ -221,10 +221,13 @@ func addObjectParams(ws *restful.WebService, route *restful.RouteBuilder, obj in
|
||||||
if docable, ok := obj.(documentable); ok {
|
if docable, ok := obj.(documentable); ok {
|
||||||
desc = docable.SwaggerDoc()[jsonName]
|
desc = docable.SwaggerDoc()[jsonName]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if route.ParameterNamed(jsonName) == nil {
|
||||||
route.Param(ws.QueryParameter(jsonName, desc).DataType(typeToJSON(sf.Type.String())))
|
route.Param(ws.QueryParameter(jsonName, desc).DataType(typeToJSON(sf.Type.String())))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
5
vendor/github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd/builder.go
generated
vendored
5
vendor/github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd/builder.go
generated
vendored
|
|
@ -29,6 +29,7 @@ import (
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
|
openapicommon "k8s.io/kube-openapi/pkg/common"
|
||||||
|
|
||||||
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/apiserver"
|
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/apiserver"
|
||||||
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd/server"
|
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd/server"
|
||||||
|
|
@ -66,6 +67,9 @@ type AdapterBase struct {
|
||||||
// if not explicitly set.
|
// if not explicitly set.
|
||||||
FlagSet *pflag.FlagSet
|
FlagSet *pflag.FlagSet
|
||||||
|
|
||||||
|
// OpenAPIConfig
|
||||||
|
OpenAPIConfig *openapicommon.Config
|
||||||
|
|
||||||
// flagOnce controls initialization of the flags.
|
// flagOnce controls initialization of the flags.
|
||||||
flagOnce sync.Once
|
flagOnce sync.Once
|
||||||
|
|
||||||
|
|
@ -88,6 +92,7 @@ func (b *AdapterBase) InstallFlags() {
|
||||||
b.flagOnce.Do(func() {
|
b.flagOnce.Do(func() {
|
||||||
if b.CustomMetricsAdapterServerOptions == nil {
|
if b.CustomMetricsAdapterServerOptions == nil {
|
||||||
b.CustomMetricsAdapterServerOptions = server.NewCustomMetricsAdapterServerOptions()
|
b.CustomMetricsAdapterServerOptions = server.NewCustomMetricsAdapterServerOptions()
|
||||||
|
b.CustomMetricsAdapterServerOptions.OpenAPIConfig = b.OpenAPIConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
b.SecureServing.AddFlags(b.FlagSet)
|
b.SecureServing.AddFlags(b.FlagSet)
|
||||||
|
|
|
||||||
15
vendor/github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd/server/start.go
generated
vendored
15
vendor/github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd/server/start.go
generated
vendored
|
|
@ -20,9 +20,11 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/apiserver"
|
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
genericoptions "k8s.io/apiserver/pkg/server/options"
|
genericoptions "k8s.io/apiserver/pkg/server/options"
|
||||||
|
openapicommon "k8s.io/kube-openapi/pkg/common"
|
||||||
|
|
||||||
|
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/apiserver"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CustomMetricsAdapterServerOptions struct {
|
type CustomMetricsAdapterServerOptions struct {
|
||||||
|
|
@ -31,6 +33,9 @@ type CustomMetricsAdapterServerOptions struct {
|
||||||
Authentication *genericoptions.DelegatingAuthenticationOptions
|
Authentication *genericoptions.DelegatingAuthenticationOptions
|
||||||
Authorization *genericoptions.DelegatingAuthorizationOptions
|
Authorization *genericoptions.DelegatingAuthorizationOptions
|
||||||
Features *genericoptions.FeatureOptions
|
Features *genericoptions.FeatureOptions
|
||||||
|
|
||||||
|
// OpenAPIConfig
|
||||||
|
OpenAPIConfig *openapicommon.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCustomMetricsAdapterServerOptions() *CustomMetricsAdapterServerOptions {
|
func NewCustomMetricsAdapterServerOptions() *CustomMetricsAdapterServerOptions {
|
||||||
|
|
@ -63,15 +68,17 @@ func (o CustomMetricsAdapterServerOptions) Config() (*apiserver.Config, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := o.Authentication.ApplyTo(&serverConfig.Authentication, serverConfig.SecureServing, serverConfig.OpenAPIConfig); err != nil {
|
if err := o.Authentication.ApplyTo(&serverConfig.Authentication, serverConfig.SecureServing, nil); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := o.Authorization.ApplyTo(&serverConfig.Authorization); err != nil {
|
if err := o.Authorization.ApplyTo(&serverConfig.Authorization); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: we can't currently serve swagger because we don't have a good way to dynamically update it
|
// enable OpenAPI schemas
|
||||||
// serverConfig.SwaggerConfig = genericapiserver.DefaultSwaggerConfig()
|
if o.OpenAPIConfig != nil {
|
||||||
|
serverConfig.OpenAPIConfig = o.OpenAPIConfig
|
||||||
|
}
|
||||||
|
|
||||||
config := &apiserver.Config{
|
config := &apiserver.Config{
|
||||||
GenericConfig: serverConfig,
|
GenericConfig: serverConfig,
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||||
package helpers
|
package helpers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
apimeta "k8s.io/apimachinery/pkg/api/meta"
|
apimeta "k8s.io/apimachinery/pkg/api/meta"
|
||||||
|
|
@ -83,7 +84,7 @@ func ListObjectNames(mapper apimeta.RESTMapper, client dynamic.Interface, namesp
|
||||||
resClient = client.Resource(res)
|
resClient = client.Resource(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
matchingObjectsRaw, err := resClient.List(metav1.ListOptions{LabelSelector: selector.String()})
|
matchingObjectsRaw, err := resClient.List(context.TODO(), metav1.ListOptions{LabelSelector: selector.String()})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ import (
|
||||||
// interfaces.
|
// interfaces.
|
||||||
type REST struct {
|
type REST struct {
|
||||||
emProvider provider.ExternalMetricsProvider
|
emProvider provider.ExternalMetricsProvider
|
||||||
|
rest.TableConvertor
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ rest.Storage = &REST{}
|
var _ rest.Storage = &REST{}
|
||||||
|
|
|
||||||
37
vendor/github.com/mailru/easyjson/jwriter/writer.go
generated
vendored
37
vendor/github.com/mailru/easyjson/jwriter/writer.go
generated
vendored
|
|
@ -270,16 +270,25 @@ func (w *Writer) Bool(v bool) {
|
||||||
|
|
||||||
const chars = "0123456789abcdef"
|
const chars = "0123456789abcdef"
|
||||||
|
|
||||||
func isNotEscapedSingleChar(c byte, escapeHTML bool) bool {
|
func getTable(falseValues ...int) [128]bool {
|
||||||
// Note: might make sense to use a table if there are more chars to escape. With 4 chars
|
table := [128]bool{}
|
||||||
// it benchmarks the same.
|
|
||||||
if escapeHTML {
|
for i := 0; i < 128; i++ {
|
||||||
return c != '<' && c != '>' && c != '&' && c != '\\' && c != '"' && c >= 0x20 && c < utf8.RuneSelf
|
table[i] = true
|
||||||
} else {
|
|
||||||
return c != '\\' && c != '"' && c >= 0x20 && c < utf8.RuneSelf
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, v := range falseValues {
|
||||||
|
table[v] = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return table
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
htmlEscapeTable = getTable(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, '"', '&', '<', '>', '\\')
|
||||||
|
htmlNoEscapeTable = getTable(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, '"', '\\')
|
||||||
|
)
|
||||||
|
|
||||||
func (w *Writer) String(s string) {
|
func (w *Writer) String(s string) {
|
||||||
w.Buffer.AppendByte('"')
|
w.Buffer.AppendByte('"')
|
||||||
|
|
||||||
|
|
@ -288,15 +297,23 @@ func (w *Writer) String(s string) {
|
||||||
|
|
||||||
p := 0 // last non-escape symbol
|
p := 0 // last non-escape symbol
|
||||||
|
|
||||||
|
var escapeTable [128]bool
|
||||||
|
if w.NoEscapeHTML {
|
||||||
|
escapeTable = htmlNoEscapeTable
|
||||||
|
} else {
|
||||||
|
escapeTable = htmlEscapeTable
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < len(s); {
|
for i := 0; i < len(s); {
|
||||||
c := s[i]
|
c := s[i]
|
||||||
|
|
||||||
if isNotEscapedSingleChar(c, !w.NoEscapeHTML) {
|
if c < utf8.RuneSelf {
|
||||||
|
if escapeTable[c] {
|
||||||
// single-width character, no escaping is required
|
// single-width character, no escaping is required
|
||||||
i++
|
i++
|
||||||
continue
|
continue
|
||||||
} else if c < utf8.RuneSelf {
|
}
|
||||||
// single-with character, need to escape
|
|
||||||
w.Buffer.AppendString(s[p:i])
|
w.Buffer.AppendString(s[p:i])
|
||||||
switch c {
|
switch c {
|
||||||
case '\t':
|
case '\t':
|
||||||
|
|
|
||||||
6
vendor/github.com/onsi/ginkgo/.travis.yml
generated
vendored
6
vendor/github.com/onsi/ginkgo/.travis.yml
generated
vendored
|
|
@ -1,10 +1,12 @@
|
||||||
language: go
|
language: go
|
||||||
go:
|
go:
|
||||||
- 1.10.x
|
|
||||||
- 1.11.x
|
|
||||||
- 1.12.x
|
- 1.12.x
|
||||||
|
- 1.13.x
|
||||||
- tip
|
- tip
|
||||||
|
|
||||||
|
# allow internal package imports, necessary for forked repositories
|
||||||
|
go_import_path: github.com/onsi/ginkgo
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- go get -v -t ./...
|
- go get -v -t ./...
|
||||||
- go get golang.org/x/tools/cmd/cover
|
- go get golang.org/x/tools/cmd/cover
|
||||||
|
|
|
||||||
30
vendor/github.com/onsi/ginkgo/CHANGELOG.md
generated
vendored
30
vendor/github.com/onsi/ginkgo/CHANGELOG.md
generated
vendored
|
|
@ -1,20 +1,42 @@
|
||||||
|
## 1.11.0
|
||||||
|
|
||||||
|
### Features
|
||||||
|
- Add syscall for riscv64 architecture [f66e896]
|
||||||
|
- teamcity reporter: output location of test failure as well as test definition (#626) [9869142]
|
||||||
|
- teamcity reporter: output newline after every service message (#625) [3cfa02d]
|
||||||
|
- Add support for go module when running `generate` command (#578) [9c89e3f]
|
||||||
|
|
||||||
|
## 1.10.3
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- Set go_import_path in travis.yml to allow internal packages in forks (#607) [3b721db]
|
||||||
|
- Add integration test [d90e0dc]
|
||||||
|
- Fix coverage files combining [e5dde8c]
|
||||||
|
- A new CLI option: -ginkgo.reportFile <file path> (#601) [034fd25]
|
||||||
|
|
||||||
|
## 1.10.2
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- speed up table entry generateIt() (#609) [5049dc5]
|
||||||
|
- Fix. Write errors to stderr instead of stdout (#610) [7bb3091]
|
||||||
|
|
||||||
## 1.10.1
|
## 1.10.1
|
||||||
|
|
||||||
## Fixes
|
### Fixes
|
||||||
- stack backtrace: fix skipping (#600) [2a4c0bd]
|
- stack backtrace: fix skipping (#600) [2a4c0bd]
|
||||||
|
|
||||||
## 1.10.0
|
## 1.10.0
|
||||||
|
|
||||||
## Fixes
|
### Fixes
|
||||||
- stack backtrace: fix alignment and skipping [66915d6]
|
- stack backtrace: fix alignment and skipping [66915d6]
|
||||||
- fix typo in documentation [8f97b93]
|
- fix typo in documentation [8f97b93]
|
||||||
|
|
||||||
## 1.9.0
|
## 1.9.0
|
||||||
|
|
||||||
## Features
|
### Features
|
||||||
- Option to print output into report, when tests have passed [0545415]
|
- Option to print output into report, when tests have passed [0545415]
|
||||||
|
|
||||||
## Fixes
|
### Fixes
|
||||||
- Fixed typos in comments [0ecbc58]
|
- Fixed typos in comments [0ecbc58]
|
||||||
- gofmt code [a7f8bfb]
|
- gofmt code [a7f8bfb]
|
||||||
- Simplify code [7454d00]
|
- Simplify code [7454d00]
|
||||||
|
|
|
||||||
9
vendor/github.com/onsi/ginkgo/config/config.go
generated
vendored
9
vendor/github.com/onsi/ginkgo/config/config.go
generated
vendored
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
const VERSION = "1.10.1"
|
const VERSION = "1.11.0"
|
||||||
|
|
||||||
type GinkgoConfigType struct {
|
type GinkgoConfigType struct {
|
||||||
RandomSeed int64
|
RandomSeed int64
|
||||||
|
|
@ -53,6 +53,7 @@ type DefaultReporterConfigType struct {
|
||||||
Verbose bool
|
Verbose bool
|
||||||
FullTrace bool
|
FullTrace bool
|
||||||
ReportPassed bool
|
ReportPassed bool
|
||||||
|
ReportFile string
|
||||||
}
|
}
|
||||||
|
|
||||||
var DefaultReporterConfig = DefaultReporterConfigType{}
|
var DefaultReporterConfig = DefaultReporterConfigType{}
|
||||||
|
|
@ -100,6 +101,8 @@ func Flags(flagSet *flag.FlagSet, prefix string, includeParallelFlags bool) {
|
||||||
flagSet.BoolVar(&(DefaultReporterConfig.Succinct), prefix+"succinct", false, "If set, default reporter prints out a very succinct report")
|
flagSet.BoolVar(&(DefaultReporterConfig.Succinct), prefix+"succinct", false, "If set, default reporter prints out a very succinct report")
|
||||||
flagSet.BoolVar(&(DefaultReporterConfig.FullTrace), prefix+"trace", false, "If set, default reporter prints out the full stack trace when a failure occurs")
|
flagSet.BoolVar(&(DefaultReporterConfig.FullTrace), prefix+"trace", false, "If set, default reporter prints out the full stack trace when a failure occurs")
|
||||||
flagSet.BoolVar(&(DefaultReporterConfig.ReportPassed), prefix+"reportPassed", false, "If set, default reporter prints out captured output of passed tests.")
|
flagSet.BoolVar(&(DefaultReporterConfig.ReportPassed), prefix+"reportPassed", false, "If set, default reporter prints out captured output of passed tests.")
|
||||||
|
flagSet.StringVar(&(DefaultReporterConfig.ReportFile), prefix+"reportFile", "", "Override the default reporter output file path.")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func BuildFlagArgs(prefix string, ginkgo GinkgoConfigType, reporter DefaultReporterConfigType) []string {
|
func BuildFlagArgs(prefix string, ginkgo GinkgoConfigType, reporter DefaultReporterConfigType) []string {
|
||||||
|
|
@ -202,5 +205,9 @@ func BuildFlagArgs(prefix string, ginkgo GinkgoConfigType, reporter DefaultRepor
|
||||||
result = append(result, fmt.Sprintf("--%sreportPassed", prefix))
|
result = append(result, fmt.Sprintf("--%sreportPassed", prefix))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if reporter.ReportFile != "" {
|
||||||
|
result = append(result, fmt.Sprintf("--%sreportFile=%s", prefix, reporter.ReportFile))
|
||||||
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
|
||||||
5
vendor/github.com/onsi/ginkgo/ginkgo_dsl.go
generated
vendored
5
vendor/github.com/onsi/ginkgo/ginkgo_dsl.go
generated
vendored
|
|
@ -199,6 +199,11 @@ type Benchmarker interface {
|
||||||
// ginkgo bootstrap
|
// ginkgo bootstrap
|
||||||
func RunSpecs(t GinkgoTestingT, description string) bool {
|
func RunSpecs(t GinkgoTestingT, description string) bool {
|
||||||
specReporters := []Reporter{buildDefaultReporter()}
|
specReporters := []Reporter{buildDefaultReporter()}
|
||||||
|
if config.DefaultReporterConfig.ReportFile != "" {
|
||||||
|
reportFile := config.DefaultReporterConfig.ReportFile
|
||||||
|
specReporters[0] = reporters.NewJUnitReporter(reportFile)
|
||||||
|
return RunSpecsWithDefaultAndCustomReporters(t, description, specReporters)
|
||||||
|
}
|
||||||
return RunSpecsWithCustomReporters(t, description, specReporters)
|
return RunSpecsWithCustomReporters(t, description, specReporters)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
11
vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_riscv64.go
generated
vendored
Normal file
11
vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_riscv64.go
generated
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
// +build linux,riscv64
|
||||||
|
|
||||||
|
package remote
|
||||||
|
|
||||||
|
import "syscall"
|
||||||
|
|
||||||
|
// linux_riscv64 doesn't have syscall.Dup2 which ginkgo uses, so
|
||||||
|
// use the nearly identical syscall.Dup3 instead
|
||||||
|
func syscallDup(oldfd int, newfd int) (err error) {
|
||||||
|
return syscall.Dup3(oldfd, newfd, 0)
|
||||||
|
}
|
||||||
1
vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go
generated
vendored
1
vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go
generated
vendored
|
|
@ -1,4 +1,5 @@
|
||||||
// +build !linux !arm64
|
// +build !linux !arm64
|
||||||
|
// +build !linux !riscv64
|
||||||
// +build !windows
|
// +build !windows
|
||||||
// +build !solaris
|
// +build !solaris
|
||||||
|
|
||||||
|
|
|
||||||
21
vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go
generated
vendored
21
vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go
generated
vendored
|
|
@ -13,6 +13,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/onsi/ginkgo/config"
|
"github.com/onsi/ginkgo/config"
|
||||||
|
|
@ -141,17 +142,29 @@ func (reporter *JUnitReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
|
||||||
reporter.suite.Time = math.Trunc(summary.RunTime.Seconds()*1000) / 1000
|
reporter.suite.Time = math.Trunc(summary.RunTime.Seconds()*1000) / 1000
|
||||||
reporter.suite.Failures = summary.NumberOfFailedSpecs
|
reporter.suite.Failures = summary.NumberOfFailedSpecs
|
||||||
reporter.suite.Errors = 0
|
reporter.suite.Errors = 0
|
||||||
file, err := os.Create(reporter.filename)
|
if reporter.ReporterConfig.ReportFile != "" {
|
||||||
|
reporter.filename = reporter.ReporterConfig.ReportFile
|
||||||
|
fmt.Printf("\nJUnit path was configured: %s\n", reporter.filename)
|
||||||
|
}
|
||||||
|
filePath, _ := filepath.Abs(reporter.filename)
|
||||||
|
dirPath := filepath.Dir(filePath)
|
||||||
|
err := os.MkdirAll(dirPath, os.ModePerm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to create JUnit report file: %s\n\t%s", reporter.filename, err.Error())
|
fmt.Printf("\nFailed to create JUnit directory: %s\n\t%s", filePath, err.Error())
|
||||||
|
}
|
||||||
|
file, err := os.Create(filePath)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Failed to create JUnit report file: %s\n\t%s", filePath, err.Error())
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
file.WriteString(xml.Header)
|
file.WriteString(xml.Header)
|
||||||
encoder := xml.NewEncoder(file)
|
encoder := xml.NewEncoder(file)
|
||||||
encoder.Indent(" ", " ")
|
encoder.Indent(" ", " ")
|
||||||
err = encoder.Encode(reporter.suite)
|
err = encoder.Encode(reporter.suite)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
fmt.Printf("Failed to generate JUnit report\n\t%s", err.Error())
|
fmt.Fprintf(os.Stdout, "\nJUnit report was created: %s\n", filePath)
|
||||||
|
} else {
|
||||||
|
fmt.Fprintf(os.Stderr,"\nFailed to generate JUnit report data:\n\t%s", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
36
vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go
generated
vendored
36
vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go
generated
vendored
|
|
@ -35,7 +35,7 @@ func NewTeamCityReporter(writer io.Writer) *TeamCityReporter {
|
||||||
|
|
||||||
func (reporter *TeamCityReporter) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) {
|
func (reporter *TeamCityReporter) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) {
|
||||||
reporter.testSuiteName = escape(summary.SuiteDescription)
|
reporter.testSuiteName = escape(summary.SuiteDescription)
|
||||||
fmt.Fprintf(reporter.writer, "%s[testSuiteStarted name='%s']", messageId, reporter.testSuiteName)
|
fmt.Fprintf(reporter.writer, "%s[testSuiteStarted name='%s']\n", messageId, reporter.testSuiteName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (reporter *TeamCityReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
|
func (reporter *TeamCityReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
|
||||||
|
|
@ -49,18 +49,18 @@ func (reporter *TeamCityReporter) AfterSuiteDidRun(setupSummary *types.SetupSumm
|
||||||
func (reporter *TeamCityReporter) handleSetupSummary(name string, setupSummary *types.SetupSummary) {
|
func (reporter *TeamCityReporter) handleSetupSummary(name string, setupSummary *types.SetupSummary) {
|
||||||
if setupSummary.State != types.SpecStatePassed {
|
if setupSummary.State != types.SpecStatePassed {
|
||||||
testName := escape(name)
|
testName := escape(name)
|
||||||
fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']", messageId, testName)
|
fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']\n", messageId, testName)
|
||||||
message := escape(setupSummary.Failure.ComponentCodeLocation.String())
|
message := reporter.failureMessage(setupSummary.Failure)
|
||||||
details := escape(setupSummary.Failure.Message)
|
details := reporter.failureDetails(setupSummary.Failure)
|
||||||
fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']", messageId, testName, message, details)
|
fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']\n", messageId, testName, message, details)
|
||||||
durationInMilliseconds := setupSummary.RunTime.Seconds() * 1000
|
durationInMilliseconds := setupSummary.RunTime.Seconds() * 1000
|
||||||
fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']", messageId, testName, durationInMilliseconds)
|
fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']\n", messageId, testName, durationInMilliseconds)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (reporter *TeamCityReporter) SpecWillRun(specSummary *types.SpecSummary) {
|
func (reporter *TeamCityReporter) SpecWillRun(specSummary *types.SpecSummary) {
|
||||||
testName := escape(strings.Join(specSummary.ComponentTexts[1:], " "))
|
testName := escape(strings.Join(specSummary.ComponentTexts[1:], " "))
|
||||||
fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']", messageId, testName)
|
fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']\n", messageId, testName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (reporter *TeamCityReporter) SpecDidComplete(specSummary *types.SpecSummary) {
|
func (reporter *TeamCityReporter) SpecDidComplete(specSummary *types.SpecSummary) {
|
||||||
|
|
@ -68,23 +68,31 @@ func (reporter *TeamCityReporter) SpecDidComplete(specSummary *types.SpecSummary
|
||||||
|
|
||||||
if reporter.ReporterConfig.ReportPassed && specSummary.State == types.SpecStatePassed {
|
if reporter.ReporterConfig.ReportPassed && specSummary.State == types.SpecStatePassed {
|
||||||
details := escape(specSummary.CapturedOutput)
|
details := escape(specSummary.CapturedOutput)
|
||||||
fmt.Fprintf(reporter.writer, "%s[testPassed name='%s' details='%s']", messageId, testName, details)
|
fmt.Fprintf(reporter.writer, "%s[testPassed name='%s' details='%s']\n", messageId, testName, details)
|
||||||
}
|
}
|
||||||
if specSummary.State == types.SpecStateFailed || specSummary.State == types.SpecStateTimedOut || specSummary.State == types.SpecStatePanicked {
|
if specSummary.State == types.SpecStateFailed || specSummary.State == types.SpecStateTimedOut || specSummary.State == types.SpecStatePanicked {
|
||||||
message := escape(specSummary.Failure.ComponentCodeLocation.String())
|
message := reporter.failureMessage(specSummary.Failure)
|
||||||
details := escape(specSummary.Failure.Message)
|
details := reporter.failureDetails(specSummary.Failure)
|
||||||
fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']", messageId, testName, message, details)
|
fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']\n", messageId, testName, message, details)
|
||||||
}
|
}
|
||||||
if specSummary.State == types.SpecStateSkipped || specSummary.State == types.SpecStatePending {
|
if specSummary.State == types.SpecStateSkipped || specSummary.State == types.SpecStatePending {
|
||||||
fmt.Fprintf(reporter.writer, "%s[testIgnored name='%s']", messageId, testName)
|
fmt.Fprintf(reporter.writer, "%s[testIgnored name='%s']\n", messageId, testName)
|
||||||
}
|
}
|
||||||
|
|
||||||
durationInMilliseconds := specSummary.RunTime.Seconds() * 1000
|
durationInMilliseconds := specSummary.RunTime.Seconds() * 1000
|
||||||
fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']", messageId, testName, durationInMilliseconds)
|
fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']\n", messageId, testName, durationInMilliseconds)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (reporter *TeamCityReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
|
func (reporter *TeamCityReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
|
||||||
fmt.Fprintf(reporter.writer, "%s[testSuiteFinished name='%s']", messageId, reporter.testSuiteName)
|
fmt.Fprintf(reporter.writer, "%s[testSuiteFinished name='%s']\n", messageId, reporter.testSuiteName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (reporter *TeamCityReporter) failureMessage(failure types.SpecFailure) string {
|
||||||
|
return escape(failure.ComponentCodeLocation.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (reporter *TeamCityReporter) failureDetails(failure types.SpecFailure) string {
|
||||||
|
return escape(fmt.Sprintf("%s\n%s", failure.Message, failure.Location.String()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func escape(output string) string {
|
func escape(output string) string {
|
||||||
|
|
|
||||||
11
vendor/github.com/pkg/errors/.travis.yml
generated
vendored
11
vendor/github.com/pkg/errors/.travis.yml
generated
vendored
|
|
@ -1,10 +1,15 @@
|
||||||
language: go
|
language: go
|
||||||
go_import_path: github.com/pkg/errors
|
go_import_path: github.com/pkg/errors
|
||||||
go:
|
go:
|
||||||
|
- 1.4.x
|
||||||
|
- 1.5.x
|
||||||
|
- 1.6.x
|
||||||
|
- 1.7.x
|
||||||
|
- 1.8.x
|
||||||
|
- 1.9.x
|
||||||
|
- 1.10.x
|
||||||
- 1.11.x
|
- 1.11.x
|
||||||
- 1.12.x
|
|
||||||
- 1.13.x
|
|
||||||
- tip
|
- tip
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- make check
|
- go test -v ./...
|
||||||
|
|
|
||||||
44
vendor/github.com/pkg/errors/Makefile
generated
vendored
44
vendor/github.com/pkg/errors/Makefile
generated
vendored
|
|
@ -1,44 +0,0 @@
|
||||||
PKGS := github.com/pkg/errors
|
|
||||||
SRCDIRS := $(shell go list -f '{{.Dir}}' $(PKGS))
|
|
||||||
GO := go
|
|
||||||
|
|
||||||
check: test vet gofmt misspell unconvert staticcheck ineffassign unparam
|
|
||||||
|
|
||||||
test:
|
|
||||||
$(GO) test $(PKGS)
|
|
||||||
|
|
||||||
vet: | test
|
|
||||||
$(GO) vet $(PKGS)
|
|
||||||
|
|
||||||
staticcheck:
|
|
||||||
$(GO) get honnef.co/go/tools/cmd/staticcheck
|
|
||||||
staticcheck -checks all $(PKGS)
|
|
||||||
|
|
||||||
misspell:
|
|
||||||
$(GO) get github.com/client9/misspell/cmd/misspell
|
|
||||||
misspell \
|
|
||||||
-locale GB \
|
|
||||||
-error \
|
|
||||||
*.md *.go
|
|
||||||
|
|
||||||
unconvert:
|
|
||||||
$(GO) get github.com/mdempsky/unconvert
|
|
||||||
unconvert -v $(PKGS)
|
|
||||||
|
|
||||||
ineffassign:
|
|
||||||
$(GO) get github.com/gordonklaus/ineffassign
|
|
||||||
find $(SRCDIRS) -name '*.go' | xargs ineffassign
|
|
||||||
|
|
||||||
pedantic: check errcheck
|
|
||||||
|
|
||||||
unparam:
|
|
||||||
$(GO) get mvdan.cc/unparam
|
|
||||||
unparam ./...
|
|
||||||
|
|
||||||
errcheck:
|
|
||||||
$(GO) get github.com/kisielk/errcheck
|
|
||||||
errcheck $(PKGS)
|
|
||||||
|
|
||||||
gofmt:
|
|
||||||
@echo Checking code is gofmted
|
|
||||||
@test -z "$(shell gofmt -s -l -d -e $(SRCDIRS) | tee /dev/stderr)"
|
|
||||||
11
vendor/github.com/pkg/errors/README.md
generated
vendored
11
vendor/github.com/pkg/errors/README.md
generated
vendored
|
|
@ -41,18 +41,11 @@ default:
|
||||||
|
|
||||||
[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).
|
[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).
|
||||||
|
|
||||||
## Roadmap
|
|
||||||
|
|
||||||
With the upcoming [Go2 error proposals](https://go.googlesource.com/proposal/+/master/design/go2draft.md) this package is moving into maintenance mode. The roadmap for a 1.0 release is as follows:
|
|
||||||
|
|
||||||
- 0.9. Remove pre Go 1.9 and Go 1.10 support, address outstanding pull requests (if possible)
|
|
||||||
- 1.0. Final release.
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Because of the Go2 errors changes, this package is not accepting proposals for new functionality. With that said, we welcome pull requests, bug fixes and issue reports.
|
We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high.
|
||||||
|
|
||||||
Before sending a PR, please discuss your change by raising an issue.
|
Before proposing a change, please discuss your change by raising an issue.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
|
||||||
29
vendor/github.com/pkg/errors/cause.go
generated
vendored
29
vendor/github.com/pkg/errors/cause.go
generated
vendored
|
|
@ -1,29 +0,0 @@
|
||||||
// +build !go1.13
|
|
||||||
|
|
||||||
package errors
|
|
||||||
|
|
||||||
// Cause recursively unwraps an error chain and returns the underlying cause of
|
|
||||||
// the error, if possible. An error value has a cause if it implements the
|
|
||||||
// following interface:
|
|
||||||
//
|
|
||||||
// type causer interface {
|
|
||||||
// Cause() error
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// If the error does not implement Cause, the original error will
|
|
||||||
// be returned. If the error is nil, nil will be returned without further
|
|
||||||
// investigation.
|
|
||||||
func Cause(err error) error {
|
|
||||||
type causer interface {
|
|
||||||
Cause() error
|
|
||||||
}
|
|
||||||
|
|
||||||
for err != nil {
|
|
||||||
cause, ok := err.(causer)
|
|
||||||
if !ok {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
err = cause.Cause()
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
34
vendor/github.com/pkg/errors/errors.go
generated
vendored
34
vendor/github.com/pkg/errors/errors.go
generated
vendored
|
|
@ -82,7 +82,7 @@
|
||||||
//
|
//
|
||||||
// if err, ok := err.(stackTracer); ok {
|
// if err, ok := err.(stackTracer); ok {
|
||||||
// for _, f := range err.StackTrace() {
|
// for _, f := range err.StackTrace() {
|
||||||
// fmt.Printf("%+s:%d\n", f, f)
|
// fmt.Printf("%+s:%d", f)
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
|
|
@ -159,9 +159,6 @@ type withStack struct {
|
||||||
|
|
||||||
func (w *withStack) Cause() error { return w.error }
|
func (w *withStack) Cause() error { return w.error }
|
||||||
|
|
||||||
// Unwrap provides compatibility for Go 1.13 error chains.
|
|
||||||
func (w *withStack) Unwrap() error { return w.error }
|
|
||||||
|
|
||||||
func (w *withStack) Format(s fmt.State, verb rune) {
|
func (w *withStack) Format(s fmt.State, verb rune) {
|
||||||
switch verb {
|
switch verb {
|
||||||
case 'v':
|
case 'v':
|
||||||
|
|
@ -244,9 +241,6 @@ type withMessage struct {
|
||||||
func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() }
|
func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() }
|
||||||
func (w *withMessage) Cause() error { return w.cause }
|
func (w *withMessage) Cause() error { return w.cause }
|
||||||
|
|
||||||
// Unwrap provides compatibility for Go 1.13 error chains.
|
|
||||||
func (w *withMessage) Unwrap() error { return w.cause }
|
|
||||||
|
|
||||||
func (w *withMessage) Format(s fmt.State, verb rune) {
|
func (w *withMessage) Format(s fmt.State, verb rune) {
|
||||||
switch verb {
|
switch verb {
|
||||||
case 'v':
|
case 'v':
|
||||||
|
|
@ -260,3 +254,29 @@ func (w *withMessage) Format(s fmt.State, verb rune) {
|
||||||
io.WriteString(s, w.Error())
|
io.WriteString(s, w.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cause returns the underlying cause of the error, if possible.
|
||||||
|
// An error value has a cause if it implements the following
|
||||||
|
// interface:
|
||||||
|
//
|
||||||
|
// type causer interface {
|
||||||
|
// Cause() error
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// If the error does not implement Cause, the original error will
|
||||||
|
// be returned. If the error is nil, nil will be returned without further
|
||||||
|
// investigation.
|
||||||
|
func Cause(err error) error {
|
||||||
|
type causer interface {
|
||||||
|
Cause() error
|
||||||
|
}
|
||||||
|
|
||||||
|
for err != nil {
|
||||||
|
cause, ok := err.(causer)
|
||||||
|
if !ok {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
err = cause.Cause()
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
|
||||||
71
vendor/github.com/pkg/errors/go113.go
generated
vendored
71
vendor/github.com/pkg/errors/go113.go
generated
vendored
|
|
@ -1,71 +0,0 @@
|
||||||
// +build go1.13
|
|
||||||
|
|
||||||
package errors
|
|
||||||
|
|
||||||
import (
|
|
||||||
stderrors "errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Is reports whether any error in err's chain matches target.
|
|
||||||
//
|
|
||||||
// The chain consists of err itself followed by the sequence of errors obtained by
|
|
||||||
// repeatedly calling Unwrap.
|
|
||||||
//
|
|
||||||
// An error is considered to match a target if it is equal to that target or if
|
|
||||||
// it implements a method Is(error) bool such that Is(target) returns true.
|
|
||||||
func Is(err, target error) bool { return stderrors.Is(err, target) }
|
|
||||||
|
|
||||||
// As finds the first error in err's chain that matches target, and if so, sets
|
|
||||||
// target to that error value and returns true.
|
|
||||||
//
|
|
||||||
// The chain consists of err itself followed by the sequence of errors obtained by
|
|
||||||
// repeatedly calling Unwrap.
|
|
||||||
//
|
|
||||||
// An error matches target if the error's concrete value is assignable to the value
|
|
||||||
// pointed to by target, or if the error has a method As(interface{}) bool such that
|
|
||||||
// As(target) returns true. In the latter case, the As method is responsible for
|
|
||||||
// setting target.
|
|
||||||
//
|
|
||||||
// As will panic if target is not a non-nil pointer to either a type that implements
|
|
||||||
// error, or to any interface type. As returns false if err is nil.
|
|
||||||
func As(err error, target interface{}) bool { return stderrors.As(err, target) }
|
|
||||||
|
|
||||||
// Unwrap returns the result of calling the Unwrap method on err, if err's
|
|
||||||
// type contains an Unwrap method returning error.
|
|
||||||
// Otherwise, Unwrap returns nil.
|
|
||||||
func Unwrap(err error) error {
|
|
||||||
return stderrors.Unwrap(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cause recursively unwraps an error chain and returns the underlying cause of
|
|
||||||
// the error, if possible. There are two ways that an error value may provide a
|
|
||||||
// cause. First, the error may implement the following interface:
|
|
||||||
//
|
|
||||||
// type causer interface {
|
|
||||||
// Cause() error
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Second, the error may return a non-nil value when passed as an argument to
|
|
||||||
// the Unwrap function. This makes Cause forwards-compatible with Go 1.13 error
|
|
||||||
// chains.
|
|
||||||
//
|
|
||||||
// If an error value satisfies both methods of unwrapping, Cause will use the
|
|
||||||
// causer interface.
|
|
||||||
//
|
|
||||||
// If the error is nil, nil will be returned without further investigation.
|
|
||||||
func Cause(err error) error {
|
|
||||||
type causer interface {
|
|
||||||
Cause() error
|
|
||||||
}
|
|
||||||
|
|
||||||
for err != nil {
|
|
||||||
if cause, ok := err.(causer); ok {
|
|
||||||
err = cause.Cause()
|
|
||||||
} else if unwrapped := Unwrap(err); unwrapped != nil {
|
|
||||||
err = unwrapped
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
58
vendor/github.com/pkg/errors/stack.go
generated
vendored
58
vendor/github.com/pkg/errors/stack.go
generated
vendored
|
|
@ -5,13 +5,10 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"path"
|
"path"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Frame represents a program counter inside a stack frame.
|
// Frame represents a program counter inside a stack frame.
|
||||||
// For historical reasons if Frame is interpreted as a uintptr
|
|
||||||
// its value represents the program counter + 1.
|
|
||||||
type Frame uintptr
|
type Frame uintptr
|
||||||
|
|
||||||
// pc returns the program counter for this frame;
|
// pc returns the program counter for this frame;
|
||||||
|
|
@ -40,15 +37,6 @@ func (f Frame) line() int {
|
||||||
return line
|
return line
|
||||||
}
|
}
|
||||||
|
|
||||||
// name returns the name of this function, if known.
|
|
||||||
func (f Frame) name() string {
|
|
||||||
fn := runtime.FuncForPC(f.pc())
|
|
||||||
if fn == nil {
|
|
||||||
return "unknown"
|
|
||||||
}
|
|
||||||
return fn.Name()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format formats the frame according to the fmt.Formatter interface.
|
// Format formats the frame according to the fmt.Formatter interface.
|
||||||
//
|
//
|
||||||
// %s source file
|
// %s source file
|
||||||
|
|
@ -66,16 +54,22 @@ func (f Frame) Format(s fmt.State, verb rune) {
|
||||||
case 's':
|
case 's':
|
||||||
switch {
|
switch {
|
||||||
case s.Flag('+'):
|
case s.Flag('+'):
|
||||||
io.WriteString(s, f.name())
|
pc := f.pc()
|
||||||
io.WriteString(s, "\n\t")
|
fn := runtime.FuncForPC(pc)
|
||||||
io.WriteString(s, f.file())
|
if fn == nil {
|
||||||
|
io.WriteString(s, "unknown")
|
||||||
|
} else {
|
||||||
|
file, _ := fn.FileLine(pc)
|
||||||
|
fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
io.WriteString(s, path.Base(f.file()))
|
io.WriteString(s, path.Base(f.file()))
|
||||||
}
|
}
|
||||||
case 'd':
|
case 'd':
|
||||||
io.WriteString(s, strconv.Itoa(f.line()))
|
fmt.Fprintf(s, "%d", f.line())
|
||||||
case 'n':
|
case 'n':
|
||||||
io.WriteString(s, funcname(f.name()))
|
name := runtime.FuncForPC(f.pc()).Name()
|
||||||
|
io.WriteString(s, funcname(name))
|
||||||
case 'v':
|
case 'v':
|
||||||
f.Format(s, 's')
|
f.Format(s, 's')
|
||||||
io.WriteString(s, ":")
|
io.WriteString(s, ":")
|
||||||
|
|
@ -83,16 +77,6 @@ func (f Frame) Format(s fmt.State, verb rune) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalText formats a stacktrace Frame as a text string. The output is the
|
|
||||||
// same as that of fmt.Sprintf("%+v", f), but without newlines or tabs.
|
|
||||||
func (f Frame) MarshalText() ([]byte, error) {
|
|
||||||
name := f.name()
|
|
||||||
if name == "unknown" {
|
|
||||||
return []byte(name), nil
|
|
||||||
}
|
|
||||||
return []byte(fmt.Sprintf("%s %s:%d", name, f.file(), f.line())), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).
|
// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).
|
||||||
type StackTrace []Frame
|
type StackTrace []Frame
|
||||||
|
|
||||||
|
|
@ -110,32 +94,18 @@ func (st StackTrace) Format(s fmt.State, verb rune) {
|
||||||
switch {
|
switch {
|
||||||
case s.Flag('+'):
|
case s.Flag('+'):
|
||||||
for _, f := range st {
|
for _, f := range st {
|
||||||
io.WriteString(s, "\n")
|
fmt.Fprintf(s, "\n%+v", f)
|
||||||
f.Format(s, verb)
|
|
||||||
}
|
}
|
||||||
case s.Flag('#'):
|
case s.Flag('#'):
|
||||||
fmt.Fprintf(s, "%#v", []Frame(st))
|
fmt.Fprintf(s, "%#v", []Frame(st))
|
||||||
default:
|
default:
|
||||||
st.formatSlice(s, verb)
|
fmt.Fprintf(s, "%v", []Frame(st))
|
||||||
}
|
}
|
||||||
case 's':
|
case 's':
|
||||||
st.formatSlice(s, verb)
|
fmt.Fprintf(s, "%s", []Frame(st))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// formatSlice will format this StackTrace into the given buffer as a slice of
|
|
||||||
// Frame, only valid when called with '%s' or '%v'.
|
|
||||||
func (st StackTrace) formatSlice(s fmt.State, verb rune) {
|
|
||||||
io.WriteString(s, "[")
|
|
||||||
for i, f := range st {
|
|
||||||
if i > 0 {
|
|
||||||
io.WriteString(s, " ")
|
|
||||||
}
|
|
||||||
f.Format(s, verb)
|
|
||||||
}
|
|
||||||
io.WriteString(s, "]")
|
|
||||||
}
|
|
||||||
|
|
||||||
// stack represents a stack of program counters.
|
// stack represents a stack of program counters.
|
||||||
type stack []uintptr
|
type stack []uintptr
|
||||||
|
|
||||||
|
|
|
||||||
187
vendor/github.com/prometheus/client_golang/prometheus/testutil/testutil.go
generated
vendored
Normal file
187
vendor/github.com/prometheus/client_golang/prometheus/testutil/testutil.go
generated
vendored
Normal file
|
|
@ -0,0 +1,187 @@
|
||||||
|
// Copyright 2018 The Prometheus 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.
|
||||||
|
|
||||||
|
// Package testutil provides helpers to test code using the prometheus package
|
||||||
|
// of client_golang.
|
||||||
|
//
|
||||||
|
// While writing unit tests to verify correct instrumentation of your code, it's
|
||||||
|
// a common mistake to mostly test the instrumentation library instead of your
|
||||||
|
// own code. Rather than verifying that a prometheus.Counter's value has changed
|
||||||
|
// as expected or that it shows up in the exposition after registration, it is
|
||||||
|
// in general more robust and more faithful to the concept of unit tests to use
|
||||||
|
// mock implementations of the prometheus.Counter and prometheus.Registerer
|
||||||
|
// interfaces that simply assert that the Add or Register methods have been
|
||||||
|
// called with the expected arguments. However, this might be overkill in simple
|
||||||
|
// scenarios. The ToFloat64 function is provided for simple inspection of a
|
||||||
|
// single-value metric, but it has to be used with caution.
|
||||||
|
//
|
||||||
|
// End-to-end tests to verify all or larger parts of the metrics exposition can
|
||||||
|
// be implemented with the CollectAndCompare or GatherAndCompare functions. The
|
||||||
|
// most appropriate use is not so much testing instrumentation of your code, but
|
||||||
|
// testing custom prometheus.Collector implementations and in particular whole
|
||||||
|
// exporters, i.e. programs that retrieve telemetry data from a 3rd party source
|
||||||
|
// and convert it into Prometheus metrics.
|
||||||
|
package testutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/prometheus/common/expfmt"
|
||||||
|
|
||||||
|
dto "github.com/prometheus/client_model/go"
|
||||||
|
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
"github.com/prometheus/client_golang/prometheus/internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ToFloat64 collects all Metrics from the provided Collector. It expects that
|
||||||
|
// this results in exactly one Metric being collected, which must be a Gauge,
|
||||||
|
// Counter, or Untyped. In all other cases, ToFloat64 panics. ToFloat64 returns
|
||||||
|
// the value of the collected Metric.
|
||||||
|
//
|
||||||
|
// The Collector provided is typically a simple instance of Gauge or Counter, or
|
||||||
|
// – less commonly – a GaugeVec or CounterVec with exactly one element. But any
|
||||||
|
// Collector fulfilling the prerequisites described above will do.
|
||||||
|
//
|
||||||
|
// Use this function with caution. It is computationally very expensive and thus
|
||||||
|
// not suited at all to read values from Metrics in regular code. This is really
|
||||||
|
// only for testing purposes, and even for testing, other approaches are often
|
||||||
|
// more appropriate (see this package's documentation).
|
||||||
|
//
|
||||||
|
// A clear anti-pattern would be to use a metric type from the prometheus
|
||||||
|
// package to track values that are also needed for something else than the
|
||||||
|
// exposition of Prometheus metrics. For example, you would like to track the
|
||||||
|
// number of items in a queue because your code should reject queuing further
|
||||||
|
// items if a certain limit is reached. It is tempting to track the number of
|
||||||
|
// items in a prometheus.Gauge, as it is then easily available as a metric for
|
||||||
|
// exposition, too. However, then you would need to call ToFloat64 in your
|
||||||
|
// regular code, potentially quite often. The recommended way is to track the
|
||||||
|
// number of items conventionally (in the way you would have done it without
|
||||||
|
// considering Prometheus metrics) and then expose the number with a
|
||||||
|
// prometheus.GaugeFunc.
|
||||||
|
func ToFloat64(c prometheus.Collector) float64 {
|
||||||
|
var (
|
||||||
|
m prometheus.Metric
|
||||||
|
mCount int
|
||||||
|
mChan = make(chan prometheus.Metric)
|
||||||
|
done = make(chan struct{})
|
||||||
|
)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for m = range mChan {
|
||||||
|
mCount++
|
||||||
|
}
|
||||||
|
close(done)
|
||||||
|
}()
|
||||||
|
|
||||||
|
c.Collect(mChan)
|
||||||
|
close(mChan)
|
||||||
|
<-done
|
||||||
|
|
||||||
|
if mCount != 1 {
|
||||||
|
panic(fmt.Errorf("collected %d metrics instead of exactly 1", mCount))
|
||||||
|
}
|
||||||
|
|
||||||
|
pb := &dto.Metric{}
|
||||||
|
m.Write(pb)
|
||||||
|
if pb.Gauge != nil {
|
||||||
|
return pb.Gauge.GetValue()
|
||||||
|
}
|
||||||
|
if pb.Counter != nil {
|
||||||
|
return pb.Counter.GetValue()
|
||||||
|
}
|
||||||
|
if pb.Untyped != nil {
|
||||||
|
return pb.Untyped.GetValue()
|
||||||
|
}
|
||||||
|
panic(fmt.Errorf("collected a non-gauge/counter/untyped metric: %s", pb))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CollectAndCompare registers the provided Collector with a newly created
|
||||||
|
// pedantic Registry. It then does the same as GatherAndCompare, gathering the
|
||||||
|
// metrics from the pedantic Registry.
|
||||||
|
func CollectAndCompare(c prometheus.Collector, expected io.Reader, metricNames ...string) error {
|
||||||
|
reg := prometheus.NewPedanticRegistry()
|
||||||
|
if err := reg.Register(c); err != nil {
|
||||||
|
return fmt.Errorf("registering collector failed: %s", err)
|
||||||
|
}
|
||||||
|
return GatherAndCompare(reg, expected, metricNames...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GatherAndCompare gathers all metrics from the provided Gatherer and compares
|
||||||
|
// it to an expected output read from the provided Reader in the Prometheus text
|
||||||
|
// exposition format. If any metricNames are provided, only metrics with those
|
||||||
|
// names are compared.
|
||||||
|
func GatherAndCompare(g prometheus.Gatherer, expected io.Reader, metricNames ...string) error {
|
||||||
|
got, err := g.Gather()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("gathering metrics failed: %s", err)
|
||||||
|
}
|
||||||
|
if metricNames != nil {
|
||||||
|
got = filterMetrics(got, metricNames)
|
||||||
|
}
|
||||||
|
var tp expfmt.TextParser
|
||||||
|
wantRaw, err := tp.TextToMetricFamilies(expected)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("parsing expected metrics failed: %s", err)
|
||||||
|
}
|
||||||
|
want := internal.NormalizeMetricFamilies(wantRaw)
|
||||||
|
|
||||||
|
return compare(got, want)
|
||||||
|
}
|
||||||
|
|
||||||
|
// compare encodes both provided slices of metric families into the text format,
|
||||||
|
// compares their string message, and returns an error if they do not match.
|
||||||
|
// The error contains the encoded text of both the desired and the actual
|
||||||
|
// result.
|
||||||
|
func compare(got, want []*dto.MetricFamily) error {
|
||||||
|
var gotBuf, wantBuf bytes.Buffer
|
||||||
|
enc := expfmt.NewEncoder(&gotBuf, expfmt.FmtText)
|
||||||
|
for _, mf := range got {
|
||||||
|
if err := enc.Encode(mf); err != nil {
|
||||||
|
return fmt.Errorf("encoding gathered metrics failed: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
enc = expfmt.NewEncoder(&wantBuf, expfmt.FmtText)
|
||||||
|
for _, mf := range want {
|
||||||
|
if err := enc.Encode(mf); err != nil {
|
||||||
|
return fmt.Errorf("encoding expected metrics failed: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if wantBuf.String() != gotBuf.String() {
|
||||||
|
return fmt.Errorf(`
|
||||||
|
metric output does not match expectation; want:
|
||||||
|
|
||||||
|
%s
|
||||||
|
got:
|
||||||
|
|
||||||
|
%s`, wantBuf.String(), gotBuf.String())
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func filterMetrics(metrics []*dto.MetricFamily, names []string) []*dto.MetricFamily {
|
||||||
|
var filtered []*dto.MetricFamily
|
||||||
|
for _, m := range metrics {
|
||||||
|
for _, name := range names {
|
||||||
|
if m.GetName() == name {
|
||||||
|
filtered = append(filtered, m)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return filtered
|
||||||
|
}
|
||||||
248
vendor/github.com/prometheus/client_model/go/metrics.pb.go
generated
vendored
248
vendor/github.com/prometheus/client_model/go/metrics.pb.go
generated
vendored
|
|
@ -1,11 +1,14 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// source: metrics.proto
|
// source: metrics.proto
|
||||||
|
|
||||||
package io_prometheus_client // import "github.com/prometheus/client_model/go"
|
package io_prometheus_client
|
||||||
|
|
||||||
import proto "github.com/golang/protobuf/proto"
|
import (
|
||||||
import fmt "fmt"
|
fmt "fmt"
|
||||||
import math "math"
|
proto "github.com/golang/protobuf/proto"
|
||||||
|
timestamp "github.com/golang/protobuf/ptypes/timestamp"
|
||||||
|
math "math"
|
||||||
|
)
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
var _ = proto.Marshal
|
var _ = proto.Marshal
|
||||||
|
|
@ -16,7 +19,7 @@ var _ = math.Inf
|
||||||
// is compatible with the proto package it is being compiled against.
|
// is compatible with the proto package it is being compiled against.
|
||||||
// A compilation error at this line likely means your copy of the
|
// A compilation error at this line likely means your copy of the
|
||||||
// proto package needs to be updated.
|
// proto package needs to be updated.
|
||||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||||
|
|
||||||
type MetricType int32
|
type MetricType int32
|
||||||
|
|
||||||
|
|
@ -35,6 +38,7 @@ var MetricType_name = map[int32]string{
|
||||||
3: "UNTYPED",
|
3: "UNTYPED",
|
||||||
4: "HISTOGRAM",
|
4: "HISTOGRAM",
|
||||||
}
|
}
|
||||||
|
|
||||||
var MetricType_value = map[string]int32{
|
var MetricType_value = map[string]int32{
|
||||||
"COUNTER": 0,
|
"COUNTER": 0,
|
||||||
"GAUGE": 1,
|
"GAUGE": 1,
|
||||||
|
|
@ -48,9 +52,11 @@ func (x MetricType) Enum() *MetricType {
|
||||||
*p = x
|
*p = x
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x MetricType) String() string {
|
func (x MetricType) String() string {
|
||||||
return proto.EnumName(MetricType_name, int32(x))
|
return proto.EnumName(MetricType_name, int32(x))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *MetricType) UnmarshalJSON(data []byte) error {
|
func (x *MetricType) UnmarshalJSON(data []byte) error {
|
||||||
value, err := proto.UnmarshalJSONEnum(MetricType_value, data, "MetricType")
|
value, err := proto.UnmarshalJSONEnum(MetricType_value, data, "MetricType")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -59,8 +65,9 @@ func (x *MetricType) UnmarshalJSON(data []byte) error {
|
||||||
*x = MetricType(value)
|
*x = MetricType(value)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (MetricType) EnumDescriptor() ([]byte, []int) {
|
func (MetricType) EnumDescriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{0}
|
return fileDescriptor_6039342a2ba47b72, []int{0}
|
||||||
}
|
}
|
||||||
|
|
||||||
type LabelPair struct {
|
type LabelPair struct {
|
||||||
|
|
@ -75,16 +82,17 @@ func (m *LabelPair) Reset() { *m = LabelPair{} }
|
||||||
func (m *LabelPair) String() string { return proto.CompactTextString(m) }
|
func (m *LabelPair) String() string { return proto.CompactTextString(m) }
|
||||||
func (*LabelPair) ProtoMessage() {}
|
func (*LabelPair) ProtoMessage() {}
|
||||||
func (*LabelPair) Descriptor() ([]byte, []int) {
|
func (*LabelPair) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{0}
|
return fileDescriptor_6039342a2ba47b72, []int{0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *LabelPair) XXX_Unmarshal(b []byte) error {
|
func (m *LabelPair) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_LabelPair.Unmarshal(m, b)
|
return xxx_messageInfo_LabelPair.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *LabelPair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *LabelPair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_LabelPair.Marshal(b, m, deterministic)
|
return xxx_messageInfo_LabelPair.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *LabelPair) XXX_Merge(src proto.Message) {
|
func (m *LabelPair) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_LabelPair.Merge(dst, src)
|
xxx_messageInfo_LabelPair.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *LabelPair) XXX_Size() int {
|
func (m *LabelPair) XXX_Size() int {
|
||||||
return xxx_messageInfo_LabelPair.Size(m)
|
return xxx_messageInfo_LabelPair.Size(m)
|
||||||
|
|
@ -120,16 +128,17 @@ func (m *Gauge) Reset() { *m = Gauge{} }
|
||||||
func (m *Gauge) String() string { return proto.CompactTextString(m) }
|
func (m *Gauge) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Gauge) ProtoMessage() {}
|
func (*Gauge) ProtoMessage() {}
|
||||||
func (*Gauge) Descriptor() ([]byte, []int) {
|
func (*Gauge) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{1}
|
return fileDescriptor_6039342a2ba47b72, []int{1}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Gauge) XXX_Unmarshal(b []byte) error {
|
func (m *Gauge) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Gauge.Unmarshal(m, b)
|
return xxx_messageInfo_Gauge.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Gauge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Gauge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Gauge.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Gauge.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *Gauge) XXX_Merge(src proto.Message) {
|
func (m *Gauge) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Gauge.Merge(dst, src)
|
xxx_messageInfo_Gauge.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *Gauge) XXX_Size() int {
|
func (m *Gauge) XXX_Size() int {
|
||||||
return xxx_messageInfo_Gauge.Size(m)
|
return xxx_messageInfo_Gauge.Size(m)
|
||||||
|
|
@ -149,6 +158,7 @@ func (m *Gauge) GetValue() float64 {
|
||||||
|
|
||||||
type Counter struct {
|
type Counter struct {
|
||||||
Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
|
Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
|
||||||
|
Exemplar *Exemplar `protobuf:"bytes,2,opt,name=exemplar" json:"exemplar,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
|
@ -158,16 +168,17 @@ func (m *Counter) Reset() { *m = Counter{} }
|
||||||
func (m *Counter) String() string { return proto.CompactTextString(m) }
|
func (m *Counter) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Counter) ProtoMessage() {}
|
func (*Counter) ProtoMessage() {}
|
||||||
func (*Counter) Descriptor() ([]byte, []int) {
|
func (*Counter) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{2}
|
return fileDescriptor_6039342a2ba47b72, []int{2}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Counter) XXX_Unmarshal(b []byte) error {
|
func (m *Counter) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Counter.Unmarshal(m, b)
|
return xxx_messageInfo_Counter.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Counter.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Counter.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *Counter) XXX_Merge(src proto.Message) {
|
func (m *Counter) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Counter.Merge(dst, src)
|
xxx_messageInfo_Counter.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *Counter) XXX_Size() int {
|
func (m *Counter) XXX_Size() int {
|
||||||
return xxx_messageInfo_Counter.Size(m)
|
return xxx_messageInfo_Counter.Size(m)
|
||||||
|
|
@ -185,6 +196,13 @@ func (m *Counter) GetValue() float64 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Counter) GetExemplar() *Exemplar {
|
||||||
|
if m != nil {
|
||||||
|
return m.Exemplar
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type Quantile struct {
|
type Quantile struct {
|
||||||
Quantile *float64 `protobuf:"fixed64,1,opt,name=quantile" json:"quantile,omitempty"`
|
Quantile *float64 `protobuf:"fixed64,1,opt,name=quantile" json:"quantile,omitempty"`
|
||||||
Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
|
Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
|
||||||
|
|
@ -197,16 +215,17 @@ func (m *Quantile) Reset() { *m = Quantile{} }
|
||||||
func (m *Quantile) String() string { return proto.CompactTextString(m) }
|
func (m *Quantile) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Quantile) ProtoMessage() {}
|
func (*Quantile) ProtoMessage() {}
|
||||||
func (*Quantile) Descriptor() ([]byte, []int) {
|
func (*Quantile) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{3}
|
return fileDescriptor_6039342a2ba47b72, []int{3}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Quantile) XXX_Unmarshal(b []byte) error {
|
func (m *Quantile) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Quantile.Unmarshal(m, b)
|
return xxx_messageInfo_Quantile.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Quantile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Quantile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Quantile.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Quantile.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *Quantile) XXX_Merge(src proto.Message) {
|
func (m *Quantile) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Quantile.Merge(dst, src)
|
xxx_messageInfo_Quantile.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *Quantile) XXX_Size() int {
|
func (m *Quantile) XXX_Size() int {
|
||||||
return xxx_messageInfo_Quantile.Size(m)
|
return xxx_messageInfo_Quantile.Size(m)
|
||||||
|
|
@ -244,16 +263,17 @@ func (m *Summary) Reset() { *m = Summary{} }
|
||||||
func (m *Summary) String() string { return proto.CompactTextString(m) }
|
func (m *Summary) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Summary) ProtoMessage() {}
|
func (*Summary) ProtoMessage() {}
|
||||||
func (*Summary) Descriptor() ([]byte, []int) {
|
func (*Summary) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{4}
|
return fileDescriptor_6039342a2ba47b72, []int{4}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Summary) XXX_Unmarshal(b []byte) error {
|
func (m *Summary) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Summary.Unmarshal(m, b)
|
return xxx_messageInfo_Summary.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Summary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Summary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Summary.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Summary.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *Summary) XXX_Merge(src proto.Message) {
|
func (m *Summary) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Summary.Merge(dst, src)
|
xxx_messageInfo_Summary.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *Summary) XXX_Size() int {
|
func (m *Summary) XXX_Size() int {
|
||||||
return xxx_messageInfo_Summary.Size(m)
|
return xxx_messageInfo_Summary.Size(m)
|
||||||
|
|
@ -296,16 +316,17 @@ func (m *Untyped) Reset() { *m = Untyped{} }
|
||||||
func (m *Untyped) String() string { return proto.CompactTextString(m) }
|
func (m *Untyped) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Untyped) ProtoMessage() {}
|
func (*Untyped) ProtoMessage() {}
|
||||||
func (*Untyped) Descriptor() ([]byte, []int) {
|
func (*Untyped) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{5}
|
return fileDescriptor_6039342a2ba47b72, []int{5}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Untyped) XXX_Unmarshal(b []byte) error {
|
func (m *Untyped) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Untyped.Unmarshal(m, b)
|
return xxx_messageInfo_Untyped.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Untyped) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Untyped) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Untyped.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Untyped.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *Untyped) XXX_Merge(src proto.Message) {
|
func (m *Untyped) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Untyped.Merge(dst, src)
|
xxx_messageInfo_Untyped.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *Untyped) XXX_Size() int {
|
func (m *Untyped) XXX_Size() int {
|
||||||
return xxx_messageInfo_Untyped.Size(m)
|
return xxx_messageInfo_Untyped.Size(m)
|
||||||
|
|
@ -336,16 +357,17 @@ func (m *Histogram) Reset() { *m = Histogram{} }
|
||||||
func (m *Histogram) String() string { return proto.CompactTextString(m) }
|
func (m *Histogram) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Histogram) ProtoMessage() {}
|
func (*Histogram) ProtoMessage() {}
|
||||||
func (*Histogram) Descriptor() ([]byte, []int) {
|
func (*Histogram) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{6}
|
return fileDescriptor_6039342a2ba47b72, []int{6}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Histogram) XXX_Unmarshal(b []byte) error {
|
func (m *Histogram) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Histogram.Unmarshal(m, b)
|
return xxx_messageInfo_Histogram.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Histogram) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Histogram) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Histogram.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Histogram.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *Histogram) XXX_Merge(src proto.Message) {
|
func (m *Histogram) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Histogram.Merge(dst, src)
|
xxx_messageInfo_Histogram.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *Histogram) XXX_Size() int {
|
func (m *Histogram) XXX_Size() int {
|
||||||
return xxx_messageInfo_Histogram.Size(m)
|
return xxx_messageInfo_Histogram.Size(m)
|
||||||
|
|
@ -380,6 +402,7 @@ func (m *Histogram) GetBucket() []*Bucket {
|
||||||
type Bucket struct {
|
type Bucket struct {
|
||||||
CumulativeCount *uint64 `protobuf:"varint,1,opt,name=cumulative_count,json=cumulativeCount" json:"cumulative_count,omitempty"`
|
CumulativeCount *uint64 `protobuf:"varint,1,opt,name=cumulative_count,json=cumulativeCount" json:"cumulative_count,omitempty"`
|
||||||
UpperBound *float64 `protobuf:"fixed64,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"`
|
UpperBound *float64 `protobuf:"fixed64,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"`
|
||||||
|
Exemplar *Exemplar `protobuf:"bytes,3,opt,name=exemplar" json:"exemplar,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
|
@ -389,16 +412,17 @@ func (m *Bucket) Reset() { *m = Bucket{} }
|
||||||
func (m *Bucket) String() string { return proto.CompactTextString(m) }
|
func (m *Bucket) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Bucket) ProtoMessage() {}
|
func (*Bucket) ProtoMessage() {}
|
||||||
func (*Bucket) Descriptor() ([]byte, []int) {
|
func (*Bucket) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{7}
|
return fileDescriptor_6039342a2ba47b72, []int{7}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Bucket) XXX_Unmarshal(b []byte) error {
|
func (m *Bucket) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Bucket.Unmarshal(m, b)
|
return xxx_messageInfo_Bucket.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Bucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Bucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Bucket.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Bucket.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *Bucket) XXX_Merge(src proto.Message) {
|
func (m *Bucket) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Bucket.Merge(dst, src)
|
xxx_messageInfo_Bucket.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *Bucket) XXX_Size() int {
|
func (m *Bucket) XXX_Size() int {
|
||||||
return xxx_messageInfo_Bucket.Size(m)
|
return xxx_messageInfo_Bucket.Size(m)
|
||||||
|
|
@ -423,6 +447,68 @@ func (m *Bucket) GetUpperBound() float64 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Bucket) GetExemplar() *Exemplar {
|
||||||
|
if m != nil {
|
||||||
|
return m.Exemplar
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Exemplar struct {
|
||||||
|
Label []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"`
|
||||||
|
Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
|
||||||
|
Timestamp *timestamp.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Exemplar) Reset() { *m = Exemplar{} }
|
||||||
|
func (m *Exemplar) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Exemplar) ProtoMessage() {}
|
||||||
|
func (*Exemplar) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6039342a2ba47b72, []int{8}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Exemplar) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_Exemplar.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *Exemplar) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_Exemplar.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *Exemplar) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_Exemplar.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *Exemplar) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_Exemplar.Size(m)
|
||||||
|
}
|
||||||
|
func (m *Exemplar) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_Exemplar.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_Exemplar proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *Exemplar) GetLabel() []*LabelPair {
|
||||||
|
if m != nil {
|
||||||
|
return m.Label
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Exemplar) GetValue() float64 {
|
||||||
|
if m != nil && m.Value != nil {
|
||||||
|
return *m.Value
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Exemplar) GetTimestamp() *timestamp.Timestamp {
|
||||||
|
if m != nil {
|
||||||
|
return m.Timestamp
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type Metric struct {
|
type Metric struct {
|
||||||
Label []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"`
|
Label []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"`
|
||||||
Gauge *Gauge `protobuf:"bytes,2,opt,name=gauge" json:"gauge,omitempty"`
|
Gauge *Gauge `protobuf:"bytes,2,opt,name=gauge" json:"gauge,omitempty"`
|
||||||
|
|
@ -440,16 +526,17 @@ func (m *Metric) Reset() { *m = Metric{} }
|
||||||
func (m *Metric) String() string { return proto.CompactTextString(m) }
|
func (m *Metric) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Metric) ProtoMessage() {}
|
func (*Metric) ProtoMessage() {}
|
||||||
func (*Metric) Descriptor() ([]byte, []int) {
|
func (*Metric) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{8}
|
return fileDescriptor_6039342a2ba47b72, []int{9}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Metric) XXX_Unmarshal(b []byte) error {
|
func (m *Metric) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Metric.Unmarshal(m, b)
|
return xxx_messageInfo_Metric.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Metric.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Metric.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *Metric) XXX_Merge(src proto.Message) {
|
func (m *Metric) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Metric.Merge(dst, src)
|
xxx_messageInfo_Metric.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *Metric) XXX_Size() int {
|
func (m *Metric) XXX_Size() int {
|
||||||
return xxx_messageInfo_Metric.Size(m)
|
return xxx_messageInfo_Metric.Size(m)
|
||||||
|
|
@ -523,16 +610,17 @@ func (m *MetricFamily) Reset() { *m = MetricFamily{} }
|
||||||
func (m *MetricFamily) String() string { return proto.CompactTextString(m) }
|
func (m *MetricFamily) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MetricFamily) ProtoMessage() {}
|
func (*MetricFamily) ProtoMessage() {}
|
||||||
func (*MetricFamily) Descriptor() ([]byte, []int) {
|
func (*MetricFamily) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{9}
|
return fileDescriptor_6039342a2ba47b72, []int{10}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetricFamily) XXX_Unmarshal(b []byte) error {
|
func (m *MetricFamily) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MetricFamily.Unmarshal(m, b)
|
return xxx_messageInfo_MetricFamily.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *MetricFamily) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *MetricFamily) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_MetricFamily.Marshal(b, m, deterministic)
|
return xxx_messageInfo_MetricFamily.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (dst *MetricFamily) XXX_Merge(src proto.Message) {
|
func (m *MetricFamily) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_MetricFamily.Merge(dst, src)
|
xxx_messageInfo_MetricFamily.Merge(m, src)
|
||||||
}
|
}
|
||||||
func (m *MetricFamily) XXX_Size() int {
|
func (m *MetricFamily) XXX_Size() int {
|
||||||
return xxx_messageInfo_MetricFamily.Size(m)
|
return xxx_messageInfo_MetricFamily.Size(m)
|
||||||
|
|
@ -572,6 +660,7 @@ func (m *MetricFamily) GetMetric() []*Metric {
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
proto.RegisterEnum("io.prometheus.client.MetricType", MetricType_name, MetricType_value)
|
||||||
proto.RegisterType((*LabelPair)(nil), "io.prometheus.client.LabelPair")
|
proto.RegisterType((*LabelPair)(nil), "io.prometheus.client.LabelPair")
|
||||||
proto.RegisterType((*Gauge)(nil), "io.prometheus.client.Gauge")
|
proto.RegisterType((*Gauge)(nil), "io.prometheus.client.Gauge")
|
||||||
proto.RegisterType((*Counter)(nil), "io.prometheus.client.Counter")
|
proto.RegisterType((*Counter)(nil), "io.prometheus.client.Counter")
|
||||||
|
|
@ -580,50 +669,55 @@ func init() {
|
||||||
proto.RegisterType((*Untyped)(nil), "io.prometheus.client.Untyped")
|
proto.RegisterType((*Untyped)(nil), "io.prometheus.client.Untyped")
|
||||||
proto.RegisterType((*Histogram)(nil), "io.prometheus.client.Histogram")
|
proto.RegisterType((*Histogram)(nil), "io.prometheus.client.Histogram")
|
||||||
proto.RegisterType((*Bucket)(nil), "io.prometheus.client.Bucket")
|
proto.RegisterType((*Bucket)(nil), "io.prometheus.client.Bucket")
|
||||||
|
proto.RegisterType((*Exemplar)(nil), "io.prometheus.client.Exemplar")
|
||||||
proto.RegisterType((*Metric)(nil), "io.prometheus.client.Metric")
|
proto.RegisterType((*Metric)(nil), "io.prometheus.client.Metric")
|
||||||
proto.RegisterType((*MetricFamily)(nil), "io.prometheus.client.MetricFamily")
|
proto.RegisterType((*MetricFamily)(nil), "io.prometheus.client.MetricFamily")
|
||||||
proto.RegisterEnum("io.prometheus.client.MetricType", MetricType_name, MetricType_value)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("metrics.proto", fileDescriptor_metrics_c97c9a2b9560cb8f) }
|
func init() { proto.RegisterFile("metrics.proto", fileDescriptor_6039342a2ba47b72) }
|
||||||
|
|
||||||
var fileDescriptor_metrics_c97c9a2b9560cb8f = []byte{
|
var fileDescriptor_6039342a2ba47b72 = []byte{
|
||||||
// 591 bytes of a gzipped FileDescriptorProto
|
// 665 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4f, 0x4f, 0xdb, 0x4e,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0xd3, 0x4c,
|
||||||
0x14, 0xfc, 0x99, 0xd8, 0x09, 0x7e, 0x86, 0x5f, 0xad, 0x15, 0x07, 0xab, 0x2d, 0x25, 0xcd, 0x89,
|
0x14, 0xfd, 0xdc, 0x38, 0x3f, 0xbe, 0x69, 0x3f, 0xa2, 0x51, 0x17, 0x56, 0xa1, 0x24, 0x78, 0x55,
|
||||||
0xf6, 0x10, 0x54, 0x04, 0xaa, 0x44, 0xdb, 0x03, 0x50, 0x1a, 0x2a, 0xd5, 0x40, 0x37, 0xc9, 0x81,
|
0x58, 0x38, 0xa2, 0x6a, 0x05, 0x2a, 0xb0, 0x68, 0x4b, 0x48, 0x91, 0x48, 0x5b, 0x26, 0xc9, 0xa2,
|
||||||
0x5e, 0xac, 0x8d, 0x59, 0x25, 0x56, 0xbd, 0xb6, 0x6b, 0xef, 0x22, 0xe5, 0xdc, 0x43, 0xbf, 0x47,
|
0xb0, 0x88, 0x1c, 0x77, 0x70, 0x2c, 0x3c, 0xb1, 0xb1, 0x67, 0x2a, 0xb2, 0x66, 0xc1, 0x16, 0x5e,
|
||||||
0xbf, 0x68, 0xab, 0xfd, 0xe3, 0x18, 0x24, 0xc3, 0xa9, 0xb7, 0xb7, 0xf3, 0x66, 0xde, 0x8e, 0x77,
|
0x81, 0x17, 0x05, 0xcd, 0x8f, 0x6d, 0x2a, 0xb9, 0x95, 0x40, 0xec, 0x66, 0xee, 0x3d, 0xe7, 0xfa,
|
||||||
0xc7, 0x0b, 0x9b, 0x8c, 0xf2, 0x32, 0x89, 0xab, 0x61, 0x51, 0xe6, 0x3c, 0x47, 0x5b, 0x49, 0x2e,
|
0xcc, 0xf8, 0x9c, 0x81, 0x0d, 0x4a, 0x58, 0x1a, 0xfa, 0x99, 0x9b, 0xa4, 0x31, 0x8b, 0xd1, 0x66,
|
||||||
0x2b, 0x46, 0xf9, 0x82, 0x8a, 0x6a, 0x18, 0xa7, 0x09, 0xcd, 0xf8, 0xe0, 0x10, 0xdc, 0x2f, 0x64,
|
0x18, 0x8b, 0x15, 0x25, 0x6c, 0x41, 0x78, 0xe6, 0xfa, 0x51, 0x48, 0x96, 0x6c, 0xab, 0x1b, 0xc4,
|
||||||
0x46, 0xd3, 0x2b, 0x92, 0x94, 0x08, 0x81, 0x9d, 0x11, 0x46, 0x03, 0xab, 0x6f, 0xed, 0xba, 0x58,
|
0x71, 0x10, 0x91, 0xbe, 0xc4, 0xcc, 0xf9, 0x87, 0x3e, 0x0b, 0x29, 0xc9, 0x98, 0x47, 0x13, 0x45,
|
||||||
0xd5, 0x68, 0x0b, 0x9c, 0x5b, 0x92, 0x0a, 0x1a, 0xac, 0x29, 0x50, 0x2f, 0x06, 0xdb, 0xe0, 0x8c,
|
0x73, 0xf6, 0xc1, 0x7a, 0xe3, 0xcd, 0x49, 0x74, 0xee, 0x85, 0x29, 0x42, 0x60, 0x2e, 0x3d, 0x4a,
|
||||||
0x88, 0x98, 0xdf, 0x69, 0x4b, 0x8d, 0x55, 0xb7, 0x77, 0xa0, 0x77, 0x9a, 0x8b, 0x8c, 0xd3, 0xf2,
|
0x6c, 0xa3, 0x67, 0xec, 0x58, 0x58, 0xae, 0xd1, 0x26, 0xd4, 0xaf, 0xbc, 0x88, 0x13, 0x7b, 0x4d,
|
||||||
0x01, 0xc2, 0x7b, 0x58, 0xff, 0x2a, 0x48, 0xc6, 0x93, 0x94, 0xa2, 0xa7, 0xb0, 0xfe, 0xc3, 0xd4,
|
0x16, 0xd5, 0xc6, 0xd9, 0x86, 0xfa, 0xd0, 0xe3, 0xc1, 0x6f, 0x6d, 0xc1, 0x31, 0xf2, 0xf6, 0x7b,
|
||||||
0x86, 0xb4, 0x5a, 0xdf, 0xdf, 0x7d, 0xa5, 0xfe, 0x65, 0x41, 0x6f, 0x2c, 0x18, 0x23, 0xe5, 0x12,
|
0x68, 0x1e, 0xc7, 0x7c, 0xc9, 0x48, 0x5a, 0x0d, 0x40, 0x07, 0xd0, 0x22, 0x9f, 0x09, 0x4d, 0x22,
|
||||||
0xbd, 0x84, 0x8d, 0x8a, 0xb0, 0x22, 0xa5, 0x51, 0x2c, 0x77, 0x54, 0x13, 0x6c, 0xec, 0x69, 0x4c,
|
0x2f, 0x95, 0x83, 0xdb, 0xbb, 0xf7, 0xdd, 0xaa, 0x03, 0xb8, 0x03, 0x8d, 0xc2, 0x05, 0xde, 0x79,
|
||||||
0x99, 0x40, 0xdb, 0x00, 0x86, 0x52, 0x09, 0x66, 0x26, 0xb9, 0x1a, 0x19, 0x0b, 0x86, 0x8e, 0xee,
|
0x0e, 0xad, 0xb7, 0xdc, 0x5b, 0xb2, 0x30, 0x22, 0x68, 0x0b, 0x5a, 0x9f, 0xf4, 0x5a, 0x7f, 0xa0,
|
||||||
0xec, 0xdf, 0xe9, 0x77, 0x76, 0xbd, 0xfd, 0x17, 0xc3, 0xb6, 0xb3, 0x1a, 0xd6, 0x8e, 0x1b, 0x7f,
|
0xd8, 0x5f, 0x57, 0x5e, 0x48, 0xfb, 0x6a, 0x40, 0x73, 0xcc, 0x29, 0xf5, 0xd2, 0x15, 0x7a, 0x00,
|
||||||
0xf2, 0x43, 0xa7, 0x19, 0x5f, 0x16, 0xf4, 0xe6, 0x81, 0x0f, 0xfd, 0x69, 0x81, 0x7b, 0x9e, 0x54,
|
0xeb, 0x99, 0x47, 0x93, 0x88, 0xcc, 0x7c, 0xa1, 0x56, 0x4e, 0x30, 0x71, 0x5b, 0xd5, 0xe4, 0x01,
|
||||||
0x3c, 0x9f, 0x97, 0x84, 0xfd, 0x03, 0xb3, 0x07, 0xd0, 0x9d, 0x89, 0xf8, 0x3b, 0xe5, 0xc6, 0xea,
|
0xd0, 0x36, 0x80, 0x86, 0x64, 0x9c, 0xea, 0x49, 0x96, 0xaa, 0x8c, 0x39, 0x15, 0xe7, 0x28, 0xbe,
|
||||||
0xf3, 0x76, 0xab, 0x27, 0x8a, 0x83, 0x0d, 0x77, 0x30, 0x81, 0xae, 0x46, 0xd0, 0x2b, 0xf0, 0x63,
|
0x5f, 0xeb, 0xd5, 0x6e, 0x3e, 0x47, 0xae, 0xb8, 0xd4, 0xe7, 0x74, 0xa1, 0x39, 0x5d, 0xb2, 0x55,
|
||||||
0xc1, 0x44, 0x4a, 0x78, 0x72, 0x7b, 0xdf, 0xc5, 0x93, 0x06, 0xd7, 0x4e, 0x76, 0xc0, 0x13, 0x45,
|
0x42, 0x2e, 0x6f, 0xb8, 0xc5, 0x2f, 0x06, 0x58, 0x27, 0x61, 0xc6, 0xe2, 0x20, 0xf5, 0xe8, 0x3f,
|
||||||
0x41, 0xcb, 0x68, 0x96, 0x8b, 0xec, 0xc6, 0x58, 0x01, 0x05, 0x9d, 0x48, 0x64, 0xf0, 0x67, 0x0d,
|
0x10, 0xbb, 0x07, 0x8d, 0x39, 0xf7, 0x3f, 0x12, 0xa6, 0xa5, 0xde, 0xab, 0x96, 0x7a, 0x24, 0x31,
|
||||||
0xba, 0xa1, 0xca, 0x18, 0x3a, 0x04, 0x27, 0x95, 0x31, 0x0a, 0x2c, 0xe5, 0x6a, 0xa7, 0xdd, 0xd5,
|
0x58, 0x63, 0x9d, 0x6f, 0x06, 0x34, 0x54, 0x09, 0x3d, 0x84, 0x8e, 0xcf, 0x29, 0x8f, 0x3c, 0x16,
|
||||||
0x2a, 0x69, 0x58, 0xb3, 0xd1, 0x1b, 0x70, 0xe6, 0x32, 0x46, 0x6a, 0xb8, 0xb7, 0xff, 0xac, 0x5d,
|
0x5e, 0x5d, 0x97, 0x71, 0xa7, 0xac, 0x2b, 0x29, 0x5d, 0x68, 0xf3, 0x24, 0x21, 0xe9, 0x6c, 0x1e,
|
||||||
0xa6, 0x92, 0x86, 0x35, 0x13, 0xbd, 0x85, 0x5e, 0xac, 0xa3, 0x15, 0x74, 0x94, 0x68, 0xbb, 0x5d,
|
0xf3, 0xe5, 0xa5, 0xd6, 0x02, 0xb2, 0x74, 0x24, 0x2a, 0xd7, 0x1c, 0x50, 0xfb, 0x43, 0x07, 0x7c,
|
||||||
0x64, 0xf2, 0x87, 0x6b, 0xb6, 0x14, 0x56, 0x3a, 0x33, 0x81, 0xfd, 0x98, 0xd0, 0x04, 0x0b, 0xd7,
|
0x37, 0xa0, 0x95, 0x97, 0xd1, 0x3e, 0xd4, 0x23, 0xe1, 0x60, 0xdb, 0x90, 0x87, 0xea, 0x56, 0x4f,
|
||||||
0x6c, 0x29, 0x14, 0xfa, 0x8e, 0x03, 0xe7, 0x31, 0xa1, 0x09, 0x02, 0xae, 0xd9, 0xe8, 0x03, 0xb8,
|
0x29, 0x4c, 0x8e, 0x15, 0xba, 0xda, 0x1d, 0xe8, 0x29, 0x58, 0x45, 0x42, 0xb4, 0xac, 0x2d, 0x57,
|
||||||
0x8b, 0xfa, 0xea, 0x83, 0x9e, 0x92, 0x3e, 0x70, 0x30, 0xab, 0x84, 0xe0, 0x46, 0x21, 0xc3, 0xc2,
|
0x65, 0xc8, 0xcd, 0x33, 0xe4, 0x4e, 0x72, 0x04, 0x2e, 0xc1, 0xce, 0xcf, 0x35, 0x68, 0x8c, 0x64,
|
||||||
0x13, 0x46, 0x2b, 0x4e, 0x58, 0x11, 0xb1, 0x2a, 0xe8, 0xf6, 0xad, 0xdd, 0x0e, 0xf6, 0x56, 0x58,
|
0x22, 0xff, 0x56, 0xd1, 0x63, 0xa8, 0x07, 0x22, 0x53, 0x3a, 0x10, 0x77, 0xab, 0x69, 0x32, 0x76,
|
||||||
0x58, 0x0d, 0x7e, 0x5b, 0xb0, 0xa1, 0x6f, 0xe0, 0x13, 0x61, 0x49, 0xba, 0x6c, 0xfd, 0x83, 0x11,
|
0x58, 0x21, 0xd1, 0x13, 0x68, 0xfa, 0x2a, 0x67, 0x5a, 0xec, 0x76, 0x35, 0x49, 0x87, 0x11, 0xe7,
|
||||||
0xd8, 0x0b, 0x9a, 0x16, 0xe6, 0x07, 0x56, 0x35, 0x3a, 0x00, 0x5b, 0x7a, 0x54, 0x47, 0xf8, 0xff,
|
0x68, 0x41, 0xcc, 0x54, 0x08, 0x6c, 0xf3, 0x36, 0xa2, 0x4e, 0x0a, 0xce, 0xd1, 0x82, 0xc8, 0x95,
|
||||||
0x7e, 0xbf, 0xdd, 0x95, 0x9e, 0x3c, 0x59, 0x16, 0x14, 0x2b, 0xb6, 0x0c, 0x9f, 0x7e, 0x53, 0x02,
|
0x69, 0xed, 0xfa, 0x6d, 0x44, 0xed, 0x6c, 0x9c, 0xa3, 0xd1, 0x0b, 0xb0, 0x16, 0xb9, 0x97, 0xed,
|
||||||
0xfb, 0xb1, 0xf0, 0x69, 0x1d, 0x36, 0xdc, 0xd7, 0x21, 0x40, 0x33, 0x09, 0x79, 0xd0, 0x3b, 0xbd,
|
0xa6, 0xa4, 0xde, 0x70, 0x31, 0x85, 0xe5, 0x71, 0xc9, 0x10, 0xee, 0x2f, 0xee, 0x7a, 0x46, 0x33,
|
||||||
0x9c, 0x5e, 0x4c, 0xce, 0xb0, 0xff, 0x1f, 0x72, 0xc1, 0x19, 0x1d, 0x4f, 0x47, 0x67, 0xbe, 0x25,
|
0xbb, 0xd1, 0x33, 0x76, 0x6a, 0xb8, 0x5d, 0xd4, 0x46, 0x99, 0xf3, 0xc3, 0x80, 0x75, 0xf5, 0x07,
|
||||||
0xf1, 0xf1, 0x34, 0x0c, 0x8f, 0xf1, 0xb5, 0xbf, 0x26, 0x17, 0xd3, 0x8b, 0xc9, 0xf5, 0xd5, 0xd9,
|
0x5e, 0x79, 0x34, 0x8c, 0x56, 0x95, 0xcf, 0x19, 0x02, 0x73, 0x41, 0xa2, 0x44, 0xbf, 0x66, 0x72,
|
||||||
0x47, 0xbf, 0x83, 0x36, 0xc1, 0x3d, 0xff, 0x3c, 0x9e, 0x5c, 0x8e, 0xf0, 0x71, 0xe8, 0xdb, 0x27,
|
0x8d, 0xf6, 0xc0, 0x14, 0x1a, 0xe5, 0x15, 0xfe, 0xbf, 0xdb, 0xab, 0x56, 0xa5, 0x26, 0x4f, 0x56,
|
||||||
0x18, 0x5a, 0x5f, 0xb2, 0x6f, 0x47, 0xf3, 0x84, 0x2f, 0xc4, 0x6c, 0x18, 0xe7, 0x6c, 0xaf, 0xe9,
|
0x09, 0xc1, 0x12, 0x2d, 0xd2, 0xa4, 0x5e, 0x60, 0xdb, 0xbc, 0x2d, 0x4d, 0x8a, 0x87, 0x35, 0xf6,
|
||||||
0xee, 0xe9, 0x6e, 0xc4, 0xf2, 0x1b, 0x9a, 0xee, 0xcd, 0xf3, 0x77, 0x49, 0x1e, 0x35, 0xdd, 0x48,
|
0xd1, 0x08, 0xa0, 0x9c, 0x84, 0xda, 0xd0, 0x3c, 0x3e, 0x9b, 0x9e, 0x4e, 0x06, 0xb8, 0xf3, 0x1f,
|
||||||
0x77, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x45, 0x21, 0x7f, 0x64, 0x2b, 0x05, 0x00, 0x00,
|
0xb2, 0xa0, 0x3e, 0x3c, 0x9c, 0x0e, 0x07, 0x1d, 0x43, 0xd4, 0xc7, 0xd3, 0xd1, 0xe8, 0x10, 0x5f,
|
||||||
|
0x74, 0xd6, 0xc4, 0x66, 0x7a, 0x3a, 0xb9, 0x38, 0x1f, 0xbc, 0xec, 0xd4, 0xd0, 0x06, 0x58, 0x27,
|
||||||
|
0xaf, 0xc7, 0x93, 0xb3, 0x21, 0x3e, 0x1c, 0x75, 0xcc, 0x23, 0x0c, 0x95, 0xef, 0xfe, 0xbb, 0x83,
|
||||||
|
0x20, 0x64, 0x0b, 0x3e, 0x77, 0xfd, 0x98, 0xf6, 0xcb, 0x6e, 0x5f, 0x75, 0x67, 0x34, 0xbe, 0x24,
|
||||||
|
0x51, 0x3f, 0x88, 0x9f, 0x85, 0xf1, 0xac, 0xec, 0xce, 0x54, 0xf7, 0x57, 0x00, 0x00, 0x00, 0xff,
|
||||||
|
0xff, 0xd0, 0x84, 0x91, 0x73, 0x59, 0x06, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
112
vendor/github.com/prometheus/common/expfmt/encode.go
generated
vendored
112
vendor/github.com/prometheus/common/expfmt/encode.go
generated
vendored
|
|
@ -30,17 +30,38 @@ type Encoder interface {
|
||||||
Encode(*dto.MetricFamily) error
|
Encode(*dto.MetricFamily) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type encoder func(*dto.MetricFamily) error
|
// Closer is implemented by Encoders that need to be closed to finalize
|
||||||
|
// encoding. (For example, OpenMetrics needs a final `# EOF` line.)
|
||||||
func (e encoder) Encode(v *dto.MetricFamily) error {
|
//
|
||||||
return e(v)
|
// Note that all Encoder implementations returned from this package implement
|
||||||
|
// Closer, too, even if the Close call is a no-op. This happens in preparation
|
||||||
|
// for adding a Close method to the Encoder interface directly in a (mildly
|
||||||
|
// breaking) release in the future.
|
||||||
|
type Closer interface {
|
||||||
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Negotiate returns the Content-Type based on the given Accept header.
|
type encoderCloser struct {
|
||||||
// If no appropriate accepted type is found, FmtText is returned.
|
encode func(*dto.MetricFamily) error
|
||||||
|
close func() error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ec encoderCloser) Encode(v *dto.MetricFamily) error {
|
||||||
|
return ec.encode(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ec encoderCloser) Close() error {
|
||||||
|
return ec.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Negotiate returns the Content-Type based on the given Accept header. If no
|
||||||
|
// appropriate accepted type is found, FmtText is returned (which is the
|
||||||
|
// Prometheus text format). This function will never negotiate FmtOpenMetrics,
|
||||||
|
// as the support is still experimental. To include the option to negotiate
|
||||||
|
// FmtOpenMetrics, use NegotiateOpenMetrics.
|
||||||
func Negotiate(h http.Header) Format {
|
func Negotiate(h http.Header) Format {
|
||||||
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
||||||
// Check for protocol buffer
|
ver := ac.Params["version"]
|
||||||
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
||||||
switch ac.Params["encoding"] {
|
switch ac.Params["encoding"] {
|
||||||
case "delimited":
|
case "delimited":
|
||||||
|
|
@ -51,8 +72,6 @@ func Negotiate(h http.Header) Format {
|
||||||
return FmtProtoCompact
|
return FmtProtoCompact
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check for text format.
|
|
||||||
ver := ac.Params["version"]
|
|
||||||
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
||||||
return FmtText
|
return FmtText
|
||||||
}
|
}
|
||||||
|
|
@ -60,29 +79,84 @@ func Negotiate(h http.Header) Format {
|
||||||
return FmtText
|
return FmtText
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEncoder returns a new encoder based on content type negotiation.
|
// NegotiateIncludingOpenMetrics works like Negotiate but includes
|
||||||
|
// FmtOpenMetrics as an option for the result. Note that this function is
|
||||||
|
// temporary and will disappear once FmtOpenMetrics is fully supported and as
|
||||||
|
// such may be negotiated by the normal Negotiate function.
|
||||||
|
func NegotiateIncludingOpenMetrics(h http.Header) Format {
|
||||||
|
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
||||||
|
ver := ac.Params["version"]
|
||||||
|
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
||||||
|
switch ac.Params["encoding"] {
|
||||||
|
case "delimited":
|
||||||
|
return FmtProtoDelim
|
||||||
|
case "text":
|
||||||
|
return FmtProtoText
|
||||||
|
case "compact-text":
|
||||||
|
return FmtProtoCompact
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
||||||
|
return FmtText
|
||||||
|
}
|
||||||
|
if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion || ver == "") {
|
||||||
|
return FmtOpenMetrics
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FmtText
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEncoder returns a new encoder based on content type negotiation. All
|
||||||
|
// Encoder implementations returned by NewEncoder also implement Closer, and
|
||||||
|
// callers should always call the Close method. It is currently only required
|
||||||
|
// for FmtOpenMetrics, but a future (breaking) release will add the Close method
|
||||||
|
// to the Encoder interface directly. The current version of the Encoder
|
||||||
|
// interface is kept for backwards compatibility.
|
||||||
func NewEncoder(w io.Writer, format Format) Encoder {
|
func NewEncoder(w io.Writer, format Format) Encoder {
|
||||||
switch format {
|
switch format {
|
||||||
case FmtProtoDelim:
|
case FmtProtoDelim:
|
||||||
return encoder(func(v *dto.MetricFamily) error {
|
return encoderCloser{
|
||||||
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := pbutil.WriteDelimited(w, v)
|
_, err := pbutil.WriteDelimited(w, v)
|
||||||
return err
|
return err
|
||||||
})
|
},
|
||||||
|
close: func() error { return nil },
|
||||||
|
}
|
||||||
case FmtProtoCompact:
|
case FmtProtoCompact:
|
||||||
return encoder(func(v *dto.MetricFamily) error {
|
return encoderCloser{
|
||||||
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := fmt.Fprintln(w, v.String())
|
_, err := fmt.Fprintln(w, v.String())
|
||||||
return err
|
return err
|
||||||
})
|
},
|
||||||
|
close: func() error { return nil },
|
||||||
|
}
|
||||||
case FmtProtoText:
|
case FmtProtoText:
|
||||||
return encoder(func(v *dto.MetricFamily) error {
|
return encoderCloser{
|
||||||
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := fmt.Fprintln(w, proto.MarshalTextString(v))
|
_, err := fmt.Fprintln(w, proto.MarshalTextString(v))
|
||||||
return err
|
return err
|
||||||
})
|
},
|
||||||
|
close: func() error { return nil },
|
||||||
|
}
|
||||||
case FmtText:
|
case FmtText:
|
||||||
return encoder(func(v *dto.MetricFamily) error {
|
return encoderCloser{
|
||||||
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := MetricFamilyToText(w, v)
|
_, err := MetricFamilyToText(w, v)
|
||||||
return err
|
return err
|
||||||
})
|
},
|
||||||
|
close: func() error { return nil },
|
||||||
}
|
}
|
||||||
panic("expfmt.NewEncoder: unknown format")
|
case FmtOpenMetrics:
|
||||||
|
return encoderCloser{
|
||||||
|
encode: func(v *dto.MetricFamily) error {
|
||||||
|
_, err := MetricFamilyToOpenMetrics(w, v)
|
||||||
|
return err
|
||||||
|
},
|
||||||
|
close: func() error {
|
||||||
|
_, err := FinalizeOpenMetrics(w)
|
||||||
|
return err
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
panic(fmt.Errorf("expfmt.NewEncoder: unknown format %q", format))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
3
vendor/github.com/prometheus/common/expfmt/expfmt.go
generated
vendored
3
vendor/github.com/prometheus/common/expfmt/expfmt.go
generated
vendored
|
|
@ -23,6 +23,8 @@ const (
|
||||||
ProtoType = `application/vnd.google.protobuf`
|
ProtoType = `application/vnd.google.protobuf`
|
||||||
ProtoProtocol = `io.prometheus.client.MetricFamily`
|
ProtoProtocol = `io.prometheus.client.MetricFamily`
|
||||||
ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";"
|
ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";"
|
||||||
|
OpenMetricsType = `application/openmetrics-text`
|
||||||
|
OpenMetricsVersion = "0.0.1"
|
||||||
|
|
||||||
// The Content-Type values for the different wire protocols.
|
// The Content-Type values for the different wire protocols.
|
||||||
FmtUnknown Format = `<unknown>`
|
FmtUnknown Format = `<unknown>`
|
||||||
|
|
@ -30,6 +32,7 @@ const (
|
||||||
FmtProtoDelim Format = ProtoFmt + ` encoding=delimited`
|
FmtProtoDelim Format = ProtoFmt + ` encoding=delimited`
|
||||||
FmtProtoText Format = ProtoFmt + ` encoding=text`
|
FmtProtoText Format = ProtoFmt + ` encoding=text`
|
||||||
FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text`
|
FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text`
|
||||||
|
FmtOpenMetrics Format = OpenMetricsType + `; version=` + OpenMetricsVersion + `; charset=utf-8`
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
||||||
527
vendor/github.com/prometheus/common/expfmt/openmetrics_create.go
generated
vendored
Normal file
527
vendor/github.com/prometheus/common/expfmt/openmetrics_create.go
generated
vendored
Normal file
|
|
@ -0,0 +1,527 @@
|
||||||
|
// Copyright 2020 The Prometheus 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.
|
||||||
|
|
||||||
|
package expfmt
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"math"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/ptypes"
|
||||||
|
"github.com/prometheus/common/model"
|
||||||
|
|
||||||
|
dto "github.com/prometheus/client_model/go"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MetricFamilyToOpenMetrics converts a MetricFamily proto message into the
|
||||||
|
// OpenMetrics text format and writes the resulting lines to 'out'. It returns
|
||||||
|
// the number of bytes written and any error encountered. The output will have
|
||||||
|
// the same order as the input, no further sorting is performed. Furthermore,
|
||||||
|
// this function assumes the input is already sanitized and does not perform any
|
||||||
|
// sanity checks. If the input contains duplicate metrics or invalid metric or
|
||||||
|
// label names, the conversion will result in invalid text format output.
|
||||||
|
//
|
||||||
|
// This function fulfills the type 'expfmt.encoder'.
|
||||||
|
//
|
||||||
|
// Note that OpenMetrics requires a final `# EOF` line. Since this function acts
|
||||||
|
// on individual metric families, it is the responsibility of the caller to
|
||||||
|
// append this line to 'out' once all metric families have been written.
|
||||||
|
// Conveniently, this can be done by calling FinalizeOpenMetrics.
|
||||||
|
//
|
||||||
|
// The output should be fully OpenMetrics compliant. However, there are a few
|
||||||
|
// missing features and peculiarities to avoid complications when switching from
|
||||||
|
// Prometheus to OpenMetrics or vice versa:
|
||||||
|
//
|
||||||
|
// - Counters are expected to have the `_total` suffix in their metric name. In
|
||||||
|
// the output, the suffix will be truncated from the `# TYPE` and `# HELP`
|
||||||
|
// line. A counter with a missing `_total` suffix is not an error. However,
|
||||||
|
// its type will be set to `unknown` in that case to avoid invalid OpenMetrics
|
||||||
|
// output.
|
||||||
|
//
|
||||||
|
// - No support for the following (optional) features: `# UNIT` line, `_created`
|
||||||
|
// line, info type, stateset type, gaugehistogram type.
|
||||||
|
//
|
||||||
|
// - The size of exemplar labels is not checked (i.e. it's possible to create
|
||||||
|
// exemplars that are larger than allowed by the OpenMetrics specification).
|
||||||
|
//
|
||||||
|
// - The value of Counters is not checked. (OpenMetrics doesn't allow counters
|
||||||
|
// with a `NaN` value.)
|
||||||
|
func MetricFamilyToOpenMetrics(out io.Writer, in *dto.MetricFamily) (written int, err error) {
|
||||||
|
name := in.GetName()
|
||||||
|
if name == "" {
|
||||||
|
return 0, fmt.Errorf("MetricFamily has no name: %s", in)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try the interface upgrade. If it doesn't work, we'll use a
|
||||||
|
// bufio.Writer from the sync.Pool.
|
||||||
|
w, ok := out.(enhancedWriter)
|
||||||
|
if !ok {
|
||||||
|
b := bufPool.Get().(*bufio.Writer)
|
||||||
|
b.Reset(out)
|
||||||
|
w = b
|
||||||
|
defer func() {
|
||||||
|
bErr := b.Flush()
|
||||||
|
if err == nil {
|
||||||
|
err = bErr
|
||||||
|
}
|
||||||
|
bufPool.Put(b)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
n int
|
||||||
|
metricType = in.GetType()
|
||||||
|
shortName = name
|
||||||
|
)
|
||||||
|
if metricType == dto.MetricType_COUNTER && strings.HasSuffix(shortName, "_total") {
|
||||||
|
shortName = name[:len(name)-6]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comments, first HELP, then TYPE.
|
||||||
|
if in.Help != nil {
|
||||||
|
n, err = w.WriteString("# HELP ")
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
n, err = w.WriteString(shortName)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = w.WriteByte(' ')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
n, err = writeEscapedString(w, *in.Help, true)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = w.WriteByte('\n')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
n, err = w.WriteString("# TYPE ")
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
n, err = w.WriteString(shortName)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch metricType {
|
||||||
|
case dto.MetricType_COUNTER:
|
||||||
|
if strings.HasSuffix(name, "_total") {
|
||||||
|
n, err = w.WriteString(" counter\n")
|
||||||
|
} else {
|
||||||
|
n, err = w.WriteString(" unknown\n")
|
||||||
|
}
|
||||||
|
case dto.MetricType_GAUGE:
|
||||||
|
n, err = w.WriteString(" gauge\n")
|
||||||
|
case dto.MetricType_SUMMARY:
|
||||||
|
n, err = w.WriteString(" summary\n")
|
||||||
|
case dto.MetricType_UNTYPED:
|
||||||
|
n, err = w.WriteString(" unknown\n")
|
||||||
|
case dto.MetricType_HISTOGRAM:
|
||||||
|
n, err = w.WriteString(" histogram\n")
|
||||||
|
default:
|
||||||
|
return written, fmt.Errorf("unknown metric type %s", metricType.String())
|
||||||
|
}
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finally the samples, one line for each.
|
||||||
|
for _, metric := range in.Metric {
|
||||||
|
switch metricType {
|
||||||
|
case dto.MetricType_COUNTER:
|
||||||
|
if metric.Counter == nil {
|
||||||
|
return written, fmt.Errorf(
|
||||||
|
"expected counter in metric %s %s", name, metric,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
// Note that we have ensured above that either the name
|
||||||
|
// ends on `_total` or that the rendered type is
|
||||||
|
// `unknown`. Therefore, no `_total` must be added here.
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "", metric, "", 0,
|
||||||
|
metric.Counter.GetValue(), 0, false,
|
||||||
|
metric.Counter.Exemplar,
|
||||||
|
)
|
||||||
|
case dto.MetricType_GAUGE:
|
||||||
|
if metric.Gauge == nil {
|
||||||
|
return written, fmt.Errorf(
|
||||||
|
"expected gauge in metric %s %s", name, metric,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "", metric, "", 0,
|
||||||
|
metric.Gauge.GetValue(), 0, false,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
case dto.MetricType_UNTYPED:
|
||||||
|
if metric.Untyped == nil {
|
||||||
|
return written, fmt.Errorf(
|
||||||
|
"expected untyped in metric %s %s", name, metric,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "", metric, "", 0,
|
||||||
|
metric.Untyped.GetValue(), 0, false,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
case dto.MetricType_SUMMARY:
|
||||||
|
if metric.Summary == nil {
|
||||||
|
return written, fmt.Errorf(
|
||||||
|
"expected summary in metric %s %s", name, metric,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
for _, q := range metric.Summary.Quantile {
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "", metric,
|
||||||
|
model.QuantileLabel, q.GetQuantile(),
|
||||||
|
q.GetValue(), 0, false,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "_sum", metric, "", 0,
|
||||||
|
metric.Summary.GetSampleSum(), 0, false,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "_count", metric, "", 0,
|
||||||
|
0, metric.Summary.GetSampleCount(), true,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
case dto.MetricType_HISTOGRAM:
|
||||||
|
if metric.Histogram == nil {
|
||||||
|
return written, fmt.Errorf(
|
||||||
|
"expected histogram in metric %s %s", name, metric,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
infSeen := false
|
||||||
|
for _, b := range metric.Histogram.Bucket {
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "_bucket", metric,
|
||||||
|
model.BucketLabel, b.GetUpperBound(),
|
||||||
|
0, b.GetCumulativeCount(), true,
|
||||||
|
b.Exemplar,
|
||||||
|
)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if math.IsInf(b.GetUpperBound(), +1) {
|
||||||
|
infSeen = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !infSeen {
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "_bucket", metric,
|
||||||
|
model.BucketLabel, math.Inf(+1),
|
||||||
|
0, metric.Histogram.GetSampleCount(), true,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "_sum", metric, "", 0,
|
||||||
|
metric.Histogram.GetSampleSum(), 0, false,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsSample(
|
||||||
|
w, name, "_count", metric, "", 0,
|
||||||
|
0, metric.Histogram.GetSampleCount(), true,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
default:
|
||||||
|
return written, fmt.Errorf(
|
||||||
|
"unexpected type in metric %s %s", name, metric,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// FinalizeOpenMetrics writes the final `# EOF\n` line required by OpenMetrics.
|
||||||
|
func FinalizeOpenMetrics(w io.Writer) (written int, err error) {
|
||||||
|
return w.Write([]byte("# EOF\n"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeOpenMetricsSample writes a single sample in OpenMetrics text format to
|
||||||
|
// w, given the metric name, the metric proto message itself, optionally an
|
||||||
|
// additional label name with a float64 value (use empty string as label name if
|
||||||
|
// not required), the value (optionally as float64 or uint64, determined by
|
||||||
|
// useIntValue), and optionally an exemplar (use nil if not required). The
|
||||||
|
// function returns the number of bytes written and any error encountered.
|
||||||
|
func writeOpenMetricsSample(
|
||||||
|
w enhancedWriter,
|
||||||
|
name, suffix string,
|
||||||
|
metric *dto.Metric,
|
||||||
|
additionalLabelName string, additionalLabelValue float64,
|
||||||
|
floatValue float64, intValue uint64, useIntValue bool,
|
||||||
|
exemplar *dto.Exemplar,
|
||||||
|
) (int, error) {
|
||||||
|
var written int
|
||||||
|
n, err := w.WriteString(name)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
if suffix != "" {
|
||||||
|
n, err = w.WriteString(suffix)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsLabelPairs(
|
||||||
|
w, metric.Label, additionalLabelName, additionalLabelValue,
|
||||||
|
)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
err = w.WriteByte(' ')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
if useIntValue {
|
||||||
|
n, err = writeUint(w, intValue)
|
||||||
|
} else {
|
||||||
|
n, err = writeOpenMetricsFloat(w, floatValue)
|
||||||
|
}
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
if metric.TimestampMs != nil {
|
||||||
|
err = w.WriteByte(' ')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
// TODO(beorn7): Format this directly without converting to a float first.
|
||||||
|
n, err = writeOpenMetricsFloat(w, float64(*metric.TimestampMs)/1000)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if exemplar != nil {
|
||||||
|
n, err = writeExemplar(w, exemplar)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = w.WriteByte('\n')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
return written, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeOpenMetricsLabelPairs works like writeOpenMetrics but formats the float
|
||||||
|
// in OpenMetrics style.
|
||||||
|
func writeOpenMetricsLabelPairs(
|
||||||
|
w enhancedWriter,
|
||||||
|
in []*dto.LabelPair,
|
||||||
|
additionalLabelName string, additionalLabelValue float64,
|
||||||
|
) (int, error) {
|
||||||
|
if len(in) == 0 && additionalLabelName == "" {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
var (
|
||||||
|
written int
|
||||||
|
separator byte = '{'
|
||||||
|
)
|
||||||
|
for _, lp := range in {
|
||||||
|
err := w.WriteByte(separator)
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
n, err := w.WriteString(lp.GetName())
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
n, err = w.WriteString(`="`)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
n, err = writeEscapedString(w, lp.GetValue(), true)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
err = w.WriteByte('"')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
separator = ','
|
||||||
|
}
|
||||||
|
if additionalLabelName != "" {
|
||||||
|
err := w.WriteByte(separator)
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
n, err := w.WriteString(additionalLabelName)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
n, err = w.WriteString(`="`)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsFloat(w, additionalLabelValue)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
err = w.WriteByte('"')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err := w.WriteByte('}')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
return written, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeExemplar writes the provided exemplar in OpenMetrics format to w. The
|
||||||
|
// function returns the number of bytes written and any error encountered.
|
||||||
|
func writeExemplar(w enhancedWriter, e *dto.Exemplar) (int, error) {
|
||||||
|
written := 0
|
||||||
|
n, err := w.WriteString(" # ")
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsLabelPairs(w, e.Label, "", 0)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
err = w.WriteByte(' ')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
n, err = writeOpenMetricsFloat(w, e.GetValue())
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
if e.Timestamp != nil {
|
||||||
|
err = w.WriteByte(' ')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
ts, err := ptypes.Timestamp((*e).Timestamp)
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
// TODO(beorn7): Format this directly from components of ts to
|
||||||
|
// avoid overflow/underflow and precision issues of the float
|
||||||
|
// conversion.
|
||||||
|
n, err = writeOpenMetricsFloat(w, float64(ts.UnixNano())/1e9)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return written, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeOpenMetricsFloat works like writeFloat but appends ".0" if the resulting
|
||||||
|
// number would otherwise contain neither a "." nor an "e".
|
||||||
|
func writeOpenMetricsFloat(w enhancedWriter, f float64) (int, error) {
|
||||||
|
switch {
|
||||||
|
case f == 1:
|
||||||
|
return w.WriteString("1.0")
|
||||||
|
case f == 0:
|
||||||
|
return w.WriteString("0.0")
|
||||||
|
case f == -1:
|
||||||
|
return w.WriteString("-1.0")
|
||||||
|
case math.IsNaN(f):
|
||||||
|
return w.WriteString("NaN")
|
||||||
|
case math.IsInf(f, +1):
|
||||||
|
return w.WriteString("+Inf")
|
||||||
|
case math.IsInf(f, -1):
|
||||||
|
return w.WriteString("-Inf")
|
||||||
|
default:
|
||||||
|
bp := numBufPool.Get().(*[]byte)
|
||||||
|
*bp = strconv.AppendFloat((*bp)[:0], f, 'g', -1, 64)
|
||||||
|
if !bytes.ContainsAny(*bp, "e.") {
|
||||||
|
*bp = append(*bp, '.', '0')
|
||||||
|
}
|
||||||
|
written, err := w.Write(*bp)
|
||||||
|
numBufPool.Put(bp)
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeUint is like writeInt just for uint64.
|
||||||
|
func writeUint(w enhancedWriter, u uint64) (int, error) {
|
||||||
|
bp := numBufPool.Get().(*[]byte)
|
||||||
|
*bp = strconv.AppendUint((*bp)[:0], u, 10)
|
||||||
|
written, err := w.Write(*bp)
|
||||||
|
numBufPool.Put(bp)
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
21
vendor/github.com/prometheus/common/expfmt/text_create.go
generated
vendored
21
vendor/github.com/prometheus/common/expfmt/text_create.go
generated
vendored
|
|
@ -14,9 +14,10 @@
|
||||||
package expfmt
|
package expfmt
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"math"
|
"math"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
@ -27,7 +28,7 @@ import (
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
)
|
)
|
||||||
|
|
||||||
// enhancedWriter has all the enhanced write functions needed here. bytes.Buffer
|
// enhancedWriter has all the enhanced write functions needed here. bufio.Writer
|
||||||
// implements it.
|
// implements it.
|
||||||
type enhancedWriter interface {
|
type enhancedWriter interface {
|
||||||
io.Writer
|
io.Writer
|
||||||
|
|
@ -37,14 +38,13 @@ type enhancedWriter interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
initialBufSize = 512
|
|
||||||
initialNumBufSize = 24
|
initialNumBufSize = 24
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
bufPool = sync.Pool{
|
bufPool = sync.Pool{
|
||||||
New: func() interface{} {
|
New: func() interface{} {
|
||||||
return bytes.NewBuffer(make([]byte, 0, initialBufSize))
|
return bufio.NewWriter(ioutil.Discard)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
numBufPool = sync.Pool{
|
numBufPool = sync.Pool{
|
||||||
|
|
@ -75,16 +75,14 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (written int, err e
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try the interface upgrade. If it doesn't work, we'll use a
|
// Try the interface upgrade. If it doesn't work, we'll use a
|
||||||
// bytes.Buffer from the sync.Pool and write out its content to out in a
|
// bufio.Writer from the sync.Pool.
|
||||||
// single go in the end.
|
|
||||||
w, ok := out.(enhancedWriter)
|
w, ok := out.(enhancedWriter)
|
||||||
if !ok {
|
if !ok {
|
||||||
b := bufPool.Get().(*bytes.Buffer)
|
b := bufPool.Get().(*bufio.Writer)
|
||||||
b.Reset()
|
b.Reset(out)
|
||||||
w = b
|
w = b
|
||||||
defer func() {
|
defer func() {
|
||||||
bWritten, bErr := out.Write(b.Bytes())
|
bErr := b.Flush()
|
||||||
written = bWritten
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = bErr
|
err = bErr
|
||||||
}
|
}
|
||||||
|
|
@ -425,9 +423,8 @@ var (
|
||||||
func writeEscapedString(w enhancedWriter, v string, includeDoubleQuote bool) (int, error) {
|
func writeEscapedString(w enhancedWriter, v string, includeDoubleQuote bool) (int, error) {
|
||||||
if includeDoubleQuote {
|
if includeDoubleQuote {
|
||||||
return quotedEscaper.WriteString(w, v)
|
return quotedEscaper.WriteString(w, v)
|
||||||
} else {
|
|
||||||
return escaper.WriteString(w, v)
|
|
||||||
}
|
}
|
||||||
|
return escaper.WriteString(w, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// writeFloat is equivalent to fmt.Fprint with a float64 argument but hardcodes
|
// writeFloat is equivalent to fmt.Fprint with a float64 argument but hardcodes
|
||||||
|
|
|
||||||
13
vendor/github.com/prometheus/common/expfmt/text_parse.go
generated
vendored
13
vendor/github.com/prometheus/common/expfmt/text_parse.go
generated
vendored
|
|
@ -325,7 +325,7 @@ func (p *TextParser) startLabelValue() stateFn {
|
||||||
// - Other labels have to be added to currentLabels for signature calculation.
|
// - Other labels have to be added to currentLabels for signature calculation.
|
||||||
if p.currentMF.GetType() == dto.MetricType_SUMMARY {
|
if p.currentMF.GetType() == dto.MetricType_SUMMARY {
|
||||||
if p.currentLabelPair.GetName() == model.QuantileLabel {
|
if p.currentLabelPair.GetName() == model.QuantileLabel {
|
||||||
if p.currentQuantile, p.err = strconv.ParseFloat(p.currentLabelPair.GetValue(), 64); p.err != nil {
|
if p.currentQuantile, p.err = parseFloat(p.currentLabelPair.GetValue()); p.err != nil {
|
||||||
// Create a more helpful error message.
|
// Create a more helpful error message.
|
||||||
p.parseError(fmt.Sprintf("expected float as value for 'quantile' label, got %q", p.currentLabelPair.GetValue()))
|
p.parseError(fmt.Sprintf("expected float as value for 'quantile' label, got %q", p.currentLabelPair.GetValue()))
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -337,7 +337,7 @@ func (p *TextParser) startLabelValue() stateFn {
|
||||||
// Similar special treatment of histograms.
|
// Similar special treatment of histograms.
|
||||||
if p.currentMF.GetType() == dto.MetricType_HISTOGRAM {
|
if p.currentMF.GetType() == dto.MetricType_HISTOGRAM {
|
||||||
if p.currentLabelPair.GetName() == model.BucketLabel {
|
if p.currentLabelPair.GetName() == model.BucketLabel {
|
||||||
if p.currentBucket, p.err = strconv.ParseFloat(p.currentLabelPair.GetValue(), 64); p.err != nil {
|
if p.currentBucket, p.err = parseFloat(p.currentLabelPair.GetValue()); p.err != nil {
|
||||||
// Create a more helpful error message.
|
// Create a more helpful error message.
|
||||||
p.parseError(fmt.Sprintf("expected float as value for 'le' label, got %q", p.currentLabelPair.GetValue()))
|
p.parseError(fmt.Sprintf("expected float as value for 'le' label, got %q", p.currentLabelPair.GetValue()))
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -392,7 +392,7 @@ func (p *TextParser) readingValue() stateFn {
|
||||||
if p.readTokenUntilWhitespace(); p.err != nil {
|
if p.readTokenUntilWhitespace(); p.err != nil {
|
||||||
return nil // Unexpected end of input.
|
return nil // Unexpected end of input.
|
||||||
}
|
}
|
||||||
value, err := strconv.ParseFloat(p.currentToken.String(), 64)
|
value, err := parseFloat(p.currentToken.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Create a more helpful error message.
|
// Create a more helpful error message.
|
||||||
p.parseError(fmt.Sprintf("expected float as value, got %q", p.currentToken.String()))
|
p.parseError(fmt.Sprintf("expected float as value, got %q", p.currentToken.String()))
|
||||||
|
|
@ -755,3 +755,10 @@ func histogramMetricName(name string) string {
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseFloat(s string) (float64, error) {
|
||||||
|
if strings.ContainsAny(s, "pP_") {
|
||||||
|
return 0, fmt.Errorf("unsupported character in float")
|
||||||
|
}
|
||||||
|
return strconv.ParseFloat(s, 64)
|
||||||
|
}
|
||||||
|
|
|
||||||
4
vendor/github.com/prometheus/common/model/time.go
generated
vendored
4
vendor/github.com/prometheus/common/model/time.go
generated
vendored
|
|
@ -186,6 +186,10 @@ var durationRE = regexp.MustCompile("^([0-9]+)(y|w|d|h|m|s|ms)$")
|
||||||
// ParseDuration parses a string into a time.Duration, assuming that a year
|
// ParseDuration parses a string into a time.Duration, assuming that a year
|
||||||
// always has 365d, a week always has 7d, and a day always has 24h.
|
// always has 365d, a week always has 7d, and a day always has 24h.
|
||||||
func ParseDuration(durationStr string) (Duration, error) {
|
func ParseDuration(durationStr string) (Duration, error) {
|
||||||
|
// Allow 0 without a unit.
|
||||||
|
if durationStr == "0" {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
matches := durationRE.FindStringSubmatch(durationStr)
|
matches := durationRE.FindStringSubmatch(durationStr)
|
||||||
if len(matches) != 3 {
|
if len(matches) != 3 {
|
||||||
return 0, fmt.Errorf("not a valid duration string: %q", durationStr)
|
return 0, fmt.Errorf("not a valid duration string: %q", durationStr)
|
||||||
|
|
|
||||||
5
vendor/github.com/spf13/cobra/.gitignore
generated
vendored
5
vendor/github.com/spf13/cobra/.gitignore
generated
vendored
|
|
@ -32,7 +32,8 @@ Session.vim
|
||||||
tags
|
tags
|
||||||
|
|
||||||
*.exe
|
*.exe
|
||||||
|
|
||||||
cobra.test
|
cobra.test
|
||||||
|
bin
|
||||||
|
|
||||||
.idea/*
|
.idea/
|
||||||
|
*.iml
|
||||||
|
|
|
||||||
26
vendor/github.com/spf13/cobra/.travis.yml
generated
vendored
26
vendor/github.com/spf13/cobra/.travis.yml
generated
vendored
|
|
@ -3,29 +3,27 @@ language: go
|
||||||
stages:
|
stages:
|
||||||
- diff
|
- diff
|
||||||
- test
|
- test
|
||||||
|
- build
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- 1.10.x
|
|
||||||
- 1.11.x
|
|
||||||
- 1.12.x
|
- 1.12.x
|
||||||
|
- 1.13.x
|
||||||
- tip
|
- tip
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- go get -u github.com/kyoh86/richgo
|
||||||
|
- go get -u github.com/mitchellh/gox
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- go: tip
|
- go: tip
|
||||||
include:
|
include:
|
||||||
- stage: diff
|
- stage: diff
|
||||||
go: 1.12.x
|
go: 1.13.x
|
||||||
script: diff -u <(echo -n) <(gofmt -d -s .)
|
script: make fmt
|
||||||
|
- stage: build
|
||||||
|
go: 1.13.x
|
||||||
|
script: make cobra_generator
|
||||||
|
|
||||||
before_install:
|
|
||||||
- mkdir -p bin
|
|
||||||
- curl -Lso bin/shellcheck https://github.com/caarlos0/shellcheck-docker/releases/download/v0.6.0/shellcheck
|
|
||||||
- chmod +x bin/shellcheck
|
|
||||||
- go get -u github.com/kyoh86/richgo
|
|
||||||
script:
|
script:
|
||||||
- PATH=$PATH:$PWD/bin richgo test -v ./...
|
- make test
|
||||||
- go build
|
|
||||||
- if [ -z $NOVET ]; then
|
|
||||||
diff -u <(echo -n) <(go vet . 2>&1 | grep -vE 'ExampleCommand|bash_completions.*Fprint');
|
|
||||||
fi
|
|
||||||
|
|
|
||||||
36
vendor/github.com/spf13/cobra/Makefile
generated
vendored
Normal file
36
vendor/github.com/spf13/cobra/Makefile
generated
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
BIN="./bin"
|
||||||
|
SRC=$(shell find . -name "*.go")
|
||||||
|
|
||||||
|
ifeq (, $(shell which richgo))
|
||||||
|
$(warning "could not find richgo in $(PATH), run: go get github.com/kyoh86/richgo")
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: fmt vet test cobra_generator install_deps clean
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
all: fmt vet test cobra_generator
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
$(info ******************** checking formatting ********************)
|
||||||
|
@test -z $(shell gofmt -l $(SRC)) || (gofmt -d $(SRC); exit 1)
|
||||||
|
|
||||||
|
test: install_deps vet
|
||||||
|
$(info ******************** running tests ********************)
|
||||||
|
richgo test -v ./...
|
||||||
|
|
||||||
|
cobra_generator: install_deps
|
||||||
|
$(info ******************** building generator ********************)
|
||||||
|
mkdir -p $(BIN)
|
||||||
|
make -C cobra all
|
||||||
|
|
||||||
|
install_deps:
|
||||||
|
$(info ******************** downloading dependencies ********************)
|
||||||
|
go get -v ./...
|
||||||
|
|
||||||
|
vet:
|
||||||
|
$(info ******************** vetting ********************)
|
||||||
|
go vet ./...
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BIN)
|
||||||
55
vendor/github.com/spf13/cobra/README.md
generated
vendored
55
vendor/github.com/spf13/cobra/README.md
generated
vendored
|
|
@ -24,11 +24,13 @@ Many of the most widely used Go projects are built using Cobra, such as:
|
||||||
[Prototool](https://github.com/uber/prototool),
|
[Prototool](https://github.com/uber/prototool),
|
||||||
[mattermost-server](https://github.com/mattermost/mattermost-server),
|
[mattermost-server](https://github.com/mattermost/mattermost-server),
|
||||||
[Gardener](https://github.com/gardener/gardenctl),
|
[Gardener](https://github.com/gardener/gardenctl),
|
||||||
|
[Linkerd](https://linkerd.io/),
|
||||||
|
[Github CLI](https://github.com/cli/cli)
|
||||||
etc.
|
etc.
|
||||||
|
|
||||||
[](https://travis-ci.org/spf13/cobra)
|
[](https://travis-ci.org/spf13/cobra)
|
||||||
[](https://circleci.com/gh/spf13/cobra)
|
|
||||||
[](https://godoc.org/github.com/spf13/cobra)
|
[](https://godoc.org/github.com/spf13/cobra)
|
||||||
|
[](https://goreportcard.com/report/github.com/spf13/cobra)
|
||||||
|
|
||||||
# Table of Contents
|
# Table of Contents
|
||||||
|
|
||||||
|
|
@ -208,6 +210,8 @@ You will additionally define flags and handle configuration in your init() funct
|
||||||
For example cmd/root.go:
|
For example cmd/root.go:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
@ -217,22 +221,47 @@ import (
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// Used for flags.
|
||||||
|
cfgFile string
|
||||||
|
userLicense string
|
||||||
|
|
||||||
|
rootCmd = &cobra.Command{
|
||||||
|
Use: "cobra",
|
||||||
|
Short: "A generator for Cobra based Applications",
|
||||||
|
Long: `Cobra is a CLI library for Go that empowers applications.
|
||||||
|
This application is a tool to generate the needed files
|
||||||
|
to quickly create a Cobra application.`,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Execute executes the root command.
|
||||||
|
func Execute() error {
|
||||||
|
return rootCmd.Execute()
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
cobra.OnInitialize(initConfig)
|
cobra.OnInitialize(initConfig)
|
||||||
|
|
||||||
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra.yaml)")
|
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra.yaml)")
|
||||||
rootCmd.PersistentFlags().StringVarP(&projectBase, "projectbase", "b", "", "base project directory eg. github.com/spf13/")
|
rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "author name for copyright attribution")
|
||||||
rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "Author name for copyright attribution")
|
rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "name of license for the project")
|
||||||
rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "Name of license for the project (can provide `licensetext` in config)")
|
rootCmd.PersistentFlags().Bool("viper", true, "use Viper for configuration")
|
||||||
rootCmd.PersistentFlags().Bool("viper", true, "Use Viper for configuration")
|
|
||||||
viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
|
viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
|
||||||
viper.BindPFlag("projectbase", rootCmd.PersistentFlags().Lookup("projectbase"))
|
|
||||||
viper.BindPFlag("useViper", rootCmd.PersistentFlags().Lookup("viper"))
|
viper.BindPFlag("useViper", rootCmd.PersistentFlags().Lookup("viper"))
|
||||||
viper.SetDefault("author", "NAME HERE <EMAIL ADDRESS>")
|
viper.SetDefault("author", "NAME HERE <EMAIL ADDRESS>")
|
||||||
viper.SetDefault("license", "apache")
|
viper.SetDefault("license", "apache")
|
||||||
|
|
||||||
|
rootCmd.AddCommand(addCmd)
|
||||||
|
rootCmd.AddCommand(initCmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
func er(msg interface{}) {
|
||||||
|
fmt.Println("Error:", msg)
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func initConfig() {
|
func initConfig() {
|
||||||
// Don't forget to read config either from cfgFile or from home directory!
|
|
||||||
if cfgFile != "" {
|
if cfgFile != "" {
|
||||||
// Use config file from the flag.
|
// Use config file from the flag.
|
||||||
viper.SetConfigFile(cfgFile)
|
viper.SetConfigFile(cfgFile)
|
||||||
|
|
@ -240,8 +269,7 @@ func initConfig() {
|
||||||
// Find home directory.
|
// Find home directory.
|
||||||
home, err := homedir.Dir()
|
home, err := homedir.Dir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
er(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search config in home directory with name ".cobra" (without extension).
|
// Search config in home directory with name ".cobra" (without extension).
|
||||||
|
|
@ -249,9 +277,10 @@ func initConfig() {
|
||||||
viper.SetConfigName(".cobra")
|
viper.SetConfigName(".cobra")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := viper.ReadInConfig(); err != nil {
|
viper.AutomaticEnv()
|
||||||
fmt.Println("Can't read config:", err)
|
|
||||||
os.Exit(1)
|
if err := viper.ReadInConfig(); err == nil {
|
||||||
|
fmt.Println("Using config file:", viper.ConfigFileUsed())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
@ -459,7 +488,7 @@ For many years people have printed back to the screen.`,
|
||||||
Echo works a lot like print, except it has a child command.`,
|
Echo works a lot like print, except it has a child command.`,
|
||||||
Args: cobra.MinimumNArgs(1),
|
Args: cobra.MinimumNArgs(1),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Println("Print: " + strings.Join(args, " "))
|
fmt.Println("Echo: " + strings.Join(args, " "))
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
10
vendor/github.com/spf13/cobra/args.go
generated
vendored
10
vendor/github.com/spf13/cobra/args.go
generated
vendored
|
|
@ -2,6 +2,7 @@ package cobra
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PositionalArgs func(cmd *Command, args []string) error
|
type PositionalArgs func(cmd *Command, args []string) error
|
||||||
|
|
@ -34,8 +35,15 @@ func NoArgs(cmd *Command, args []string) error {
|
||||||
// OnlyValidArgs returns an error if any args are not in the list of ValidArgs.
|
// OnlyValidArgs returns an error if any args are not in the list of ValidArgs.
|
||||||
func OnlyValidArgs(cmd *Command, args []string) error {
|
func OnlyValidArgs(cmd *Command, args []string) error {
|
||||||
if len(cmd.ValidArgs) > 0 {
|
if len(cmd.ValidArgs) > 0 {
|
||||||
|
// Remove any description that may be included in ValidArgs.
|
||||||
|
// A description is following a tab character.
|
||||||
|
var validArgs []string
|
||||||
|
for _, v := range cmd.ValidArgs {
|
||||||
|
validArgs = append(validArgs, strings.Split(v, "\t")[0])
|
||||||
|
}
|
||||||
|
|
||||||
for _, v := range args {
|
for _, v := range args {
|
||||||
if !stringInSlice(v, cmd.ValidArgs) {
|
if !stringInSlice(v, validArgs) {
|
||||||
return fmt.Errorf("invalid argument %q for %q%s", v, cmd.CommandPath(), cmd.findSuggestions(args[0]))
|
return fmt.Errorf("invalid argument %q for %q%s", v, cmd.CommandPath(), cmd.findSuggestions(args[0]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
104
vendor/github.com/spf13/cobra/bash_completions.go
generated
vendored
104
vendor/github.com/spf13/cobra/bash_completions.go
generated
vendored
|
|
@ -58,9 +58,71 @@ __%[1]s_contains_word()
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__%[1]s_handle_go_custom_completion()
|
||||||
|
{
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"
|
||||||
|
|
||||||
|
local out requestComp lastParam lastChar comp directive args
|
||||||
|
|
||||||
|
# Prepare the command to request completions for the program.
|
||||||
|
# Calling ${words[0]} instead of directly %[1]s allows to handle aliases
|
||||||
|
args=("${words[@]:1}")
|
||||||
|
requestComp="${words[0]} %[2]s ${args[*]}"
|
||||||
|
|
||||||
|
lastParam=${words[$((${#words[@]}-1))]}
|
||||||
|
lastChar=${lastParam:$((${#lastParam}-1)):1}
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"
|
||||||
|
|
||||||
|
if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
|
||||||
|
# If the last parameter is complete (there is a space following it)
|
||||||
|
# We add an extra empty parameter so we can indicate this to the go method.
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: Adding extra empty parameter"
|
||||||
|
requestComp="${requestComp} \"\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: calling ${requestComp}"
|
||||||
|
# Use eval to handle any environment variables and such
|
||||||
|
out=$(eval "${requestComp}" 2>/dev/null)
|
||||||
|
|
||||||
|
# Extract the directive integer at the very end of the output following a colon (:)
|
||||||
|
directive=${out##*:}
|
||||||
|
# Remove the directive
|
||||||
|
out=${out%%:*}
|
||||||
|
if [ "${directive}" = "${out}" ]; then
|
||||||
|
# There is not directive specified
|
||||||
|
directive=0
|
||||||
|
fi
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"
|
||||||
|
|
||||||
|
if [ $((directive & %[3]d)) -ne 0 ]; then
|
||||||
|
# Error code. No completion.
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: received error from custom completion go code"
|
||||||
|
return
|
||||||
|
else
|
||||||
|
if [ $((directive & %[4]d)) -ne 0 ]; then
|
||||||
|
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: activating no space"
|
||||||
|
compopt -o nospace
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ $((directive & %[5]d)) -ne 0 ]; then
|
||||||
|
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||||
|
__%[1]s_debug "${FUNCNAME[0]}: activating no file completion"
|
||||||
|
compopt +o default
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
while IFS='' read -r comp; do
|
||||||
|
COMPREPLY+=("$comp")
|
||||||
|
done < <(compgen -W "${out[*]}" -- "$cur")
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
__%[1]s_handle_reply()
|
__%[1]s_handle_reply()
|
||||||
{
|
{
|
||||||
__%[1]s_debug "${FUNCNAME[0]}"
|
__%[1]s_debug "${FUNCNAME[0]}"
|
||||||
|
local comp
|
||||||
case $cur in
|
case $cur in
|
||||||
-*)
|
-*)
|
||||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||||
|
|
@ -72,7 +134,9 @@ __%[1]s_handle_reply()
|
||||||
else
|
else
|
||||||
allflags=("${flags[*]} ${two_word_flags[*]}")
|
allflags=("${flags[*]} ${two_word_flags[*]}")
|
||||||
fi
|
fi
|
||||||
COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") )
|
while IFS='' read -r comp; do
|
||||||
|
COMPREPLY+=("$comp")
|
||||||
|
done < <(compgen -W "${allflags[*]}" -- "$cur")
|
||||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||||
[[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
|
[[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
|
||||||
fi
|
fi
|
||||||
|
|
@ -118,14 +182,22 @@ __%[1]s_handle_reply()
|
||||||
completions=("${commands[@]}")
|
completions=("${commands[@]}")
|
||||||
if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
|
if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
|
||||||
completions=("${must_have_one_noun[@]}")
|
completions=("${must_have_one_noun[@]}")
|
||||||
|
elif [[ -n "${has_completion_function}" ]]; then
|
||||||
|
# if a go completion function is provided, defer to that function
|
||||||
|
completions=()
|
||||||
|
__%[1]s_handle_go_custom_completion
|
||||||
fi
|
fi
|
||||||
if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
|
if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
|
||||||
completions+=("${must_have_one_flag[@]}")
|
completions+=("${must_have_one_flag[@]}")
|
||||||
fi
|
fi
|
||||||
COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") )
|
while IFS='' read -r comp; do
|
||||||
|
COMPREPLY+=("$comp")
|
||||||
|
done < <(compgen -W "${completions[*]}" -- "$cur")
|
||||||
|
|
||||||
if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
|
if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
|
||||||
COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") )
|
while IFS='' read -r comp; do
|
||||||
|
COMPREPLY+=("$comp")
|
||||||
|
done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
|
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
|
||||||
|
|
@ -160,7 +232,7 @@ __%[1]s_handle_filename_extension_flag()
|
||||||
__%[1]s_handle_subdirs_in_dir_flag()
|
__%[1]s_handle_subdirs_in_dir_flag()
|
||||||
{
|
{
|
||||||
local dir="$1"
|
local dir="$1"
|
||||||
pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1
|
pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
|
||||||
}
|
}
|
||||||
|
|
||||||
__%[1]s_handle_flag()
|
__%[1]s_handle_flag()
|
||||||
|
|
@ -272,7 +344,7 @@ __%[1]s_handle_word()
|
||||||
__%[1]s_handle_word
|
__%[1]s_handle_word
|
||||||
}
|
}
|
||||||
|
|
||||||
`, name))
|
`, name, ShellCompNoDescRequestCmd, ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp))
|
||||||
}
|
}
|
||||||
|
|
||||||
func writePostscript(buf *bytes.Buffer, name string) {
|
func writePostscript(buf *bytes.Buffer, name string) {
|
||||||
|
|
@ -297,6 +369,7 @@ func writePostscript(buf *bytes.Buffer, name string) {
|
||||||
local commands=("%[1]s")
|
local commands=("%[1]s")
|
||||||
local must_have_one_flag=()
|
local must_have_one_flag=()
|
||||||
local must_have_one_noun=()
|
local must_have_one_noun=()
|
||||||
|
local has_completion_function
|
||||||
local last_command
|
local last_command
|
||||||
local nouns=()
|
local nouns=()
|
||||||
|
|
||||||
|
|
@ -397,7 +470,22 @@ func writeLocalNonPersistentFlag(buf *bytes.Buffer, flag *pflag.Flag) {
|
||||||
buf.WriteString(fmt.Sprintf(format, name))
|
buf.WriteString(fmt.Sprintf(format, name))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setup annotations for go completions for registered flags
|
||||||
|
func prepareCustomAnnotationsForFlags(cmd *Command) {
|
||||||
|
for flag := range flagCompletionFunctions {
|
||||||
|
// Make sure the completion script calls the __*_go_custom_completion function for
|
||||||
|
// every registered flag. We need to do this here (and not when the flag was registered
|
||||||
|
// for completion) so that we can know the root command name for the prefix
|
||||||
|
// of __<prefix>_go_custom_completion
|
||||||
|
if flag.Annotations == nil {
|
||||||
|
flag.Annotations = map[string][]string{}
|
||||||
|
}
|
||||||
|
flag.Annotations[BashCompCustom] = []string{fmt.Sprintf("__%[1]s_handle_go_custom_completion", cmd.Root().Name())}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func writeFlags(buf *bytes.Buffer, cmd *Command) {
|
func writeFlags(buf *bytes.Buffer, cmd *Command) {
|
||||||
|
prepareCustomAnnotationsForFlags(cmd)
|
||||||
buf.WriteString(` flags=()
|
buf.WriteString(` flags=()
|
||||||
two_word_flags=()
|
two_word_flags=()
|
||||||
local_nonpersistent_flags=()
|
local_nonpersistent_flags=()
|
||||||
|
|
@ -460,8 +548,14 @@ func writeRequiredNouns(buf *bytes.Buffer, cmd *Command) {
|
||||||
buf.WriteString(" must_have_one_noun=()\n")
|
buf.WriteString(" must_have_one_noun=()\n")
|
||||||
sort.Sort(sort.StringSlice(cmd.ValidArgs))
|
sort.Sort(sort.StringSlice(cmd.ValidArgs))
|
||||||
for _, value := range cmd.ValidArgs {
|
for _, value := range cmd.ValidArgs {
|
||||||
|
// Remove any description that may be included following a tab character.
|
||||||
|
// Descriptions are not supported by bash completion.
|
||||||
|
value = strings.Split(value, "\t")[0]
|
||||||
buf.WriteString(fmt.Sprintf(" must_have_one_noun+=(%q)\n", value))
|
buf.WriteString(fmt.Sprintf(" must_have_one_noun+=(%q)\n", value))
|
||||||
}
|
}
|
||||||
|
if cmd.ValidArgsFunction != nil {
|
||||||
|
buf.WriteString(" has_completion_function=1\n")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeCmdAliases(buf *bytes.Buffer, cmd *Command) {
|
func writeCmdAliases(buf *bytes.Buffer, cmd *Command) {
|
||||||
|
|
|
||||||
239
vendor/github.com/spf13/cobra/bash_completions.md
generated
vendored
239
vendor/github.com/spf13/cobra/bash_completions.md
generated
vendored
|
|
@ -56,7 +56,149 @@ func main() {
|
||||||
|
|
||||||
`out.sh` will get you completions of subcommands and flags. Copy it to `/etc/bash_completion.d/` as described [here](https://debian-administration.org/article/316/An_introduction_to_bash_completion_part_1) and reset your terminal to use autocompletion. If you make additional annotations to your code, you can get even more intelligent and flexible behavior.
|
`out.sh` will get you completions of subcommands and flags. Copy it to `/etc/bash_completion.d/` as described [here](https://debian-administration.org/article/316/An_introduction_to_bash_completion_part_1) and reset your terminal to use autocompletion. If you make additional annotations to your code, you can get even more intelligent and flexible behavior.
|
||||||
|
|
||||||
## Creating your own custom functions
|
## Have the completions code complete your 'nouns'
|
||||||
|
|
||||||
|
### Static completion of nouns
|
||||||
|
|
||||||
|
This method allows you to provide a pre-defined list of completion choices for your nouns using the `validArgs` field.
|
||||||
|
For example, if you want `kubectl get [tab][tab]` to show a list of valid "nouns" you have to set them. Simplified code from `kubectl get` looks like:
|
||||||
|
|
||||||
|
```go
|
||||||
|
validArgs []string = { "pod", "node", "service", "replicationcontroller" }
|
||||||
|
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)",
|
||||||
|
Short: "Display one or many resources",
|
||||||
|
Long: get_long,
|
||||||
|
Example: get_example,
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
err := RunGet(f, out, cmd, args)
|
||||||
|
util.CheckErr(err)
|
||||||
|
},
|
||||||
|
ValidArgs: validArgs,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Notice we put the "ValidArgs" on the "get" subcommand. Doing so will give results like
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# kubectl get [tab][tab]
|
||||||
|
node pod replicationcontroller service
|
||||||
|
```
|
||||||
|
|
||||||
|
### Plural form and shortcuts for nouns
|
||||||
|
|
||||||
|
If your nouns have a number of aliases, you can define them alongside `ValidArgs` using `ArgAliases`:
|
||||||
|
|
||||||
|
```go
|
||||||
|
argAliases []string = { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" }
|
||||||
|
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
...
|
||||||
|
ValidArgs: validArgs,
|
||||||
|
ArgAliases: argAliases
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The aliases are not shown to the user on tab completion, but they are accepted as valid nouns by
|
||||||
|
the completion algorithm if entered manually, e.g. in:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# kubectl get rc [tab][tab]
|
||||||
|
backend frontend database
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that without declaring `rc` as an alias, the completion algorithm would show the list of nouns
|
||||||
|
in this example again instead of the replication controllers.
|
||||||
|
|
||||||
|
### Dynamic completion of nouns
|
||||||
|
|
||||||
|
In some cases it is not possible to provide a list of possible completions in advance. Instead, the list of completions must be determined at execution-time. Cobra provides two ways of defining such dynamic completion of nouns. Note that both these methods can be used along-side each other as long as they are not both used for the same command.
|
||||||
|
|
||||||
|
**Note**: *Custom Completions written in Go* will automatically work for other shell-completion scripts (e.g., Fish shell), while *Custom Completions written in Bash* will only work for Bash shell-completion. It is therefore recommended to use *Custom Completions written in Go*.
|
||||||
|
|
||||||
|
#### 1. Custom completions of nouns written in Go
|
||||||
|
|
||||||
|
In a similar fashion as for static completions, you can use the `ValidArgsFunction` field to provide a Go function that Cobra will execute when it needs the list of completion choices for the nouns of a command. Note that either `ValidArgs` or `ValidArgsFunction` can be used for a single cobra command, but not both.
|
||||||
|
Simplified code from `helm status` looks like:
|
||||||
|
|
||||||
|
```go
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "status RELEASE_NAME",
|
||||||
|
Short: "Display the status of the named release",
|
||||||
|
Long: status_long,
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) {
|
||||||
|
RunGet(args[0])
|
||||||
|
},
|
||||||
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
|
if len(args) != 0 {
|
||||||
|
return nil, cobra.ShellCompDirectiveNoFileComp
|
||||||
|
}
|
||||||
|
return getReleasesFromCluster(toComplete), cobra.ShellCompDirectiveNoFileComp
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Where `getReleasesFromCluster()` is a Go function that obtains the list of current Helm releases running on the Kubernetes cluster.
|
||||||
|
Notice we put the `ValidArgsFunction` on the `status` subcommand. Let's assume the Helm releases on the cluster are: `harbor`, `notary`, `rook` and `thanos` then this dynamic completion will give results like
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# helm status [tab][tab]
|
||||||
|
harbor notary rook thanos
|
||||||
|
```
|
||||||
|
You may have noticed the use of `cobra.ShellCompDirective`. These directives are bit fields allowing to control some shell completion behaviors for your particular completion. You can combine them with the bit-or operator such as `cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp`
|
||||||
|
```go
|
||||||
|
// Indicates an error occurred and completions should be ignored.
|
||||||
|
ShellCompDirectiveError
|
||||||
|
// Indicates that the shell should not add a space after the completion,
|
||||||
|
// even if there is a single completion provided.
|
||||||
|
ShellCompDirectiveNoSpace
|
||||||
|
// Indicates that the shell should not provide file completion even when
|
||||||
|
// no completion is provided.
|
||||||
|
// This currently does not work for zsh or bash < 4
|
||||||
|
ShellCompDirectiveNoFileComp
|
||||||
|
// Indicates that the shell will perform its default behavior after completions
|
||||||
|
// have been provided (this implies !ShellCompDirectiveNoSpace && !ShellCompDirectiveNoFileComp).
|
||||||
|
ShellCompDirectiveDefault
|
||||||
|
```
|
||||||
|
|
||||||
|
When using the `ValidArgsFunction`, Cobra will call your registered function after having parsed all flags and arguments provided in the command-line. You therefore don't need to do this parsing yourself. For example, when a user calls `helm status --namespace my-rook-ns [tab][tab]`, Cobra will call your registered `ValidArgsFunction` after having parsed the `--namespace` flag, as it would have done when calling the `RunE` function.
|
||||||
|
|
||||||
|
##### Debugging
|
||||||
|
|
||||||
|
Cobra achieves dynamic completions written in Go through the use of a hidden command called by the completion script. To debug your Go completion code, you can call this hidden command directly:
|
||||||
|
```bash
|
||||||
|
# helm __complete status har<ENTER>
|
||||||
|
harbor
|
||||||
|
:4
|
||||||
|
Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr
|
||||||
|
```
|
||||||
|
***Important:*** If the noun to complete is empty, you must pass an empty parameter to the `__complete` command:
|
||||||
|
```bash
|
||||||
|
# helm __complete status ""<ENTER>
|
||||||
|
harbor
|
||||||
|
notary
|
||||||
|
rook
|
||||||
|
thanos
|
||||||
|
:4
|
||||||
|
Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr
|
||||||
|
```
|
||||||
|
Calling the `__complete` command directly allows you to run the Go debugger to troubleshoot your code. You can also add printouts to your code; Cobra provides the following functions to use for printouts in Go completion code:
|
||||||
|
```go
|
||||||
|
// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE
|
||||||
|
// is set to a file path) and optionally prints to stderr.
|
||||||
|
cobra.CompDebug(msg string, printToStdErr bool) {
|
||||||
|
cobra.CompDebugln(msg string, printToStdErr bool)
|
||||||
|
|
||||||
|
// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE
|
||||||
|
// is set to a file path) and to stderr.
|
||||||
|
cobra.CompError(msg string)
|
||||||
|
cobra.CompErrorln(msg string)
|
||||||
|
```
|
||||||
|
***Important:*** You should **not** leave traces that print to stdout in your completion code as they will be interpreted as completion choices by the completion script. Instead, use the cobra-provided debugging traces functions mentioned above.
|
||||||
|
|
||||||
|
#### 2. Custom completions of nouns written in Bash
|
||||||
|
|
||||||
|
This method allows you to inject bash functions into the completion script. Those bash functions are responsible for providing the completion choices for your own completions.
|
||||||
|
|
||||||
Some more actual code that works in kubernetes:
|
Some more actual code that works in kubernetes:
|
||||||
|
|
||||||
|
|
@ -111,58 +253,6 @@ Find more information at https://github.com/GoogleCloudPlatform/kubernetes.`,
|
||||||
|
|
||||||
The `BashCompletionFunction` option is really only valid/useful on the root command. Doing the above will cause `__kubectl_custom_func()` (`__<command-use>_custom_func()`) to be called when the built in processor was unable to find a solution. In the case of kubernetes a valid command might look something like `kubectl get pod [mypod]`. If you type `kubectl get pod [tab][tab]` the `__kubectl_customc_func()` will run because the cobra.Command only understood "kubectl" and "get." `__kubectl_custom_func()` will see that the cobra.Command is "kubectl_get" and will thus call another helper `__kubectl_get_resource()`. `__kubectl_get_resource` will look at the 'nouns' collected. In our example the only noun will be `pod`. So it will call `__kubectl_parse_get pod`. `__kubectl_parse_get` will actually call out to kubernetes and get any pods. It will then set `COMPREPLY` to valid pods!
|
The `BashCompletionFunction` option is really only valid/useful on the root command. Doing the above will cause `__kubectl_custom_func()` (`__<command-use>_custom_func()`) to be called when the built in processor was unable to find a solution. In the case of kubernetes a valid command might look something like `kubectl get pod [mypod]`. If you type `kubectl get pod [tab][tab]` the `__kubectl_customc_func()` will run because the cobra.Command only understood "kubectl" and "get." `__kubectl_custom_func()` will see that the cobra.Command is "kubectl_get" and will thus call another helper `__kubectl_get_resource()`. `__kubectl_get_resource` will look at the 'nouns' collected. In our example the only noun will be `pod`. So it will call `__kubectl_parse_get pod`. `__kubectl_parse_get` will actually call out to kubernetes and get any pods. It will then set `COMPREPLY` to valid pods!
|
||||||
|
|
||||||
## Have the completions code complete your 'nouns'
|
|
||||||
|
|
||||||
In the above example "pod" was assumed to already be typed. But if you want `kubectl get [tab][tab]` to show a list of valid "nouns" you have to set them. Simplified code from `kubectl get` looks like:
|
|
||||||
|
|
||||||
```go
|
|
||||||
validArgs []string = { "pod", "node", "service", "replicationcontroller" }
|
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
|
||||||
Use: "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)",
|
|
||||||
Short: "Display one or many resources",
|
|
||||||
Long: get_long,
|
|
||||||
Example: get_example,
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
err := RunGet(f, out, cmd, args)
|
|
||||||
util.CheckErr(err)
|
|
||||||
},
|
|
||||||
ValidArgs: validArgs,
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Notice we put the "ValidArgs" on the "get" subcommand. Doing so will give results like
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# kubectl get [tab][tab]
|
|
||||||
node pod replicationcontroller service
|
|
||||||
```
|
|
||||||
|
|
||||||
## Plural form and shortcuts for nouns
|
|
||||||
|
|
||||||
If your nouns have a number of aliases, you can define them alongside `ValidArgs` using `ArgAliases`:
|
|
||||||
|
|
||||||
```go
|
|
||||||
argAliases []string = { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" }
|
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
|
||||||
...
|
|
||||||
ValidArgs: validArgs,
|
|
||||||
ArgAliases: argAliases
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The aliases are not shown to the user on tab completion, but they are accepted as valid nouns by
|
|
||||||
the completion algorithm if entered manually, e.g. in:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# kubectl get rc [tab][tab]
|
|
||||||
backend frontend database
|
|
||||||
```
|
|
||||||
|
|
||||||
Note that without declaring `rc` as an alias, the completion algorithm would show the list of nouns
|
|
||||||
in this example again instead of the replication controllers.
|
|
||||||
|
|
||||||
## Mark flags as required
|
## Mark flags as required
|
||||||
|
|
||||||
Most of the time completions will only show subcommands. But if a flag is required to make a subcommand work, you probably want it to show up when the user types [tab][tab]. Marking a flag as 'Required' is incredibly easy.
|
Most of the time completions will only show subcommands. But if a flag is required to make a subcommand work, you probably want it to show up when the user types [tab][tab]. Marking a flag as 'Required' is incredibly easy.
|
||||||
|
|
@ -211,8 +301,45 @@ So while there are many other files in the CWD it only shows me subdirs and thos
|
||||||
|
|
||||||
# Specify custom flag completion
|
# Specify custom flag completion
|
||||||
|
|
||||||
Similar to the filename completion and filtering using cobra.BashCompFilenameExt, you can specify
|
As for nouns, Cobra provides two ways of defining dynamic completion of flags. Note that both these methods can be used along-side each other as long as they are not both used for the same flag.
|
||||||
a custom flag completion function with cobra.BashCompCustom:
|
|
||||||
|
**Note**: *Custom Completions written in Go* will automatically work for other shell-completion scripts (e.g., Fish shell), while *Custom Completions written in Bash* will only work for Bash shell-completion. It is therefore recommended to use *Custom Completions written in Go*.
|
||||||
|
|
||||||
|
## 1. Custom completions of flags written in Go
|
||||||
|
|
||||||
|
To provide a Go function that Cobra will execute when it needs the list of completion choices for a flag, you must register the function in the following manner:
|
||||||
|
|
||||||
|
```go
|
||||||
|
flagName := "output"
|
||||||
|
cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
|
return []string{"json", "table", "yaml"}, cobra.ShellCompDirectiveDefault
|
||||||
|
})
|
||||||
|
```
|
||||||
|
Notice that calling `RegisterFlagCompletionFunc()` is done through the `command` with which the flag is associated. In our example this dynamic completion will give results like so:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# helm status --output [tab][tab]
|
||||||
|
json table yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Debugging
|
||||||
|
|
||||||
|
You can also easily debug your Go completion code for flags:
|
||||||
|
```bash
|
||||||
|
# helm __complete status --output ""
|
||||||
|
json
|
||||||
|
table
|
||||||
|
yaml
|
||||||
|
:4
|
||||||
|
Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr
|
||||||
|
```
|
||||||
|
***Important:*** You should **not** leave traces that print to stdout in your completion code as they will be interpreted as completion choices by the completion script. Instead, use the cobra-provided debugging traces functions mentioned in the above section.
|
||||||
|
|
||||||
|
## 2. Custom completions of flags written in Bash
|
||||||
|
|
||||||
|
Alternatively, you can use bash code for flag custom completion. Similar to the filename
|
||||||
|
completion and filtering using `cobra.BashCompFilenameExt`, you can specify
|
||||||
|
a custom flag completion bash function with `cobra.BashCompCustom`:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
annotation := make(map[string][]string)
|
annotation := make(map[string][]string)
|
||||||
|
|
@ -226,7 +353,7 @@ a custom flag completion function with cobra.BashCompCustom:
|
||||||
cmd.Flags().AddFlag(flag)
|
cmd.Flags().AddFlag(flag)
|
||||||
```
|
```
|
||||||
|
|
||||||
In addition add the `__handle_namespace_flag` implementation in the `BashCompletionFunction`
|
In addition add the `__kubectl_get_namespaces` implementation in the `BashCompletionFunction`
|
||||||
value, e.g.:
|
value, e.g.:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
|
||||||
4
vendor/github.com/spf13/cobra/cobra.go
generated
vendored
4
vendor/github.com/spf13/cobra/cobra.go
generated
vendored
|
|
@ -52,7 +52,7 @@ var EnableCommandSorting = true
|
||||||
// if the CLI is started from explorer.exe.
|
// if the CLI is started from explorer.exe.
|
||||||
// To disable the mousetrap, just set this variable to blank string ("").
|
// To disable the mousetrap, just set this variable to blank string ("").
|
||||||
// Works only on Microsoft Windows.
|
// Works only on Microsoft Windows.
|
||||||
var MousetrapHelpText string = `This is a command line tool.
|
var MousetrapHelpText = `This is a command line tool.
|
||||||
|
|
||||||
You need to open cmd.exe and run it from there.
|
You need to open cmd.exe and run it from there.
|
||||||
`
|
`
|
||||||
|
|
@ -61,7 +61,7 @@ You need to open cmd.exe and run it from there.
|
||||||
// if the CLI is started from explorer.exe. Set to 0 to wait for the return key to be pressed.
|
// if the CLI is started from explorer.exe. Set to 0 to wait for the return key to be pressed.
|
||||||
// To disable the mousetrap, just set MousetrapHelpText to blank string ("").
|
// To disable the mousetrap, just set MousetrapHelpText to blank string ("").
|
||||||
// Works only on Microsoft Windows.
|
// Works only on Microsoft Windows.
|
||||||
var MousetrapDisplayDuration time.Duration = 5 * time.Second
|
var MousetrapDisplayDuration = 5 * time.Second
|
||||||
|
|
||||||
// AddTemplateFunc adds a template function that's available to Usage and Help
|
// AddTemplateFunc adds a template function that's available to Usage and Help
|
||||||
// template generation.
|
// template generation.
|
||||||
|
|
|
||||||
46
vendor/github.com/spf13/cobra/command.go
generated
vendored
46
vendor/github.com/spf13/cobra/command.go
generated
vendored
|
|
@ -17,6 +17,7 @@ package cobra
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
@ -56,6 +57,10 @@ type Command struct {
|
||||||
|
|
||||||
// ValidArgs is list of all valid non-flag arguments that are accepted in bash completions
|
// ValidArgs is list of all valid non-flag arguments that are accepted in bash completions
|
||||||
ValidArgs []string
|
ValidArgs []string
|
||||||
|
// ValidArgsFunction is an optional function that provides valid non-flag arguments for bash completion.
|
||||||
|
// It is a dynamic version of using ValidArgs.
|
||||||
|
// Only one of ValidArgs and ValidArgsFunction can be used for a command.
|
||||||
|
ValidArgsFunction func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)
|
||||||
|
|
||||||
// Expected arguments
|
// Expected arguments
|
||||||
Args PositionalArgs
|
Args PositionalArgs
|
||||||
|
|
@ -80,7 +85,8 @@ type Command struct {
|
||||||
|
|
||||||
// Version defines the version for this command. If this value is non-empty and the command does not
|
// Version defines the version for this command. If this value is non-empty and the command does not
|
||||||
// define a "version" flag, a "version" boolean flag will be added to the command and, if specified,
|
// define a "version" flag, a "version" boolean flag will be added to the command and, if specified,
|
||||||
// will print content of the "Version" variable.
|
// will print content of the "Version" variable. A shorthand "v" flag will also be added if the
|
||||||
|
// command does not define one.
|
||||||
Version string
|
Version string
|
||||||
|
|
||||||
// The *Run functions are executed in the following order:
|
// The *Run functions are executed in the following order:
|
||||||
|
|
@ -143,6 +149,8 @@ type Command struct {
|
||||||
// FParseErrWhitelist flag parse errors to be ignored
|
// FParseErrWhitelist flag parse errors to be ignored
|
||||||
FParseErrWhitelist FParseErrWhitelist
|
FParseErrWhitelist FParseErrWhitelist
|
||||||
|
|
||||||
|
ctx context.Context
|
||||||
|
|
||||||
// commands is the list of commands supported by this program.
|
// commands is the list of commands supported by this program.
|
||||||
commands []*Command
|
commands []*Command
|
||||||
// parent is a parent command for this command.
|
// parent is a parent command for this command.
|
||||||
|
|
@ -202,6 +210,12 @@ type Command struct {
|
||||||
errWriter io.Writer
|
errWriter io.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Context returns underlying command context. If command wasn't
|
||||||
|
// executed with ExecuteContext Context returns Background context.
|
||||||
|
func (c *Command) Context() context.Context {
|
||||||
|
return c.ctx
|
||||||
|
}
|
||||||
|
|
||||||
// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden
|
// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden
|
||||||
// particularly useful when testing.
|
// particularly useful when testing.
|
||||||
func (c *Command) SetArgs(a []string) {
|
func (c *Command) SetArgs(a []string) {
|
||||||
|
|
@ -228,7 +242,7 @@ func (c *Command) SetErr(newErr io.Writer) {
|
||||||
c.errWriter = newErr
|
c.errWriter = newErr
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetOut sets the source for input data
|
// SetIn sets the source for input data
|
||||||
// If newIn is nil, os.Stdin is used.
|
// If newIn is nil, os.Stdin is used.
|
||||||
func (c *Command) SetIn(newIn io.Reader) {
|
func (c *Command) SetIn(newIn io.Reader) {
|
||||||
c.inReader = newIn
|
c.inReader = newIn
|
||||||
|
|
@ -297,7 +311,7 @@ func (c *Command) ErrOrStderr() io.Writer {
|
||||||
return c.getErr(os.Stderr)
|
return c.getErr(os.Stderr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ErrOrStderr returns output to stderr
|
// InOrStdin returns input to stdin
|
||||||
func (c *Command) InOrStdin() io.Reader {
|
func (c *Command) InOrStdin() io.Reader {
|
||||||
return c.getIn(os.Stdin)
|
return c.getIn(os.Stdin)
|
||||||
}
|
}
|
||||||
|
|
@ -369,6 +383,8 @@ func (c *Command) HelpFunc() func(*Command, []string) {
|
||||||
}
|
}
|
||||||
return func(c *Command, a []string) {
|
return func(c *Command, a []string) {
|
||||||
c.mergePersistentFlags()
|
c.mergePersistentFlags()
|
||||||
|
// The help should be sent to stdout
|
||||||
|
// See https://github.com/spf13/cobra/issues/1002
|
||||||
err := tmpl(c.OutOrStdout(), c.HelpTemplate(), c)
|
err := tmpl(c.OutOrStdout(), c.HelpTemplate(), c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Println(err)
|
c.Println(err)
|
||||||
|
|
@ -857,6 +873,13 @@ func (c *Command) preRun() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExecuteContext is the same as Execute(), but sets the ctx on the command.
|
||||||
|
// Retrieve ctx by calling cmd.Context() inside your *Run lifecycle functions.
|
||||||
|
func (c *Command) ExecuteContext(ctx context.Context) error {
|
||||||
|
c.ctx = ctx
|
||||||
|
return c.Execute()
|
||||||
|
}
|
||||||
|
|
||||||
// Execute uses the args (os.Args[1:] by default)
|
// Execute uses the args (os.Args[1:] by default)
|
||||||
// and run through the command tree finding appropriate matches
|
// and run through the command tree finding appropriate matches
|
||||||
// for commands and then corresponding flags.
|
// for commands and then corresponding flags.
|
||||||
|
|
@ -867,6 +890,10 @@ func (c *Command) Execute() error {
|
||||||
|
|
||||||
// ExecuteC executes the command.
|
// ExecuteC executes the command.
|
||||||
func (c *Command) ExecuteC() (cmd *Command, err error) {
|
func (c *Command) ExecuteC() (cmd *Command, err error) {
|
||||||
|
if c.ctx == nil {
|
||||||
|
c.ctx = context.Background()
|
||||||
|
}
|
||||||
|
|
||||||
// Regardless of what command execute is called on, run on Root only
|
// Regardless of what command execute is called on, run on Root only
|
||||||
if c.HasParent() {
|
if c.HasParent() {
|
||||||
return c.Root().ExecuteC()
|
return c.Root().ExecuteC()
|
||||||
|
|
@ -888,6 +915,9 @@ func (c *Command) ExecuteC() (cmd *Command, err error) {
|
||||||
args = os.Args[1:]
|
args = os.Args[1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// initialize the hidden command to be used for bash completion
|
||||||
|
c.initCompleteCmd(args)
|
||||||
|
|
||||||
var flags []string
|
var flags []string
|
||||||
if c.TraverseChildren {
|
if c.TraverseChildren {
|
||||||
cmd, flags, err = c.Traverse(args)
|
cmd, flags, err = c.Traverse(args)
|
||||||
|
|
@ -911,6 +941,12 @@ func (c *Command) ExecuteC() (cmd *Command, err error) {
|
||||||
cmd.commandCalledAs.name = cmd.Name()
|
cmd.commandCalledAs.name = cmd.Name()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We have to pass global context to children command
|
||||||
|
// if context is present on the parent command.
|
||||||
|
if cmd.ctx == nil {
|
||||||
|
cmd.ctx = c.ctx
|
||||||
|
}
|
||||||
|
|
||||||
err = cmd.execute(flags)
|
err = cmd.execute(flags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Always show help if requested, even if SilenceErrors is in
|
// Always show help if requested, even if SilenceErrors is in
|
||||||
|
|
@ -994,9 +1030,13 @@ func (c *Command) InitDefaultVersionFlag() {
|
||||||
} else {
|
} else {
|
||||||
usage += c.Name()
|
usage += c.Name()
|
||||||
}
|
}
|
||||||
|
if c.Flags().ShorthandLookup("v") == nil {
|
||||||
|
c.Flags().BoolP("version", "v", false, usage)
|
||||||
|
} else {
|
||||||
c.Flags().Bool("version", false, usage)
|
c.Flags().Bool("version", false, usage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// InitDefaultHelpCmd adds default help command to c.
|
// InitDefaultHelpCmd adds default help command to c.
|
||||||
// It is called automatically by executing the c or by calling help and usage.
|
// It is called automatically by executing the c or by calling help and usage.
|
||||||
|
|
|
||||||
384
vendor/github.com/spf13/cobra/custom_completions.go
generated
vendored
Normal file
384
vendor/github.com/spf13/cobra/custom_completions.go
generated
vendored
Normal file
|
|
@ -0,0 +1,384 @@
|
||||||
|
package cobra
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/spf13/pflag"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ShellCompRequestCmd is the name of the hidden command that is used to request
|
||||||
|
// completion results from the program. It is used by the shell completion scripts.
|
||||||
|
ShellCompRequestCmd = "__complete"
|
||||||
|
// ShellCompNoDescRequestCmd is the name of the hidden command that is used to request
|
||||||
|
// completion results without their description. It is used by the shell completion scripts.
|
||||||
|
ShellCompNoDescRequestCmd = "__completeNoDesc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Global map of flag completion functions.
|
||||||
|
var flagCompletionFunctions = map[*pflag.Flag]func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective){}
|
||||||
|
|
||||||
|
// ShellCompDirective is a bit map representing the different behaviors the shell
|
||||||
|
// can be instructed to have once completions have been provided.
|
||||||
|
type ShellCompDirective int
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ShellCompDirectiveError indicates an error occurred and completions should be ignored.
|
||||||
|
ShellCompDirectiveError ShellCompDirective = 1 << iota
|
||||||
|
|
||||||
|
// ShellCompDirectiveNoSpace indicates that the shell should not add a space
|
||||||
|
// after the completion even if there is a single completion provided.
|
||||||
|
ShellCompDirectiveNoSpace
|
||||||
|
|
||||||
|
// ShellCompDirectiveNoFileComp indicates that the shell should not provide
|
||||||
|
// file completion even when no completion is provided.
|
||||||
|
// This currently does not work for zsh or bash < 4
|
||||||
|
ShellCompDirectiveNoFileComp
|
||||||
|
|
||||||
|
// ShellCompDirectiveDefault indicates to let the shell perform its default
|
||||||
|
// behavior after completions have been provided.
|
||||||
|
ShellCompDirectiveDefault ShellCompDirective = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
// RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag.
|
||||||
|
func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)) error {
|
||||||
|
flag := c.Flag(flagName)
|
||||||
|
if flag == nil {
|
||||||
|
return fmt.Errorf("RegisterFlagCompletionFunc: flag '%s' does not exist", flagName)
|
||||||
|
}
|
||||||
|
if _, exists := flagCompletionFunctions[flag]; exists {
|
||||||
|
return fmt.Errorf("RegisterFlagCompletionFunc: flag '%s' already registered", flagName)
|
||||||
|
}
|
||||||
|
flagCompletionFunctions[flag] = f
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a string listing the different directive enabled in the specified parameter
|
||||||
|
func (d ShellCompDirective) string() string {
|
||||||
|
var directives []string
|
||||||
|
if d&ShellCompDirectiveError != 0 {
|
||||||
|
directives = append(directives, "ShellCompDirectiveError")
|
||||||
|
}
|
||||||
|
if d&ShellCompDirectiveNoSpace != 0 {
|
||||||
|
directives = append(directives, "ShellCompDirectiveNoSpace")
|
||||||
|
}
|
||||||
|
if d&ShellCompDirectiveNoFileComp != 0 {
|
||||||
|
directives = append(directives, "ShellCompDirectiveNoFileComp")
|
||||||
|
}
|
||||||
|
if len(directives) == 0 {
|
||||||
|
directives = append(directives, "ShellCompDirectiveDefault")
|
||||||
|
}
|
||||||
|
|
||||||
|
if d > ShellCompDirectiveError+ShellCompDirectiveNoSpace+ShellCompDirectiveNoFileComp {
|
||||||
|
return fmt.Sprintf("ERROR: unexpected ShellCompDirective value: %d", d)
|
||||||
|
}
|
||||||
|
return strings.Join(directives, ", ")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adds a special hidden command that can be used to request custom completions.
|
||||||
|
func (c *Command) initCompleteCmd(args []string) {
|
||||||
|
completeCmd := &Command{
|
||||||
|
Use: fmt.Sprintf("%s [command-line]", ShellCompRequestCmd),
|
||||||
|
Aliases: []string{ShellCompNoDescRequestCmd},
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
|
Hidden: true,
|
||||||
|
DisableFlagParsing: true,
|
||||||
|
Args: MinimumNArgs(1),
|
||||||
|
Short: "Request shell completion choices for the specified command-line",
|
||||||
|
Long: fmt.Sprintf("%[2]s is a special command that is used by the shell completion logic\n%[1]s",
|
||||||
|
"to request completion choices for the specified command-line.", ShellCompRequestCmd),
|
||||||
|
Run: func(cmd *Command, args []string) {
|
||||||
|
finalCmd, completions, directive, err := cmd.getCompletions(args)
|
||||||
|
if err != nil {
|
||||||
|
CompErrorln(err.Error())
|
||||||
|
// Keep going for multiple reasons:
|
||||||
|
// 1- There could be some valid completions even though there was an error
|
||||||
|
// 2- Even without completions, we need to print the directive
|
||||||
|
}
|
||||||
|
|
||||||
|
noDescriptions := (cmd.CalledAs() == ShellCompNoDescRequestCmd)
|
||||||
|
for _, comp := range completions {
|
||||||
|
if noDescriptions {
|
||||||
|
// Remove any description that may be included following a tab character.
|
||||||
|
comp = strings.Split(comp, "\t")[0]
|
||||||
|
}
|
||||||
|
// Print each possible completion to stdout for the completion script to consume.
|
||||||
|
fmt.Fprintln(finalCmd.OutOrStdout(), comp)
|
||||||
|
}
|
||||||
|
|
||||||
|
if directive > ShellCompDirectiveError+ShellCompDirectiveNoSpace+ShellCompDirectiveNoFileComp {
|
||||||
|
directive = ShellCompDirectiveDefault
|
||||||
|
}
|
||||||
|
|
||||||
|
// As the last printout, print the completion directive for the completion script to parse.
|
||||||
|
// The directive integer must be that last character following a single colon (:).
|
||||||
|
// The completion script expects :<directive>
|
||||||
|
fmt.Fprintf(finalCmd.OutOrStdout(), ":%d\n", directive)
|
||||||
|
|
||||||
|
// Print some helpful info to stderr for the user to understand.
|
||||||
|
// Output from stderr must be ignored by the completion script.
|
||||||
|
fmt.Fprintf(finalCmd.ErrOrStderr(), "Completion ended with directive: %s\n", directive.string())
|
||||||
|
},
|
||||||
|
}
|
||||||
|
c.AddCommand(completeCmd)
|
||||||
|
subCmd, _, err := c.Find(args)
|
||||||
|
if err != nil || subCmd.Name() != ShellCompRequestCmd {
|
||||||
|
// Only create this special command if it is actually being called.
|
||||||
|
// This reduces possible side-effects of creating such a command;
|
||||||
|
// for example, having this command would cause problems to a
|
||||||
|
// cobra program that only consists of the root command, since this
|
||||||
|
// command would cause the root command to suddenly have a subcommand.
|
||||||
|
c.RemoveCommand(completeCmd)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDirective, error) {
|
||||||
|
var completions []string
|
||||||
|
|
||||||
|
// The last argument, which is not completely typed by the user,
|
||||||
|
// should not be part of the list of arguments
|
||||||
|
toComplete := args[len(args)-1]
|
||||||
|
trimmedArgs := args[:len(args)-1]
|
||||||
|
|
||||||
|
// Find the real command for which completion must be performed
|
||||||
|
finalCmd, finalArgs, err := c.Root().Find(trimmedArgs)
|
||||||
|
if err != nil {
|
||||||
|
// Unable to find the real command. E.g., <program> someInvalidCmd <TAB>
|
||||||
|
return c, completions, ShellCompDirectiveDefault, fmt.Errorf("Unable to find a command for arguments: %v", trimmedArgs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// When doing completion of a flag name, as soon as an argument starts with
|
||||||
|
// a '-' we know it is a flag. We cannot use isFlagArg() here as it requires
|
||||||
|
// the flag to be complete
|
||||||
|
if len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, "=") {
|
||||||
|
// We are completing a flag name
|
||||||
|
finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {
|
||||||
|
completions = append(completions, getFlagNameCompletions(flag, toComplete)...)
|
||||||
|
})
|
||||||
|
finalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {
|
||||||
|
completions = append(completions, getFlagNameCompletions(flag, toComplete)...)
|
||||||
|
})
|
||||||
|
|
||||||
|
directive := ShellCompDirectiveDefault
|
||||||
|
if len(completions) > 0 {
|
||||||
|
if strings.HasSuffix(completions[0], "=") {
|
||||||
|
directive = ShellCompDirectiveNoSpace
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return finalCmd, completions, directive, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var flag *pflag.Flag
|
||||||
|
if !finalCmd.DisableFlagParsing {
|
||||||
|
// We only do flag completion if we are allowed to parse flags
|
||||||
|
// This is important for commands which have requested to do their own flag completion.
|
||||||
|
flag, finalArgs, toComplete, err = checkIfFlagCompletion(finalCmd, finalArgs, toComplete)
|
||||||
|
if err != nil {
|
||||||
|
// Error while attempting to parse flags
|
||||||
|
return finalCmd, completions, ShellCompDirectiveDefault, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if flag == nil {
|
||||||
|
// Complete subcommand names
|
||||||
|
for _, subCmd := range finalCmd.Commands() {
|
||||||
|
if subCmd.IsAvailableCommand() && strings.HasPrefix(subCmd.Name(), toComplete) {
|
||||||
|
completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(finalCmd.ValidArgs) > 0 {
|
||||||
|
// Always complete ValidArgs, even if we are completing a subcommand name.
|
||||||
|
// This is for commands that have both subcommands and ValidArgs.
|
||||||
|
for _, validArg := range finalCmd.ValidArgs {
|
||||||
|
if strings.HasPrefix(validArg, toComplete) {
|
||||||
|
completions = append(completions, validArg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there are ValidArgs specified (even if they don't match), we stop completion.
|
||||||
|
// Only one of ValidArgs or ValidArgsFunction can be used for a single command.
|
||||||
|
return finalCmd, completions, ShellCompDirectiveNoFileComp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always let the logic continue so as to add any ValidArgsFunction completions,
|
||||||
|
// even if we already found sub-commands.
|
||||||
|
// This is for commands that have subcommands but also specify a ValidArgsFunction.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse the flags and extract the arguments to prepare for calling the completion function
|
||||||
|
if err = finalCmd.ParseFlags(finalArgs); err != nil {
|
||||||
|
return finalCmd, completions, ShellCompDirectiveDefault, fmt.Errorf("Error while parsing flags from args %v: %s", finalArgs, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
// We only remove the flags from the arguments if DisableFlagParsing is not set.
|
||||||
|
// This is important for commands which have requested to do their own flag completion.
|
||||||
|
if !finalCmd.DisableFlagParsing {
|
||||||
|
finalArgs = finalCmd.Flags().Args()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the completion function for the flag or command
|
||||||
|
var completionFn func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)
|
||||||
|
if flag != nil {
|
||||||
|
completionFn = flagCompletionFunctions[flag]
|
||||||
|
} else {
|
||||||
|
completionFn = finalCmd.ValidArgsFunction
|
||||||
|
}
|
||||||
|
if completionFn == nil {
|
||||||
|
// Go custom completion not supported/needed for this flag or command
|
||||||
|
return finalCmd, completions, ShellCompDirectiveDefault, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the registered completion function to get the completions
|
||||||
|
comps, directive := completionFn(finalCmd, finalArgs, toComplete)
|
||||||
|
completions = append(completions, comps...)
|
||||||
|
return finalCmd, completions, directive, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getFlagNameCompletions(flag *pflag.Flag, toComplete string) []string {
|
||||||
|
if nonCompletableFlag(flag) {
|
||||||
|
return []string{}
|
||||||
|
}
|
||||||
|
|
||||||
|
var completions []string
|
||||||
|
flagName := "--" + flag.Name
|
||||||
|
if strings.HasPrefix(flagName, toComplete) {
|
||||||
|
// Flag without the =
|
||||||
|
completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage))
|
||||||
|
|
||||||
|
if len(flag.NoOptDefVal) == 0 {
|
||||||
|
// Flag requires a value, so it can be suffixed with =
|
||||||
|
flagName += "="
|
||||||
|
completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flagName = "-" + flag.Shorthand
|
||||||
|
if len(flag.Shorthand) > 0 && strings.HasPrefix(flagName, toComplete) {
|
||||||
|
completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage))
|
||||||
|
}
|
||||||
|
|
||||||
|
return completions
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*pflag.Flag, []string, string, error) {
|
||||||
|
var flagName string
|
||||||
|
trimmedArgs := args
|
||||||
|
flagWithEqual := false
|
||||||
|
if isFlagArg(lastArg) {
|
||||||
|
if index := strings.Index(lastArg, "="); index >= 0 {
|
||||||
|
flagName = strings.TrimLeft(lastArg[:index], "-")
|
||||||
|
lastArg = lastArg[index+1:]
|
||||||
|
flagWithEqual = true
|
||||||
|
} else {
|
||||||
|
return nil, nil, "", errors.New("Unexpected completion request for flag")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(flagName) == 0 {
|
||||||
|
if len(args) > 0 {
|
||||||
|
prevArg := args[len(args)-1]
|
||||||
|
if isFlagArg(prevArg) {
|
||||||
|
// Only consider the case where the flag does not contain an =.
|
||||||
|
// If the flag contains an = it means it has already been fully processed,
|
||||||
|
// so we don't need to deal with it here.
|
||||||
|
if index := strings.Index(prevArg, "="); index < 0 {
|
||||||
|
flagName = strings.TrimLeft(prevArg, "-")
|
||||||
|
|
||||||
|
// Remove the uncompleted flag or else there could be an error created
|
||||||
|
// for an invalid value for that flag
|
||||||
|
trimmedArgs = args[:len(args)-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(flagName) == 0 {
|
||||||
|
// Not doing flag completion
|
||||||
|
return nil, trimmedArgs, lastArg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
flag := findFlag(finalCmd, flagName)
|
||||||
|
if flag == nil {
|
||||||
|
// Flag not supported by this command, nothing to complete
|
||||||
|
err := fmt.Errorf("Subcommand '%s' does not support flag '%s'", finalCmd.Name(), flagName)
|
||||||
|
return nil, nil, "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !flagWithEqual {
|
||||||
|
if len(flag.NoOptDefVal) != 0 {
|
||||||
|
// We had assumed dealing with a two-word flag but the flag is a boolean flag.
|
||||||
|
// In that case, there is no value following it, so we are not really doing flag completion.
|
||||||
|
// Reset everything to do noun completion.
|
||||||
|
trimmedArgs = args
|
||||||
|
flag = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return flag, trimmedArgs, lastArg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func findFlag(cmd *Command, name string) *pflag.Flag {
|
||||||
|
flagSet := cmd.Flags()
|
||||||
|
if len(name) == 1 {
|
||||||
|
// First convert the short flag into a long flag
|
||||||
|
// as the cmd.Flag() search only accepts long flags
|
||||||
|
if short := flagSet.ShorthandLookup(name); short != nil {
|
||||||
|
name = short.Name
|
||||||
|
} else {
|
||||||
|
set := cmd.InheritedFlags()
|
||||||
|
if short = set.ShorthandLookup(name); short != nil {
|
||||||
|
name = short.Name
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cmd.Flag(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompDebug prints the specified string to the same file as where the
|
||||||
|
// completion script prints its logs.
|
||||||
|
// Note that completion printouts should never be on stdout as they would
|
||||||
|
// be wrongly interpreted as actual completion choices by the completion script.
|
||||||
|
func CompDebug(msg string, printToStdErr bool) {
|
||||||
|
msg = fmt.Sprintf("[Debug] %s", msg)
|
||||||
|
|
||||||
|
// Such logs are only printed when the user has set the environment
|
||||||
|
// variable BASH_COMP_DEBUG_FILE to the path of some file to be used.
|
||||||
|
if path := os.Getenv("BASH_COMP_DEBUG_FILE"); path != "" {
|
||||||
|
f, err := os.OpenFile(path,
|
||||||
|
os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||||||
|
if err == nil {
|
||||||
|
defer f.Close()
|
||||||
|
f.WriteString(msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if printToStdErr {
|
||||||
|
// Must print to stderr for this not to be read by the completion script.
|
||||||
|
fmt.Fprintf(os.Stderr, msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompDebugln prints the specified string with a newline at the end
|
||||||
|
// to the same file as where the completion script prints its logs.
|
||||||
|
// Such logs are only printed when the user has set the environment
|
||||||
|
// variable BASH_COMP_DEBUG_FILE to the path of some file to be used.
|
||||||
|
func CompDebugln(msg string, printToStdErr bool) {
|
||||||
|
CompDebug(fmt.Sprintf("%s\n", msg), printToStdErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompError prints the specified completion message to stderr.
|
||||||
|
func CompError(msg string) {
|
||||||
|
msg = fmt.Sprintf("[Error] %s", msg)
|
||||||
|
CompDebug(msg, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompErrorln prints the specified completion message to stderr with a newline at the end.
|
||||||
|
func CompErrorln(msg string) {
|
||||||
|
CompError(fmt.Sprintf("%s\n", msg))
|
||||||
|
}
|
||||||
172
vendor/github.com/spf13/cobra/fish_completions.go
generated
vendored
Normal file
172
vendor/github.com/spf13/cobra/fish_completions.go
generated
vendored
Normal file
|
|
@ -0,0 +1,172 @@
|
||||||
|
package cobra
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func genFishComp(buf *bytes.Buffer, name string, includeDesc bool) {
|
||||||
|
compCmd := ShellCompRequestCmd
|
||||||
|
if !includeDesc {
|
||||||
|
compCmd = ShellCompNoDescRequestCmd
|
||||||
|
}
|
||||||
|
buf.WriteString(fmt.Sprintf("# fish completion for %-36s -*- shell-script -*-\n", name))
|
||||||
|
buf.WriteString(fmt.Sprintf(`
|
||||||
|
function __%[1]s_debug
|
||||||
|
set file "$BASH_COMP_DEBUG_FILE"
|
||||||
|
if test -n "$file"
|
||||||
|
echo "$argv" >> $file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function __%[1]s_perform_completion
|
||||||
|
__%[1]s_debug "Starting __%[1]s_perform_completion with: $argv"
|
||||||
|
|
||||||
|
set args (string split -- " " "$argv")
|
||||||
|
set lastArg "$args[-1]"
|
||||||
|
|
||||||
|
__%[1]s_debug "args: $args"
|
||||||
|
__%[1]s_debug "last arg: $lastArg"
|
||||||
|
|
||||||
|
set emptyArg ""
|
||||||
|
if test -z "$lastArg"
|
||||||
|
__%[1]s_debug "Setting emptyArg"
|
||||||
|
set emptyArg \"\"
|
||||||
|
end
|
||||||
|
__%[1]s_debug "emptyArg: $emptyArg"
|
||||||
|
|
||||||
|
set requestComp "$args[1] %[2]s $args[2..-1] $emptyArg"
|
||||||
|
__%[1]s_debug "Calling $requestComp"
|
||||||
|
|
||||||
|
set results (eval $requestComp 2> /dev/null)
|
||||||
|
set comps $results[1..-2]
|
||||||
|
set directiveLine $results[-1]
|
||||||
|
|
||||||
|
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
|
||||||
|
# completions must be prefixed with the flag
|
||||||
|
set flagPrefix (string match -r -- '-.*=' "$lastArg")
|
||||||
|
|
||||||
|
__%[1]s_debug "Comps: $comps"
|
||||||
|
__%[1]s_debug "DirectiveLine: $directiveLine"
|
||||||
|
__%[1]s_debug "flagPrefix: $flagPrefix"
|
||||||
|
|
||||||
|
for comp in $comps
|
||||||
|
printf "%%s%%s\n" "$flagPrefix" "$comp"
|
||||||
|
end
|
||||||
|
|
||||||
|
printf "%%s\n" "$directiveLine"
|
||||||
|
end
|
||||||
|
|
||||||
|
# This function does three things:
|
||||||
|
# 1- Obtain the completions and store them in the global __%[1]s_comp_results
|
||||||
|
# 2- Set the __%[1]s_comp_do_file_comp flag if file completion should be performed
|
||||||
|
# and unset it otherwise
|
||||||
|
# 3- Return true if the completion results are not empty
|
||||||
|
function __%[1]s_prepare_completions
|
||||||
|
# Start fresh
|
||||||
|
set --erase __%[1]s_comp_do_file_comp
|
||||||
|
set --erase __%[1]s_comp_results
|
||||||
|
|
||||||
|
# Check if the command-line is already provided. This is useful for testing.
|
||||||
|
if not set --query __%[1]s_comp_commandLine
|
||||||
|
set __%[1]s_comp_commandLine (commandline)
|
||||||
|
end
|
||||||
|
__%[1]s_debug "commandLine is: $__%[1]s_comp_commandLine"
|
||||||
|
|
||||||
|
set results (__%[1]s_perform_completion "$__%[1]s_comp_commandLine")
|
||||||
|
set --erase __%[1]s_comp_commandLine
|
||||||
|
__%[1]s_debug "Completion results: $results"
|
||||||
|
|
||||||
|
if test -z "$results"
|
||||||
|
__%[1]s_debug "No completion, probably due to a failure"
|
||||||
|
# Might as well do file completion, in case it helps
|
||||||
|
set --global __%[1]s_comp_do_file_comp 1
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
set directive (string sub --start 2 $results[-1])
|
||||||
|
set --global __%[1]s_comp_results $results[1..-2]
|
||||||
|
|
||||||
|
__%[1]s_debug "Completions are: $__%[1]s_comp_results"
|
||||||
|
__%[1]s_debug "Directive is: $directive"
|
||||||
|
|
||||||
|
if test -z "$directive"
|
||||||
|
set directive 0
|
||||||
|
end
|
||||||
|
|
||||||
|
set compErr (math (math --scale 0 $directive / %[3]d) %% 2)
|
||||||
|
if test $compErr -eq 1
|
||||||
|
__%[1]s_debug "Received error directive: aborting."
|
||||||
|
# Might as well do file completion, in case it helps
|
||||||
|
set --global __%[1]s_comp_do_file_comp 1
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
set nospace (math (math --scale 0 $directive / %[4]d) %% 2)
|
||||||
|
set nofiles (math (math --scale 0 $directive / %[5]d) %% 2)
|
||||||
|
|
||||||
|
__%[1]s_debug "nospace: $nospace, nofiles: $nofiles"
|
||||||
|
|
||||||
|
# Important not to quote the variable for count to work
|
||||||
|
set numComps (count $__%[1]s_comp_results)
|
||||||
|
__%[1]s_debug "numComps: $numComps"
|
||||||
|
|
||||||
|
if test $numComps -eq 1; and test $nospace -ne 0
|
||||||
|
# To support the "nospace" directive we trick the shell
|
||||||
|
# by outputting an extra, longer completion.
|
||||||
|
__%[1]s_debug "Adding second completion to perform nospace directive"
|
||||||
|
set --append __%[1]s_comp_results $__%[1]s_comp_results[1].
|
||||||
|
end
|
||||||
|
|
||||||
|
if test $numComps -eq 0; and test $nofiles -eq 0
|
||||||
|
__%[1]s_debug "Requesting file completion"
|
||||||
|
set --global __%[1]s_comp_do_file_comp 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# If we don't want file completion, we must return true even if there
|
||||||
|
# are no completions found. This is because fish will perform the last
|
||||||
|
# completion command, even if its condition is false, if no other
|
||||||
|
# completion command was triggered
|
||||||
|
return (not set --query __%[1]s_comp_do_file_comp)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove any pre-existing completions for the program since we will be handling all of them
|
||||||
|
# TODO this cleanup is not sufficient. Fish completions are only loaded once the user triggers
|
||||||
|
# them, so the below deletion will not work as it is run too early. What else can we do?
|
||||||
|
complete -c %[1]s -e
|
||||||
|
|
||||||
|
# The order in which the below two lines are defined is very important so that __%[1]s_prepare_completions
|
||||||
|
# is called first. It is __%[1]s_prepare_completions that sets up the __%[1]s_comp_do_file_comp variable.
|
||||||
|
#
|
||||||
|
# This completion will be run second as complete commands are added FILO.
|
||||||
|
# It triggers file completion choices when __%[1]s_comp_do_file_comp is set.
|
||||||
|
complete -c %[1]s -n 'set --query __%[1]s_comp_do_file_comp'
|
||||||
|
|
||||||
|
# This completion will be run first as complete commands are added FILO.
|
||||||
|
# The call to __%[1]s_prepare_completions will setup both __%[1]s_comp_results abd __%[1]s_comp_do_file_comp.
|
||||||
|
# It provides the program's completion choices.
|
||||||
|
complete -c %[1]s -n '__%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results'
|
||||||
|
|
||||||
|
`, name, compCmd, ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenFishCompletion generates fish completion file and writes to the passed writer.
|
||||||
|
func (c *Command) GenFishCompletion(w io.Writer, includeDesc bool) error {
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
genFishComp(buf, c.Name(), includeDesc)
|
||||||
|
_, err := buf.WriteTo(w)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenFishCompletionFile generates fish completion file.
|
||||||
|
func (c *Command) GenFishCompletionFile(filename string, includeDesc bool) error {
|
||||||
|
outFile, err := os.Create(filename)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer outFile.Close()
|
||||||
|
|
||||||
|
return c.GenFishCompletion(outFile, includeDesc)
|
||||||
|
}
|
||||||
7
vendor/github.com/spf13/cobra/fish_completions.md
generated
vendored
Normal file
7
vendor/github.com/spf13/cobra/fish_completions.md
generated
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
## Generating Fish Completions for your own cobra.Command
|
||||||
|
|
||||||
|
Cobra supports native Fish completions generated from the root `cobra.Command`. You can use the `command.GenFishCompletion()` or `command.GenFishCompletionFile()` functions. You must provide these functions with a parameter indicating if the completions should be annotated with a description; Cobra will provide the description automatically based on usage information. You can choose to make this option configurable by your users.
|
||||||
|
|
||||||
|
### Limitations
|
||||||
|
|
||||||
|
* Custom completions implemented using the `ValidArgsFunction` and `RegisterFlagCompletionFunc()` are supported automatically but the ones implemented in Bash scripting are not.
|
||||||
5
vendor/github.com/spf13/cobra/go.mod
generated
vendored
5
vendor/github.com/spf13/cobra/go.mod
generated
vendored
|
|
@ -3,11 +3,10 @@ module github.com/spf13/cobra
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v0.3.1 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.0
|
||||||
github.com/cpuguy83/go-md2man v1.0.10
|
|
||||||
github.com/inconshreveable/mousetrap v1.0.0
|
github.com/inconshreveable/mousetrap v1.0.0
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/spf13/pflag v1.0.3
|
github.com/spf13/pflag v1.0.3
|
||||||
github.com/spf13/viper v1.3.2
|
github.com/spf13/viper v1.4.0
|
||||||
gopkg.in/yaml.v2 v2.2.2
|
gopkg.in/yaml.v2 v2.2.2
|
||||||
)
|
)
|
||||||
|
|
|
||||||
120
vendor/github.com/spf13/cobra/go.sum
generated
vendored
120
vendor/github.com/spf13/cobra/go.sum
generated
vendored
|
|
@ -1,31 +1,91 @@
|
||||||
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
|
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||||
|
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||||
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
|
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
|
||||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
|
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
|
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
|
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||||
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
|
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
|
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||||
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
|
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
|
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||||
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
|
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||||
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
||||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
||||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
|
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||||
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
||||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||||
|
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||||
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
|
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
||||||
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
||||||
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||||
|
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||||
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
|
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
|
||||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||||
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
||||||
|
|
@ -34,18 +94,56 @@ github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9
|
||||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M=
|
github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU=
|
||||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||||
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
|
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a h1:1n5lsVfiQW3yfsRGu98756EH1YthsFqr/5mxHduZW2A=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
|
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||||
|
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
||||||
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
|
|
||||||
16
vendor/go.uber.org/atomic/.travis.yml
generated
vendored
16
vendor/go.uber.org/atomic/.travis.yml
generated
vendored
|
|
@ -3,9 +3,13 @@ language: go
|
||||||
go_import_path: go.uber.org/atomic
|
go_import_path: go.uber.org/atomic
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- 1.7
|
- 1.11.x
|
||||||
- 1.8
|
- 1.12.x
|
||||||
- 1.9
|
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- go: 1.12.x
|
||||||
|
env: NO_TEST=yes LINT=yes
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
|
|
@ -15,9 +19,9 @@ install:
|
||||||
- make install_ci
|
- make install_ci
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- make test_ci
|
- test -n "$NO_TEST" || make test_ci
|
||||||
- scripts/test-ubergo.sh
|
- test -n "$NO_TEST" || scripts/test-ubergo.sh
|
||||||
- make lint
|
- test -z "$LINT" || make install_lint lint
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
|
|
|
||||||
33
vendor/go.uber.org/atomic/Makefile
generated
vendored
33
vendor/go.uber.org/atomic/Makefile
generated
vendored
|
|
@ -1,24 +1,13 @@
|
||||||
PACKAGES := $(shell glide nv)
|
|
||||||
# Many Go tools take file globs or directories as arguments instead of packages.
|
# Many Go tools take file globs or directories as arguments instead of packages.
|
||||||
PACKAGE_FILES ?= *.go
|
PACKAGE_FILES ?= *.go
|
||||||
|
|
||||||
|
# For pre go1.6
|
||||||
# The linting tools evolve with each Go version, so run them only on the latest
|
|
||||||
# stable release.
|
|
||||||
GO_VERSION := $(shell go version | cut -d " " -f 3)
|
|
||||||
GO_MINOR_VERSION := $(word 2,$(subst ., ,$(GO_VERSION)))
|
|
||||||
LINTABLE_MINOR_VERSIONS := 7 8
|
|
||||||
ifneq ($(filter $(LINTABLE_MINOR_VERSIONS),$(GO_MINOR_VERSION)),)
|
|
||||||
SHOULD_LINT := true
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
export GO15VENDOREXPERIMENT=1
|
export GO15VENDOREXPERIMENT=1
|
||||||
|
|
||||||
|
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
build:
|
build:
|
||||||
go build -i $(PACKAGES)
|
go build -i ./...
|
||||||
|
|
||||||
|
|
||||||
.PHONY: install
|
.PHONY: install
|
||||||
|
|
@ -29,7 +18,7 @@ install:
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:
|
test:
|
||||||
go test -cover -race $(PACKAGES)
|
go test -cover -race ./...
|
||||||
|
|
||||||
|
|
||||||
.PHONY: install_ci
|
.PHONY: install_ci
|
||||||
|
|
@ -37,26 +26,24 @@ install_ci: install
|
||||||
go get github.com/wadey/gocovmerge
|
go get github.com/wadey/gocovmerge
|
||||||
go get github.com/mattn/goveralls
|
go get github.com/mattn/goveralls
|
||||||
go get golang.org/x/tools/cmd/cover
|
go get golang.org/x/tools/cmd/cover
|
||||||
ifdef SHOULD_LINT
|
|
||||||
go get github.com/golang/lint/golint
|
.PHONY: install_lint
|
||||||
endif
|
install_lint:
|
||||||
|
go get golang.org/x/lint/golint
|
||||||
|
|
||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint:
|
lint:
|
||||||
ifdef SHOULD_LINT
|
|
||||||
@rm -rf lint.log
|
@rm -rf lint.log
|
||||||
@echo "Checking formatting..."
|
@echo "Checking formatting..."
|
||||||
@gofmt -d -s $(PACKAGE_FILES) 2>&1 | tee lint.log
|
@gofmt -d -s $(PACKAGE_FILES) 2>&1 | tee lint.log
|
||||||
@echo "Checking vet..."
|
@echo "Checking vet..."
|
||||||
@$(foreach dir,$(PACKAGE_FILES),go tool vet $(dir) 2>&1 | tee -a lint.log;)
|
@go vet ./... 2>&1 | tee -a lint.log;)
|
||||||
@echo "Checking lint..."
|
@echo "Checking lint..."
|
||||||
@$(foreach dir,$(PKGS),golint $(dir) 2>&1 | tee -a lint.log;)
|
@golint $$(go list ./...) 2>&1 | tee -a lint.log
|
||||||
@echo "Checking for unresolved FIXMEs..."
|
@echo "Checking for unresolved FIXMEs..."
|
||||||
@git grep -i fixme | grep -v -e vendor -e Makefile | tee -a lint.log
|
@git grep -i fixme | grep -v -e vendor -e Makefile | tee -a lint.log
|
||||||
@[ ! -s lint.log ]
|
@[ ! -s lint.log ]
|
||||||
else
|
|
||||||
@echo "Skipping linters on" $(GO_VERSION)
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: test_ci
|
.PHONY: test_ci
|
||||||
|
|
|
||||||
6
vendor/go.uber.org/atomic/README.md
generated
vendored
6
vendor/go.uber.org/atomic/README.md
generated
vendored
|
|
@ -23,13 +23,13 @@ See the [documentation][doc] for a complete API specification.
|
||||||
## Development Status
|
## Development Status
|
||||||
Stable.
|
Stable.
|
||||||
|
|
||||||
<hr>
|
___
|
||||||
Released under the [MIT License](LICENSE.txt).
|
Released under the [MIT License](LICENSE.txt).
|
||||||
|
|
||||||
[doc-img]: https://godoc.org/github.com/uber-go/atomic?status.svg
|
[doc-img]: https://godoc.org/github.com/uber-go/atomic?status.svg
|
||||||
[doc]: https://godoc.org/go.uber.org/atomic
|
[doc]: https://godoc.org/go.uber.org/atomic
|
||||||
[ci-img]: https://travis-ci.org/uber-go/atomic.svg?branch=master
|
[ci-img]: https://travis-ci.com/uber-go/atomic.svg?branch=master
|
||||||
[ci]: https://travis-ci.org/uber-go/atomic
|
[ci]: https://travis-ci.com/uber-go/atomic
|
||||||
[cov-img]: https://codecov.io/gh/uber-go/atomic/branch/master/graph/badge.svg
|
[cov-img]: https://codecov.io/gh/uber-go/atomic/branch/master/graph/badge.svg
|
||||||
[cov]: https://codecov.io/gh/uber-go/atomic
|
[cov]: https://codecov.io/gh/uber-go/atomic
|
||||||
[reportcard-img]: https://goreportcard.com/badge/go.uber.org/atomic
|
[reportcard-img]: https://goreportcard.com/badge/go.uber.org/atomic
|
||||||
|
|
|
||||||
55
vendor/go.uber.org/atomic/error.go
generated
vendored
Normal file
55
vendor/go.uber.org/atomic/error.go
generated
vendored
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
// Copyright (c) 2016 Uber Technologies, Inc.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
package atomic
|
||||||
|
|
||||||
|
// Error is an atomic type-safe wrapper around Value for errors
|
||||||
|
type Error struct{ v Value }
|
||||||
|
|
||||||
|
// errorHolder is non-nil holder for error object.
|
||||||
|
// atomic.Value panics on saving nil object, so err object needs to be
|
||||||
|
// wrapped with valid object first.
|
||||||
|
type errorHolder struct{ err error }
|
||||||
|
|
||||||
|
// NewError creates new atomic error object
|
||||||
|
func NewError(err error) *Error {
|
||||||
|
e := &Error{}
|
||||||
|
if err != nil {
|
||||||
|
e.Store(err)
|
||||||
|
}
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load atomically loads the wrapped error
|
||||||
|
func (e *Error) Load() error {
|
||||||
|
v := e.v.Load()
|
||||||
|
if v == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
eh := v.(errorHolder)
|
||||||
|
return eh.err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store atomically stores error.
|
||||||
|
// NOTE: a holder object is allocated on each Store call.
|
||||||
|
func (e *Error) Store(err error) {
|
||||||
|
e.v.Store(errorHolder{err: err})
|
||||||
|
}
|
||||||
11
vendor/golang.org/x/crypto/cryptobyte/asn1.go
generated
vendored
11
vendor/golang.org/x/crypto/cryptobyte/asn1.go
generated
vendored
|
|
@ -81,7 +81,7 @@ func (b *Builder) AddASN1BigInt(n *big.Int) {
|
||||||
for i := range bytes {
|
for i := range bytes {
|
||||||
bytes[i] ^= 0xff
|
bytes[i] ^= 0xff
|
||||||
}
|
}
|
||||||
if bytes[0]&0x80 == 0 {
|
if len(bytes) == 0 || bytes[0]&0x80 == 0 {
|
||||||
c.add(0xff)
|
c.add(0xff)
|
||||||
}
|
}
|
||||||
c.add(bytes...)
|
c.add(bytes...)
|
||||||
|
|
@ -230,12 +230,12 @@ func (b *Builder) AddASN1(tag asn1.Tag, f BuilderContinuation) {
|
||||||
|
|
||||||
// String
|
// String
|
||||||
|
|
||||||
// ReadASN1Boolean decodes an ASN.1 INTEGER and converts it to a boolean
|
// ReadASN1Boolean decodes an ASN.1 BOOLEAN and converts it to a boolean
|
||||||
// representation into out and advances. It reports whether the read
|
// representation into out and advances. It reports whether the read
|
||||||
// was successful.
|
// was successful.
|
||||||
func (s *String) ReadASN1Boolean(out *bool) bool {
|
func (s *String) ReadASN1Boolean(out *bool) bool {
|
||||||
var bytes String
|
var bytes String
|
||||||
if !s.ReadASN1(&bytes, asn1.INTEGER) || len(bytes) != 1 {
|
if !s.ReadASN1(&bytes, asn1.BOOLEAN) || len(bytes) != 1 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -470,7 +470,8 @@ func (s *String) ReadASN1GeneralizedTime(out *time.Time) bool {
|
||||||
// It reports whether the read was successful.
|
// It reports whether the read was successful.
|
||||||
func (s *String) ReadASN1BitString(out *encoding_asn1.BitString) bool {
|
func (s *String) ReadASN1BitString(out *encoding_asn1.BitString) bool {
|
||||||
var bytes String
|
var bytes String
|
||||||
if !s.ReadASN1(&bytes, asn1.BIT_STRING) || len(bytes) == 0 {
|
if !s.ReadASN1(&bytes, asn1.BIT_STRING) || len(bytes) == 0 ||
|
||||||
|
len(bytes)*8/8 != len(bytes) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -740,7 +741,7 @@ func (s *String) readASN1(out *String, outTag *asn1.Tag, skipHeader bool) bool {
|
||||||
length = headerLen + len32
|
length = headerLen + len32
|
||||||
}
|
}
|
||||||
|
|
||||||
if uint32(int(length)) != length || !s.ReadBytes((*[]byte)(out), int(length)) {
|
if int(length) < 0 || !s.ReadBytes((*[]byte)(out), int(length)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if skipHeader && !out.Skip(int(headerLen)) {
|
if skipHeader && !out.Skip(int(headerLen)) {
|
||||||
|
|
|
||||||
7
vendor/golang.org/x/crypto/cryptobyte/string.go
generated
vendored
7
vendor/golang.org/x/crypto/cryptobyte/string.go
generated
vendored
|
|
@ -24,7 +24,7 @@ type String []byte
|
||||||
// read advances a String by n bytes and returns them. If less than n bytes
|
// read advances a String by n bytes and returns them. If less than n bytes
|
||||||
// remain, it returns nil.
|
// remain, it returns nil.
|
||||||
func (s *String) read(n int) []byte {
|
func (s *String) read(n int) []byte {
|
||||||
if len(*s) < n {
|
if len(*s) < n || n < 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
v := (*s)[:n]
|
v := (*s)[:n]
|
||||||
|
|
@ -105,11 +105,6 @@ func (s *String) readLengthPrefixed(lenLen int, outChild *String) bool {
|
||||||
length = length << 8
|
length = length << 8
|
||||||
length = length | uint32(b)
|
length = length | uint32(b)
|
||||||
}
|
}
|
||||||
if int(length) < 0 {
|
|
||||||
// This currently cannot overflow because we read uint24 at most, but check
|
|
||||||
// anyway in case that changes in the future.
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
v := s.read(int(length))
|
v := s.read(int(length))
|
||||||
if v == nil {
|
if v == nil {
|
||||||
return false
|
return false
|
||||||
|
|
|
||||||
39
vendor/golang.org/x/crypto/poly1305/bits_compat.go
generated
vendored
Normal file
39
vendor/golang.org/x/crypto/poly1305/bits_compat.go
generated
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
// Copyright 2019 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build !go1.13
|
||||||
|
|
||||||
|
package poly1305
|
||||||
|
|
||||||
|
// Generic fallbacks for the math/bits intrinsics, copied from
|
||||||
|
// src/math/bits/bits.go. They were added in Go 1.12, but Add64 and Sum64 had
|
||||||
|
// variable time fallbacks until Go 1.13.
|
||||||
|
|
||||||
|
func bitsAdd64(x, y, carry uint64) (sum, carryOut uint64) {
|
||||||
|
sum = x + y + carry
|
||||||
|
carryOut = ((x & y) | ((x | y) &^ sum)) >> 63
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func bitsSub64(x, y, borrow uint64) (diff, borrowOut uint64) {
|
||||||
|
diff = x - y - borrow
|
||||||
|
borrowOut = ((^x & y) | (^(x ^ y) & diff)) >> 63
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func bitsMul64(x, y uint64) (hi, lo uint64) {
|
||||||
|
const mask32 = 1<<32 - 1
|
||||||
|
x0 := x & mask32
|
||||||
|
x1 := x >> 32
|
||||||
|
y0 := y & mask32
|
||||||
|
y1 := y >> 32
|
||||||
|
w0 := x0 * y0
|
||||||
|
t := x1*y0 + w0>>32
|
||||||
|
w1 := t & mask32
|
||||||
|
w2 := t >> 32
|
||||||
|
w1 += x0 * y1
|
||||||
|
hi = x1*y1 + w2 + w1>>32
|
||||||
|
lo = x * y
|
||||||
|
return
|
||||||
|
}
|
||||||
21
vendor/golang.org/x/crypto/poly1305/bits_go1.13.go
generated
vendored
Normal file
21
vendor/golang.org/x/crypto/poly1305/bits_go1.13.go
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Copyright 2019 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build go1.13
|
||||||
|
|
||||||
|
package poly1305
|
||||||
|
|
||||||
|
import "math/bits"
|
||||||
|
|
||||||
|
func bitsAdd64(x, y, carry uint64) (sum, carryOut uint64) {
|
||||||
|
return bits.Add64(x, y, carry)
|
||||||
|
}
|
||||||
|
|
||||||
|
func bitsSub64(x, y, borrow uint64) (diff, borrowOut uint64) {
|
||||||
|
return bits.Sub64(x, y, borrow)
|
||||||
|
}
|
||||||
|
|
||||||
|
func bitsMul64(x, y uint64) (hi, lo uint64) {
|
||||||
|
return bits.Mul64(x, y)
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue