mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-04-26 21:44:44 +00:00
Update Dependencies (#486)
* github.com/Microsoft/go-winio * github.com/bradrydzewski/togo * github.com/containerd/containerd * github.com/docker/cli * github.com/docker/docker * github.com/docker/docker-credential-helpers * github.com/franela/goblin * github.com/google/go-github/v39 * github.com/joho/godotenv * github.com/lib/pq * github.com/moby/moby * github.com/prometheus/client_golang * github.com/tevino/abool * github.com/woodpecker-ci/togo * github.com/xanzy/go-gitlab * github.com/xeipuuv/gojsonschema * github.com/mattn/go-sqlite3
This commit is contained in:
parent
965235e421
commit
91d37be1da
292 changed files with 36214 additions and 24848 deletions
45
go.mod
45
go.mod
|
@ -4,60 +4,63 @@ go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
code.gitea.io/sdk/gitea v0.15.0
|
code.gitea.io/sdk/gitea v0.15.0
|
||||||
github.com/Microsoft/go-winio v0.5.0 // indirect
|
github.com/Microsoft/go-winio v0.5.1 // indirect
|
||||||
github.com/bmatcuk/doublestar v1.3.4 // indirect
|
|
||||||
github.com/bmatcuk/doublestar/v4 v4.0.2
|
github.com/bmatcuk/doublestar/v4 v4.0.2
|
||||||
github.com/bradrydzewski/togo v0.0.0-20180401185031-50a0e4726e74 // indirect
|
github.com/containerd/containerd v1.5.7 // indirect
|
||||||
github.com/containerd/containerd v1.5.5 // indirect
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
||||||
github.com/docker/cli v0.0.0-20200303215952-eb310fca4956
|
github.com/docker/cli v20.10.10+incompatible
|
||||||
github.com/docker/distribution v2.7.1+incompatible
|
github.com/docker/distribution v2.7.1+incompatible
|
||||||
github.com/docker/docker v20.10.8+incompatible
|
github.com/docker/docker v20.10.10+incompatible
|
||||||
github.com/docker/docker-credential-helpers v0.6.3 // indirect
|
github.com/docker/docker-credential-helpers v0.6.4 // indirect
|
||||||
github.com/docker/go-connections v0.4.0 // indirect
|
github.com/docker/go-connections v0.4.0 // indirect
|
||||||
github.com/docker/libcompose v0.4.0
|
github.com/docker/libcompose v0.4.0
|
||||||
github.com/drone/envsubst v1.0.3
|
github.com/drone/envsubst v1.0.3
|
||||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect
|
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect
|
||||||
github.com/franela/goblin v0.0.0-20200512143142-b260c999b2d7
|
github.com/franela/goblin v0.0.0-20211003143422-0a4f594942bf
|
||||||
github.com/ghodss/yaml v1.0.0
|
github.com/ghodss/yaml v1.0.0
|
||||||
github.com/gin-gonic/gin v1.7.4
|
github.com/gin-gonic/gin v1.7.4
|
||||||
github.com/go-playground/validator/v10 v10.9.0 // indirect
|
github.com/go-playground/validator/v10 v10.9.0 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.6.0
|
github.com/go-sql-driver/mysql v1.6.0
|
||||||
github.com/gogits/go-gogs-client v0.0.0-20210131175652-1d7215cd8d85
|
github.com/gogits/go-gogs-client v0.0.0-20210131175652-1d7215cd8d85
|
||||||
github.com/golang-jwt/jwt/v4 v4.1.0
|
github.com/golang-jwt/jwt/v4 v4.1.0
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
github.com/google/go-github/v39 v39.2.0
|
||||||
github.com/google/go-github/v39 v39.1.0
|
github.com/gorilla/mux v1.7.3 // indirect
|
||||||
github.com/gorilla/securecookie v1.1.1
|
github.com/gorilla/securecookie v1.1.1
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.0 // indirect
|
||||||
github.com/hashicorp/go-version v1.3.0 // indirect
|
github.com/hashicorp/go-version v1.3.0 // indirect
|
||||||
github.com/joho/godotenv v1.3.0
|
github.com/joho/godotenv v1.4.0
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/kr/pretty v0.3.0
|
github.com/kr/pretty v0.3.0
|
||||||
github.com/lib/pq v1.5.2
|
github.com/lib/pq v1.10.3
|
||||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
github.com/mattn/go-sqlite3 v1.14.9
|
||||||
github.com/moby/moby v20.10.8+incompatible
|
github.com/moby/moby v20.10.10+incompatible
|
||||||
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6
|
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6
|
||||||
github.com/morikuni/aec v1.0.0 // indirect
|
github.com/morikuni/aec v1.0.0 // indirect
|
||||||
github.com/mrjones/oauth v0.0.0-20190623134757-126b35219450
|
github.com/mrjones/oauth v0.0.0-20190623134757-126b35219450
|
||||||
github.com/prometheus/client_golang v1.7.1
|
github.com/prometheus/client_golang v1.11.0
|
||||||
github.com/rs/zerolog v1.25.0
|
github.com/rs/zerolog v1.25.0
|
||||||
github.com/russross/meddler v1.0.1
|
github.com/russross/meddler v1.0.1
|
||||||
github.com/stretchr/objx v0.3.0 // indirect
|
github.com/stretchr/objx v0.3.0 // indirect
|
||||||
github.com/stretchr/testify v1.7.0
|
github.com/stretchr/testify v1.7.0
|
||||||
github.com/tevino/abool v0.0.0-20170917061928-9b9efcf221b5
|
github.com/tevino/abool v1.2.0
|
||||||
github.com/ugorji/go v1.2.6 // indirect
|
github.com/ugorji/go v1.2.6 // indirect
|
||||||
github.com/urfave/cli/v2 v2.3.0
|
github.com/urfave/cli/v2 v2.3.0
|
||||||
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915
|
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915
|
||||||
github.com/woodpecker-ci/togo v0.0.0-20180401185031-50a0e4726e74
|
github.com/woodpecker-ci/togo v0.0.0-20211018210511-a36120f299b0
|
||||||
github.com/xanzy/go-gitlab v0.51.1
|
github.com/xanzy/go-gitlab v0.51.1
|
||||||
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
||||||
github.com/xeipuuv/gojsonschema v1.2.0
|
github.com/xeipuuv/gojsonschema v1.2.0
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519
|
||||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a
|
golang.org/x/net v0.0.0-20211020060615-d418f374d309
|
||||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
|
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
golang.org/x/sys v0.0.0-20210923061019-b8560ed6a9b7 // indirect
|
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 // indirect
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.3.7 // indirect
|
||||||
google.golang.org/grpc v1.33.2
|
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
|
||||||
|
google.golang.org/genproto v0.0.0-20211027162914-98a5263abeca // indirect
|
||||||
|
google.golang.org/grpc v1.41.0
|
||||||
google.golang.org/protobuf v1.27.1
|
google.golang.org/protobuf v1.27.1
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
||||||
)
|
)
|
||||||
|
|
193
go.sum
193
go.sum
|
@ -10,17 +10,27 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T
|
||||||
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
|
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
|
||||||
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
|
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
|
||||||
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
|
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
|
||||||
|
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
|
||||||
|
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
|
||||||
|
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
|
||||||
|
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||||
|
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
||||||
|
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||||
|
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||||
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
||||||
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
||||||
|
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
|
||||||
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
||||||
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
|
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
|
||||||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
||||||
|
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
||||||
|
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||||
code.gitea.io/gitea-vet v0.2.1/go.mod h1:zcNbT/aJEmivCAhfmkHOlT645KNOf9W2KnkLgFjGGfE=
|
code.gitea.io/gitea-vet v0.2.1/go.mod h1:zcNbT/aJEmivCAhfmkHOlT645KNOf9W2KnkLgFjGGfE=
|
||||||
code.gitea.io/sdk/gitea v0.15.0 h1:tsNhxDM/2N1Ohv1Xq5UWrht/esg0WmtRj4wsHVHriTg=
|
code.gitea.io/sdk/gitea v0.15.0 h1:tsNhxDM/2N1Ohv1Xq5UWrht/esg0WmtRj4wsHVHriTg=
|
||||||
code.gitea.io/sdk/gitea v0.15.0/go.mod h1:klY2LVI3s3NChzIk/MzMn7G1FHrfU7qd63iSMVoHRBA=
|
code.gitea.io/sdk/gitea v0.15.0/go.mod h1:klY2LVI3s3NChzIk/MzMn7G1FHrfU7qd63iSMVoHRBA=
|
||||||
|
@ -49,8 +59,8 @@ github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugX
|
||||||
github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||||
github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||||
github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||||
github.com/Microsoft/go-winio v0.5.0 h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXGjwU=
|
github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY=
|
||||||
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||||
github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
|
github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
|
||||||
github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
|
github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
|
||||||
github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
|
github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
|
||||||
|
@ -58,7 +68,7 @@ github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg3
|
||||||
github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
|
github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
|
||||||
github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00=
|
github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00=
|
||||||
github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
|
github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
|
||||||
github.com/Microsoft/hcsshim v0.8.18/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
||||||
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
|
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
|
||||||
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
|
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
|
||||||
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=
|
||||||
|
@ -70,7 +80,9 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy
|
||||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/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/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
|
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
|
||||||
github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
|
github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
|
||||||
|
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||||
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/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
|
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
|
||||||
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
|
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
|
||||||
|
@ -84,13 +96,9 @@ github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngE
|
||||||
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
|
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
|
||||||
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||||
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||||
github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0=
|
|
||||||
github.com/bmatcuk/doublestar v1.3.4/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE=
|
|
||||||
github.com/bmatcuk/doublestar/v4 v4.0.2 h1:X0krlUVAVmtr2cRoTqR8aDMrDqnB36ht8wpWTiQ3jsA=
|
github.com/bmatcuk/doublestar/v4 v4.0.2 h1:X0krlUVAVmtr2cRoTqR8aDMrDqnB36ht8wpWTiQ3jsA=
|
||||||
github.com/bmatcuk/doublestar/v4 v4.0.2/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
|
github.com/bmatcuk/doublestar/v4 v4.0.2/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
|
||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||||
github.com/bradrydzewski/togo v0.0.0-20180401185031-50a0e4726e74 h1:fE72rAOk9gpizJL3mNv+Ez+3yt/GCoZWtkKEPLTZvvM=
|
|
||||||
github.com/bradrydzewski/togo v0.0.0-20180401185031-50a0e4726e74/go.mod h1:+zgWTTgi3saXD5N9SSA+LYteMbFoIJKJ9WEPXoV0jQA=
|
|
||||||
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
|
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
|
||||||
github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
|
github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
|
||||||
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
|
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
|
||||||
|
@ -113,6 +121,9 @@ github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJ
|
||||||
github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
|
github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
|
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||||
|
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
|
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
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/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=
|
github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=
|
||||||
github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU=
|
github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU=
|
||||||
|
@ -146,8 +157,8 @@ github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo
|
||||||
github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI=
|
github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI=
|
||||||
github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s=
|
github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s=
|
||||||
github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g=
|
github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g=
|
||||||
github.com/containerd/containerd v1.5.5 h1:q1gxsZsGZ8ddVe98yO6pR21b5xQSMiR61lD0W96pgQo=
|
github.com/containerd/containerd v1.5.7 h1:rQyoYtj4KddB3bxG6SAqd4+08gePNyJjRqvOIfV3rkM=
|
||||||
github.com/containerd/containerd v1.5.5/go.mod h1:oSTh0QpT1w6jYcGmbiSbxv9OSQYaa88mPyWIuU79zyo=
|
github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c=
|
||||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
|
@ -225,6 +236,7 @@ github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1S
|
||||||
github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
|
github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
|
||||||
github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8=
|
github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8=
|
||||||
github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I=
|
github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I=
|
||||||
|
github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg=
|
||||||
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=
|
||||||
|
@ -233,16 +245,16 @@ github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11
|
||||||
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/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||||
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
|
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
|
||||||
github.com/docker/cli v0.0.0-20200303215952-eb310fca4956 h1:5/ZRsUbguX7xFNLlbxVQY/yhD3Psy+vylKZrNme5BJs=
|
github.com/docker/cli v20.10.10+incompatible h1:kcbwdgWbrBOH8QwQzaJmyriHwF7XIl4HT1qh0HTRys4=
|
||||||
github.com/docker/cli v0.0.0-20200303215952-eb310fca4956/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
github.com/docker/cli v20.10.10+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
||||||
github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
|
github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
|
||||||
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v20.10.8+incompatible h1:RVqD337BgQicVCzYrrlhLDWhq6OAD2PJDUg2LsEUvKM=
|
github.com/docker/docker v20.10.10+incompatible h1:GKkP0T7U4ks6X3lmmHKC2QDprnpRJor2Z5a8m62R9ZM=
|
||||||
github.com/docker/docker v20.10.8+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.10+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ=
|
github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o=
|
||||||
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
|
github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c=
|
||||||
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
|
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
|
||||||
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
|
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
|
||||||
github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
|
github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
|
||||||
|
@ -266,14 +278,17 @@ github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT
|
||||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v4.9.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/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
|
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
|
||||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
||||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||||
github.com/franela/goblin v0.0.0-20200512143142-b260c999b2d7 h1:c+yFJqv4nevyq79RLANFFbg8nAZYz19jocnUUFk8oOA=
|
github.com/franela/goblin v0.0.0-20211003143422-0a4f594942bf h1:NrF81UtW8gG2LBGkXFQFqlfNnvMt9WdB46sfdJY4oqc=
|
||||||
github.com/franela/goblin v0.0.0-20200512143142-b260c999b2d7/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo=
|
github.com/franela/goblin v0.0.0-20211003143422-0a4f594942bf/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo=
|
||||||
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
|
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
|
||||||
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/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
|
@ -292,8 +307,10 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
|
||||||
github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||||
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-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
|
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||||
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-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
|
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||||
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-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||||
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=
|
||||||
|
@ -346,6 +363,8 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
|
||||||
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
|
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
|
||||||
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||||
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||||
|
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||||
|
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
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/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
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=
|
||||||
|
@ -369,6 +388,7 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
|
||||||
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/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
@ -376,19 +396,22 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-github/v39 v39.1.0 h1:1vf4gM0D1e+Df2HMxaYC3+o9+Huj3ywGTtWc3VVYaDA=
|
github.com/google/go-github/v39 v39.2.0 h1:rNNM311XtPOz5rDdsJXAp2o8F67X9FnROXTvto3aSnQ=
|
||||||
github.com/google/go-github/v39 v39.1.0/go.mod h1:C1s8C5aCC9L+JXIYpJM5GYytdX52vC1bLvHEF1IhBrE=
|
github.com/google/go-github/v39 v39.2.0/go.mod h1:C1s8C5aCC9L+JXIYpJM5GYytdX52vC1bLvHEF1IhBrE=
|
||||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||||
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
|
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
|
||||||
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
||||||
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/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
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/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||||
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/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
||||||
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
|
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
|
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
@ -399,8 +422,9 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m
|
||||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||||
github.com/gorilla/mux v1.7.2 h1:zoNxOV7WjqXptQOVngLmcSQgXmgk4NMz1HibBchjl/I=
|
|
||||||
github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
|
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
|
||||||
|
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
|
github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
|
||||||
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
|
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
|
||||||
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=
|
||||||
|
@ -412,16 +436,19 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de
|
||||||
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.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
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/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||||
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=
|
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
||||||
github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
|
github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
|
||||||
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
||||||
github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
|
github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
|
||||||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||||
github.com/hashicorp/go-retryablehttp v0.6.8 h1:92lWxgpa+fF3FozM4B3UZtHZMJX8T5XT+TFdCxsPyWs=
|
|
||||||
github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
||||||
github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||||
github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw=
|
github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw=
|
||||||
github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||||
|
@ -434,23 +461,27 @@ github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ
|
||||||
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||||
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||||
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||||
|
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
|
github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
|
||||||
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||||
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||||
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
|
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
|
||||||
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
|
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||||
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/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||||
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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
|
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
|
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
|
||||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
||||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||||
|
@ -474,8 +505,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||||
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
||||||
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
||||||
github.com/lib/pq v1.5.2 h1:yTSXVswvWUOQ3k1sd7vJfDrbSl8lKuscqFJRqjC0ifw=
|
github.com/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg=
|
||||||
github.com/lib/pq v1.5.2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
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-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=
|
||||||
|
@ -489,8 +520,8 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
|
||||||
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/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
|
github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
|
||||||
github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
|
github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA=
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
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=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
|
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||||
|
@ -500,8 +531,8 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk
|
||||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
||||||
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
||||||
github.com/moby/moby v20.10.8+incompatible h1:Bq+xfiSjbCmVwhvm0vWDdQt0s/p99LF1DrcuQVrJzjc=
|
github.com/moby/moby v20.10.10+incompatible h1:KriJ8Zcm+NrFlaI0HNi2GtbfsT6J33o+XHmpAWZ6E7M=
|
||||||
github.com/moby/moby v20.10.8+incompatible/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc=
|
github.com/moby/moby v20.10.10+incompatible/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc=
|
||||||
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
||||||
|
@ -523,8 +554,10 @@ github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2
|
||||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||||
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/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/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/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
|
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
|
||||||
|
github.com/nicksnyder/go-i18n v1.10.1/go.mod h1:e4Di5xjP9oTVrC6y3C7C0HoSYXjSbhh/dU0eUV32nB4=
|
||||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
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=
|
||||||
|
@ -554,7 +587,7 @@ github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59P
|
||||||
github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||||
github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||||
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
|
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
|
||||||
github.com/opencontainers/runc v1.0.1/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
||||||
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
|
@ -582,8 +615,9 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
|
||||||
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||||
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_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||||
github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA=
|
|
||||||
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
||||||
|
github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
|
||||||
|
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
|
||||||
github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/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-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
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=
|
||||||
|
@ -595,8 +629,9 @@ github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7q
|
||||||
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
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.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
||||||
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/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||||
|
github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ=
|
||||||
|
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
|
||||||
github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/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-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.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
@ -611,6 +646,7 @@ github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3x
|
||||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
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/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||||
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
|
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
|
||||||
|
@ -664,6 +700,7 @@ github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRci
|
||||||
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/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
@ -671,8 +708,8 @@ github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG
|
||||||
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||||
github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
|
github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
|
||||||
github.com/tevino/abool v0.0.0-20170917061928-9b9efcf221b5 h1:hNna6Fi0eP1f2sMBe/rJicDmaHmoXGe1Ta84FPYHLuE=
|
github.com/tevino/abool v1.2.0 h1:heAkClL8H6w+mK5md9dzsuohKeXHUpY7Vw0ZCKW+huA=
|
||||||
github.com/tevino/abool v0.0.0-20170917061928-9b9efcf221b5/go.mod h1:f1SCnEOt6sc3fOJfPQDRDzHOtSXuTtnz0ImG9kPRDV0=
|
github.com/tevino/abool v1.2.0/go.mod h1:qc66Pna1RiIsPa7O4Egxxs9OqkuxDX55zznh9K07Tzg=
|
||||||
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/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 v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
|
@ -685,8 +722,9 @@ github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxW
|
||||||
github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||||
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/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo=
|
|
||||||
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
|
github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=
|
||||||
|
github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
|
github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
|
||||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||||
github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
|
github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
|
||||||
|
@ -699,12 +737,13 @@ github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT
|
||||||
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
|
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
|
||||||
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915 h1:9zBOoKSR9CBeYoKQv6LFIuImg8lorCjh8XzK72bJMRg=
|
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915 h1:9zBOoKSR9CBeYoKQv6LFIuImg8lorCjh8XzK72bJMRg=
|
||||||
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915/go.mod h1:PbzlZ93HrA1cf16OUP1vckAPq57gtF+ccnwZeDkmC9s=
|
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915/go.mod h1:PbzlZ93HrA1cf16OUP1vckAPq57gtF+ccnwZeDkmC9s=
|
||||||
github.com/woodpecker-ci/togo v0.0.0-20180401185031-50a0e4726e74 h1:q/tWgA3hMWrAQqsS4yfhc0+w4RevBGr9ghem/bFFDRY=
|
github.com/woodpecker-ci/togo v0.0.0-20211018210511-a36120f299b0 h1:jP4WIdiQAwP72PPJpVY5gpJtH/u4g0R+2erPR8l5Fa8=
|
||||||
github.com/woodpecker-ci/togo v0.0.0-20180401185031-50a0e4726e74/go.mod h1:lykh/ei/caPO6sv4NN+pqnDTo8kEKhZcnhafN8GhGNs=
|
github.com/woodpecker-ci/togo v0.0.0-20211018210511-a36120f299b0/go.mod h1:L34A0IDEjrqlTTuxfKhRsY8S1drgpLh1O7GtHAnt8Xg=
|
||||||
github.com/xanzy/go-gitlab v0.51.1 h1:wWKLalwx4omxFoHh3PLs9zDgAD4GXDP/uoxwMRCSiWM=
|
github.com/xanzy/go-gitlab v0.51.1 h1:wWKLalwx4omxFoHh3PLs9zDgAD4GXDP/uoxwMRCSiWM=
|
||||||
github.com/xanzy/go-gitlab v0.51.1/go.mod h1:Q+hQhV508bDPoBijv7YjK/Lvlb4PhVhJdKqXVQrUoAE=
|
github.com/xanzy/go-gitlab v0.51.1/go.mod h1:Q+hQhV508bDPoBijv7YjK/Lvlb4PhVhJdKqXVQrUoAE=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
|
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||||
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
|
||||||
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
|
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
|
||||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
|
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
|
||||||
github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
|
github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
|
||||||
|
@ -714,6 +753,7 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q
|
||||||
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=
|
||||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
|
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
|
||||||
|
@ -728,6 +768,8 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
|
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
|
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||||
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/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
|
@ -798,6 +840,7 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR
|
||||||
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-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/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-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/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=
|
||||||
|
@ -809,28 +852,36 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
|
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a h1:bRuuGXV8wwSdGTB+CtJf+FjgO1APK1CoO39T4BN/XBw=
|
golang.org/x/net v0.0.0-20211020060615-d418f374d309 h1:A0lJIi+hcTR6aajJH4YqKWwohY4aW9RO7oRMcdv+HKI=
|
||||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
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-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/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/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 h1:B333XXssMuKQeBwiNODx4TupZy7bf4sxFZnN2ZOcvUE=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
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-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/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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
@ -881,9 +932,16 @@ golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
@ -894,18 +952,20 @@ golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210923061019-b8560ed6a9b7 h1:c20P3CcPbopVp2f7099WLOqSNKURf30Z0uq66HpijZY=
|
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 h1:2B5p2L5IfGiD7+b9BOoRMC6DgObAVZV+Fsp050NqXik=
|
||||||
golang.org/x/sys v0.0.0-20210923061019-b8560ed6a9b7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/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.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
@ -913,6 +973,7 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
|
||||||
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/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
@ -920,8 +981,9 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb
|
||||||
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=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
|
|
||||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
|
||||||
|
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/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-20180221164845-07fd8470d635/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-20180917221912-90fa682c2a6e/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=
|
||||||
|
@ -956,9 +1018,19 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK
|
||||||
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||||
|
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||||
golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
|
golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
|
||||||
|
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
|
||||||
|
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||||
|
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||||
|
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=
|
golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=
|
||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
|
@ -977,13 +1049,20 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb
|
||||||
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
|
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
|
||||||
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
|
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
|
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
|
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||||
|
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||||
|
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
|
||||||
|
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
|
||||||
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.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
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=
|
||||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
||||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
|
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
|
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
|
||||||
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
|
google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
|
||||||
|
@ -1006,10 +1085,22 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx
|
||||||
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
|
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
|
||||||
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8=
|
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||||
|
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
|
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
|
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
|
google.golang.org/genproto v0.0.0-20211027162914-98a5263abeca h1:+e+aQDO4/c9KaG8PXWHTc6/+Du6kz+BKcXCSnV4SSTE=
|
||||||
|
google.golang.org/genproto v0.0.0-20211027162914-98a5263abeca/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
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.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
|
@ -1022,9 +1113,16 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
|
||||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
|
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
|
||||||
|
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||||
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||||
google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=
|
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||||
|
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
|
||||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||||
|
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||||
|
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||||
|
google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E=
|
||||||
|
google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
@ -1082,6 +1180,7 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh
|
||||||
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=
|
||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
|
k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
|
||||||
k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
|
k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
|
||||||
k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
|
k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
|
||||||
|
|
27
vendor/github.com/Microsoft/go-winio/README.md
generated
vendored
27
vendor/github.com/Microsoft/go-winio/README.md
generated
vendored
|
@ -11,12 +11,27 @@ package.
|
||||||
|
|
||||||
Please see the LICENSE file for licensing information.
|
Please see the LICENSE file for licensing information.
|
||||||
|
|
||||||
This project has adopted the [Microsoft Open Source Code of
|
## Contributing
|
||||||
Conduct](https://opensource.microsoft.com/codeofconduct/). For more information
|
|
||||||
see the [Code of Conduct
|
|
||||||
FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact
|
|
||||||
[opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional
|
|
||||||
questions or comments.
|
|
||||||
|
|
||||||
|
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA)
|
||||||
|
declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.
|
||||||
|
|
||||||
|
When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR
|
||||||
|
appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
|
||||||
|
|
||||||
|
We also require that contributors sign their commits using git commit -s or git commit --signoff to certify they either authored the work themselves
|
||||||
|
or otherwise have permission to use it in this project. Please see https://developercertificate.org/ for more info, as well as to make sure that you can
|
||||||
|
attest to the rules listed. Our CI uses the DCO Github app to ensure that all commits in a given PR are signed-off.
|
||||||
|
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
|
||||||
|
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
|
||||||
|
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Special Thanks
|
||||||
Thanks to natefinch for the inspiration for this library. See https://github.com/natefinch/npipe
|
Thanks to natefinch for the inspiration for this library. See https://github.com/natefinch/npipe
|
||||||
for another named pipe implementation.
|
for another named pipe implementation.
|
||||||
|
|
32
vendor/github.com/bmatcuk/doublestar/.gitignore
generated
vendored
32
vendor/github.com/bmatcuk/doublestar/.gitignore
generated
vendored
|
@ -1,32 +0,0 @@
|
||||||
# vi
|
|
||||||
*~
|
|
||||||
*.swp
|
|
||||||
*.swo
|
|
||||||
|
|
||||||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
|
||||||
*.o
|
|
||||||
*.a
|
|
||||||
*.so
|
|
||||||
|
|
||||||
# Folders
|
|
||||||
_obj
|
|
||||||
_test
|
|
||||||
|
|
||||||
# Architecture specific extensions/prefixes
|
|
||||||
*.[568vq]
|
|
||||||
[568vq].out
|
|
||||||
|
|
||||||
*.cgo1.go
|
|
||||||
*.cgo2.c
|
|
||||||
_cgo_defun.c
|
|
||||||
_cgo_gotypes.go
|
|
||||||
_cgo_export.*
|
|
||||||
|
|
||||||
_testmain.go
|
|
||||||
|
|
||||||
*.exe
|
|
||||||
*.test
|
|
||||||
*.prof
|
|
||||||
|
|
||||||
# test directory
|
|
||||||
test/
|
|
20
vendor/github.com/bmatcuk/doublestar/.travis.yml
generated
vendored
20
vendor/github.com/bmatcuk/doublestar/.travis.yml
generated
vendored
|
@ -1,20 +0,0 @@
|
||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.12
|
|
||||||
- 1.13
|
|
||||||
- 1.14
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- windows
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- go get -t -v ./...
|
|
||||||
|
|
||||||
script:
|
|
||||||
- go test -race -coverprofile=coverage.txt -covermode=atomic
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
|
||||||
|
|
22
vendor/github.com/bmatcuk/doublestar/LICENSE
generated
vendored
22
vendor/github.com/bmatcuk/doublestar/LICENSE
generated
vendored
|
@ -1,22 +0,0 @@
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2014 Bob Matcuk
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
140
vendor/github.com/bmatcuk/doublestar/README.md
generated
vendored
140
vendor/github.com/bmatcuk/doublestar/README.md
generated
vendored
|
@ -1,140 +0,0 @@
|
||||||
# doublestar
|
|
||||||
|
|
||||||
Path pattern matching and globbing supporting `doublestar` (`**`) patterns.
|
|
||||||
|
|
||||||

|
|
||||||
[](https://travis-ci.org/bmatcuk/doublestar)
|
|
||||||
[](https://codecov.io/github/bmatcuk/doublestar?branch=master)
|
|
||||||
|
|
||||||
## About
|
|
||||||
|
|
||||||
**doublestar** is a [golang](http://golang.org/) implementation of path pattern
|
|
||||||
matching and globbing with support for "doublestar" (aka globstar: `**`)
|
|
||||||
patterns.
|
|
||||||
|
|
||||||
doublestar patterns match files and directories recursively. For example, if
|
|
||||||
you had the following directory structure:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grandparent
|
|
||||||
`-- parent
|
|
||||||
|-- child1
|
|
||||||
`-- child2
|
|
||||||
```
|
|
||||||
|
|
||||||
You could find the children with patterns such as: `**/child*`,
|
|
||||||
`grandparent/**/child?`, `**/parent/*`, or even just `**` by itself (which will
|
|
||||||
return all files and directories recursively).
|
|
||||||
|
|
||||||
Bash's globstar is doublestar's inspiration and, as such, works similarly.
|
|
||||||
Note that the doublestar must appear as a path component by itself. A pattern
|
|
||||||
such as `/path**` is invalid and will be treated the same as `/path*`, but
|
|
||||||
`/path*/**` should achieve the desired result. Additionally, `/path/**` will
|
|
||||||
match all directories and files under the path directory, but `/path/**/` will
|
|
||||||
only match directories.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
**doublestar** can be installed via `go get`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go get github.com/bmatcuk/doublestar
|
|
||||||
```
|
|
||||||
|
|
||||||
To use it in your code, you must import it:
|
|
||||||
|
|
||||||
```go
|
|
||||||
import "github.com/bmatcuk/doublestar"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
### Match
|
|
||||||
|
|
||||||
```go
|
|
||||||
func Match(pattern, name string) (bool, error)
|
|
||||||
```
|
|
||||||
|
|
||||||
Match returns true if `name` matches the file name `pattern`
|
|
||||||
([see below](#patterns)). `name` and `pattern` are split on forward slash (`/`)
|
|
||||||
characters and may be relative or absolute.
|
|
||||||
|
|
||||||
Note: `Match()` is meant to be a drop-in replacement for `path.Match()`. As
|
|
||||||
such, it always uses `/` as the path separator. If you are writing code that
|
|
||||||
will run on systems where `/` is not the path separator (such as Windows), you
|
|
||||||
want to use `PathMatch()` (below) instead.
|
|
||||||
|
|
||||||
|
|
||||||
### PathMatch
|
|
||||||
|
|
||||||
```go
|
|
||||||
func PathMatch(pattern, name string) (bool, error)
|
|
||||||
```
|
|
||||||
|
|
||||||
PathMatch returns true if `name` matches the file name `pattern`
|
|
||||||
([see below](#patterns)). The difference between Match and PathMatch is that
|
|
||||||
PathMatch will automatically use your system's path separator to split `name`
|
|
||||||
and `pattern`.
|
|
||||||
|
|
||||||
`PathMatch()` is meant to be a drop-in replacement for `filepath.Match()`.
|
|
||||||
|
|
||||||
### Glob
|
|
||||||
|
|
||||||
```go
|
|
||||||
func Glob(pattern string) ([]string, error)
|
|
||||||
```
|
|
||||||
|
|
||||||
Glob finds all files and directories in the filesystem that match `pattern`
|
|
||||||
([see below](#patterns)). `pattern` may be relative (to the current working
|
|
||||||
directory), or absolute.
|
|
||||||
|
|
||||||
`Glob()` is meant to be a drop-in replacement for `filepath.Glob()`.
|
|
||||||
|
|
||||||
### Patterns
|
|
||||||
|
|
||||||
**doublestar** supports the following special terms in the patterns:
|
|
||||||
|
|
||||||
Special Terms | Meaning
|
|
||||||
------------- | -------
|
|
||||||
`*` | matches any sequence of non-path-separators
|
|
||||||
`**` | matches any sequence of characters, including path separators
|
|
||||||
`?` | matches any single non-path-separator character
|
|
||||||
`[class]` | matches any single non-path-separator character against a class of characters ([see below](#character-classes))
|
|
||||||
`{alt1,...}` | matches a sequence of characters if one of the comma-separated alternatives matches
|
|
||||||
|
|
||||||
Any character with a special meaning can be escaped with a backslash (`\`).
|
|
||||||
|
|
||||||
#### Character Classes
|
|
||||||
|
|
||||||
Character classes support the following:
|
|
||||||
|
|
||||||
Class | Meaning
|
|
||||||
---------- | -------
|
|
||||||
`[abc]` | matches any single character within the set
|
|
||||||
`[a-z]` | matches any single character in the range
|
|
||||||
`[^class]` | matches any single character which does *not* match the class
|
|
||||||
|
|
||||||
### Abstracting the `os` package
|
|
||||||
|
|
||||||
**doublestar** by default uses the `Open`, `Stat`, and `Lstat`, functions and
|
|
||||||
`PathSeparator` value from the standard library's `os` package. To abstract
|
|
||||||
this, for example to be able to perform tests of Windows paths on Linux, or to
|
|
||||||
interoperate with your own filesystem code, it includes the functions `GlobOS`
|
|
||||||
and `PathMatchOS` which are identical to `Glob` and `PathMatch` except that they
|
|
||||||
operate on an `OS` interface:
|
|
||||||
|
|
||||||
```go
|
|
||||||
type OS interface {
|
|
||||||
Lstat(name string) (os.FileInfo, error)
|
|
||||||
Open(name string) (*os.File, error)
|
|
||||||
PathSeparator() rune
|
|
||||||
Stat(name string) (os.FileInfo, error)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
`StandardOS` is a value that implements this interface by calling functions in
|
|
||||||
the standard library's `os` package.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[MIT License](LICENSE)
|
|
684
vendor/github.com/bmatcuk/doublestar/doublestar.go
generated
vendored
684
vendor/github.com/bmatcuk/doublestar/doublestar.go
generated
vendored
|
@ -1,684 +0,0 @@
|
||||||
package doublestar
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"path"
|
|
||||||
"path/filepath"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
"unicode/utf8"
|
|
||||||
)
|
|
||||||
|
|
||||||
// An OS abstracts functions in the standard library's os package.
|
|
||||||
type OS interface {
|
|
||||||
Lstat(name string) (os.FileInfo, error)
|
|
||||||
Open(name string) (*os.File, error)
|
|
||||||
PathSeparator() rune
|
|
||||||
Stat(name string) (os.FileInfo, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// StandardOS is a value that implements the OS interface by calling functions
|
|
||||||
// in the standard libray's os package.
|
|
||||||
var StandardOS OS = standardOS{}
|
|
||||||
|
|
||||||
// A standardOS implements OS by calling functions in the standard library's os
|
|
||||||
// package.
|
|
||||||
type standardOS struct{}
|
|
||||||
|
|
||||||
func (standardOS) Lstat(name string) (os.FileInfo, error) { return os.Lstat(name) }
|
|
||||||
func (standardOS) Open(name string) (*os.File, error) { return os.Open(name) }
|
|
||||||
func (standardOS) PathSeparator() rune { return os.PathSeparator }
|
|
||||||
func (standardOS) Stat(name string) (os.FileInfo, error) { return os.Stat(name) }
|
|
||||||
|
|
||||||
// ErrBadPattern indicates a pattern was malformed.
|
|
||||||
var ErrBadPattern = path.ErrBadPattern
|
|
||||||
|
|
||||||
// Split a path on the given separator, respecting escaping.
|
|
||||||
func splitPathOnSeparator(path string, separator rune) (ret []string) {
|
|
||||||
idx := 0
|
|
||||||
if separator == '\\' {
|
|
||||||
// if the separator is '\\', then we can just split...
|
|
||||||
ret = strings.Split(path, string(separator))
|
|
||||||
idx = len(ret)
|
|
||||||
} else {
|
|
||||||
// otherwise, we need to be careful of situations where the separator was escaped
|
|
||||||
cnt := strings.Count(path, string(separator))
|
|
||||||
if cnt == 0 {
|
|
||||||
return []string{path}
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = make([]string, cnt+1)
|
|
||||||
pathlen := len(path)
|
|
||||||
separatorLen := utf8.RuneLen(separator)
|
|
||||||
emptyEnd := false
|
|
||||||
for start := 0; start < pathlen; {
|
|
||||||
end := indexRuneWithEscaping(path[start:], separator)
|
|
||||||
if end == -1 {
|
|
||||||
emptyEnd = false
|
|
||||||
end = pathlen
|
|
||||||
} else {
|
|
||||||
emptyEnd = true
|
|
||||||
end += start
|
|
||||||
}
|
|
||||||
ret[idx] = path[start:end]
|
|
||||||
start = end + separatorLen
|
|
||||||
idx++
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the last rune is a path separator, we need to append an empty string to
|
|
||||||
// represent the last, empty path component. By default, the strings from
|
|
||||||
// make([]string, ...) will be empty, so we just need to icrement the count
|
|
||||||
if emptyEnd {
|
|
||||||
idx++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret[:idx]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the first index of a rune in a string,
|
|
||||||
// ignoring any times the rune is escaped using "\".
|
|
||||||
func indexRuneWithEscaping(s string, r rune) int {
|
|
||||||
end := strings.IndexRune(s, r)
|
|
||||||
if end == -1 {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
if end > 0 && s[end-1] == '\\' {
|
|
||||||
start := end + utf8.RuneLen(r)
|
|
||||||
end = indexRuneWithEscaping(s[start:], r)
|
|
||||||
if end != -1 {
|
|
||||||
end += start
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return end
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the last index of a rune in a string,
|
|
||||||
// ignoring any times the rune is escaped using "\".
|
|
||||||
func lastIndexRuneWithEscaping(s string, r rune) int {
|
|
||||||
end := strings.LastIndex(s, string(r))
|
|
||||||
if end == -1 {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
if end > 0 && s[end-1] == '\\' {
|
|
||||||
end = lastIndexRuneWithEscaping(s[:end-1], r)
|
|
||||||
}
|
|
||||||
return end
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the index of the first instance of one of the unicode characters in
|
|
||||||
// chars, ignoring any times those characters are escaped using "\".
|
|
||||||
func indexAnyWithEscaping(s, chars string) int {
|
|
||||||
end := strings.IndexAny(s, chars)
|
|
||||||
if end == -1 {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
if end > 0 && s[end-1] == '\\' {
|
|
||||||
_, adj := utf8.DecodeRuneInString(s[end:])
|
|
||||||
start := end + adj
|
|
||||||
end = indexAnyWithEscaping(s[start:], chars)
|
|
||||||
if end != -1 {
|
|
||||||
end += start
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return end
|
|
||||||
}
|
|
||||||
|
|
||||||
// Split a set of alternatives such as {alt1,alt2,...} and returns the index of
|
|
||||||
// the rune after the closing curly brace. Respects nested alternatives and
|
|
||||||
// escaped runes.
|
|
||||||
func splitAlternatives(s string) (ret []string, idx int) {
|
|
||||||
ret = make([]string, 0, 2)
|
|
||||||
idx = 0
|
|
||||||
slen := len(s)
|
|
||||||
braceCnt := 1
|
|
||||||
esc := false
|
|
||||||
start := 0
|
|
||||||
for braceCnt > 0 {
|
|
||||||
if idx >= slen {
|
|
||||||
return nil, -1
|
|
||||||
}
|
|
||||||
|
|
||||||
sRune, adj := utf8.DecodeRuneInString(s[idx:])
|
|
||||||
if esc {
|
|
||||||
esc = false
|
|
||||||
} else if sRune == '\\' {
|
|
||||||
esc = true
|
|
||||||
} else if sRune == '{' {
|
|
||||||
braceCnt++
|
|
||||||
} else if sRune == '}' {
|
|
||||||
braceCnt--
|
|
||||||
} else if sRune == ',' && braceCnt == 1 {
|
|
||||||
ret = append(ret, s[start:idx])
|
|
||||||
start = idx + adj
|
|
||||||
}
|
|
||||||
|
|
||||||
idx += adj
|
|
||||||
}
|
|
||||||
ret = append(ret, s[start:idx-1])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns true if the pattern is "zero length", meaning
|
|
||||||
// it could match zero or more characters.
|
|
||||||
func isZeroLengthPattern(pattern string) (ret bool, err error) {
|
|
||||||
// * can match zero
|
|
||||||
if pattern == "" || pattern == "*" || pattern == "**" {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// an alternative with zero length can match zero, for example {,x} - the
|
|
||||||
// first alternative has zero length
|
|
||||||
r, adj := utf8.DecodeRuneInString(pattern)
|
|
||||||
if r == '{' {
|
|
||||||
options, endOptions := splitAlternatives(pattern[adj:])
|
|
||||||
if endOptions == -1 {
|
|
||||||
return false, ErrBadPattern
|
|
||||||
}
|
|
||||||
if ret, err = isZeroLengthPattern(pattern[adj+endOptions:]); !ret || err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, o := range options {
|
|
||||||
if ret, err = isZeroLengthPattern(o); ret || err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Match returns true if name matches the shell file name pattern.
|
|
||||||
// The pattern syntax is:
|
|
||||||
//
|
|
||||||
// pattern:
|
|
||||||
// { term }
|
|
||||||
// term:
|
|
||||||
// '*' matches any sequence of non-path-separators
|
|
||||||
// '**' matches any sequence of characters, including
|
|
||||||
// path separators.
|
|
||||||
// '?' matches any single non-path-separator character
|
|
||||||
// '[' [ '^' ] { character-range } ']'
|
|
||||||
// character class (must be non-empty)
|
|
||||||
// '{' { term } [ ',' { term } ... ] '}'
|
|
||||||
// c matches character c (c != '*', '?', '\\', '[')
|
|
||||||
// '\\' c matches character c
|
|
||||||
//
|
|
||||||
// character-range:
|
|
||||||
// c matches character c (c != '\\', '-', ']')
|
|
||||||
// '\\' c matches character c
|
|
||||||
// lo '-' hi matches character c for lo <= c <= hi
|
|
||||||
//
|
|
||||||
// Match requires pattern to match all of name, not just a substring.
|
|
||||||
// The path-separator defaults to the '/' character. The only possible
|
|
||||||
// returned error is ErrBadPattern, when pattern is malformed.
|
|
||||||
//
|
|
||||||
// Note: this is meant as a drop-in replacement for path.Match() which
|
|
||||||
// always uses '/' as the path separator. If you want to support systems
|
|
||||||
// which use a different path separator (such as Windows), what you want
|
|
||||||
// is the PathMatch() function below.
|
|
||||||
//
|
|
||||||
func Match(pattern, name string) (bool, error) {
|
|
||||||
return matchWithSeparator(pattern, name, '/')
|
|
||||||
}
|
|
||||||
|
|
||||||
// PathMatch is like Match except that it uses your system's path separator.
|
|
||||||
// For most systems, this will be '/'. However, for Windows, it would be '\\'.
|
|
||||||
// Note that for systems where the path separator is '\\', escaping is
|
|
||||||
// disabled.
|
|
||||||
//
|
|
||||||
// Note: this is meant as a drop-in replacement for filepath.Match().
|
|
||||||
//
|
|
||||||
func PathMatch(pattern, name string) (bool, error) {
|
|
||||||
return PathMatchOS(StandardOS, pattern, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PathMatchOS is like PathMatch except that it uses vos's path separator.
|
|
||||||
func PathMatchOS(vos OS, pattern, name string) (bool, error) {
|
|
||||||
pattern = filepath.ToSlash(pattern)
|
|
||||||
return matchWithSeparator(pattern, name, vos.PathSeparator())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Match returns true if name matches the shell file name pattern.
|
|
||||||
// The pattern syntax is:
|
|
||||||
//
|
|
||||||
// pattern:
|
|
||||||
// { term }
|
|
||||||
// term:
|
|
||||||
// '*' matches any sequence of non-path-separators
|
|
||||||
// '**' matches any sequence of characters, including
|
|
||||||
// path separators.
|
|
||||||
// '?' matches any single non-path-separator character
|
|
||||||
// '[' [ '^' ] { character-range } ']'
|
|
||||||
// character class (must be non-empty)
|
|
||||||
// '{' { term } [ ',' { term } ... ] '}'
|
|
||||||
// c matches character c (c != '*', '?', '\\', '[')
|
|
||||||
// '\\' c matches character c
|
|
||||||
//
|
|
||||||
// character-range:
|
|
||||||
// c matches character c (c != '\\', '-', ']')
|
|
||||||
// '\\' c matches character c, unless separator is '\\'
|
|
||||||
// lo '-' hi matches character c for lo <= c <= hi
|
|
||||||
//
|
|
||||||
// Match requires pattern to match all of name, not just a substring.
|
|
||||||
// The only possible returned error is ErrBadPattern, when pattern
|
|
||||||
// is malformed.
|
|
||||||
//
|
|
||||||
func matchWithSeparator(pattern, name string, separator rune) (bool, error) {
|
|
||||||
nameComponents := splitPathOnSeparator(name, separator)
|
|
||||||
return doMatching(pattern, nameComponents)
|
|
||||||
}
|
|
||||||
|
|
||||||
func doMatching(pattern string, nameComponents []string) (matched bool, err error) {
|
|
||||||
// check for some base-cases
|
|
||||||
patternLen, nameLen := len(pattern), len(nameComponents)
|
|
||||||
if patternLen == 0 && nameLen == 0 {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
if patternLen == 0 {
|
|
||||||
if nameLen == 1 && nameComponents[0] == "" {
|
|
||||||
return true, nil
|
|
||||||
} else if nameLen == 0 {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
slashIdx := indexRuneWithEscaping(pattern, '/')
|
|
||||||
lastComponent := slashIdx == -1
|
|
||||||
if lastComponent {
|
|
||||||
slashIdx = len(pattern)
|
|
||||||
}
|
|
||||||
if pattern[:slashIdx] == "**" {
|
|
||||||
// if our last pattern component is a doublestar, we're done -
|
|
||||||
// doublestar will match any remaining name components, if any.
|
|
||||||
if lastComponent {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise, try matching remaining components
|
|
||||||
for nameIdx := 0; nameIdx < nameLen; nameIdx++ {
|
|
||||||
if m, _ := doMatching(pattern[slashIdx+1:], nameComponents[nameIdx:]); m {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var matches []string
|
|
||||||
matches, err = matchComponent(pattern, nameComponents[0])
|
|
||||||
if matches == nil || err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(matches) == 0 && nameLen == 1 {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if nameLen > 1 {
|
|
||||||
for _, alt := range matches {
|
|
||||||
matched, err = doMatching(alt, nameComponents[1:])
|
|
||||||
if matched || err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Glob returns the names of all files matching pattern or nil
|
|
||||||
// if there is no matching file. The syntax of pattern is the same
|
|
||||||
// as in Match. The pattern may describe hierarchical names such as
|
|
||||||
// /usr/*/bin/ed (assuming the Separator is '/').
|
|
||||||
//
|
|
||||||
// Glob ignores file system errors such as I/O errors reading directories.
|
|
||||||
// The only possible returned error is ErrBadPattern, when pattern
|
|
||||||
// is malformed.
|
|
||||||
//
|
|
||||||
// Your system path separator is automatically used. This means on
|
|
||||||
// systems where the separator is '\\' (Windows), escaping will be
|
|
||||||
// disabled.
|
|
||||||
//
|
|
||||||
// Note: this is meant as a drop-in replacement for filepath.Glob().
|
|
||||||
//
|
|
||||||
func Glob(pattern string) (matches []string, err error) {
|
|
||||||
return GlobOS(StandardOS, pattern)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GlobOS is like Glob except that it operates on vos.
|
|
||||||
func GlobOS(vos OS, pattern string) (matches []string, err error) {
|
|
||||||
if len(pattern) == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the pattern starts with alternatives, we need to handle that here - the
|
|
||||||
// alternatives may be a mix of relative and absolute
|
|
||||||
if pattern[0] == '{' {
|
|
||||||
options, endOptions := splitAlternatives(pattern[1:])
|
|
||||||
if endOptions == -1 {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
for _, o := range options {
|
|
||||||
m, e := GlobOS(vos, o+pattern[endOptions+1:])
|
|
||||||
if e != nil {
|
|
||||||
return nil, e
|
|
||||||
}
|
|
||||||
matches = append(matches, m...)
|
|
||||||
}
|
|
||||||
return matches, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the pattern is relative or absolute and we're on a non-Windows machine,
|
|
||||||
// volumeName will be an empty string. If it is absolute and we're on a
|
|
||||||
// Windows machine, volumeName will be a drive letter ("C:") for filesystem
|
|
||||||
// paths or \\<server>\<share> for UNC paths.
|
|
||||||
isAbs := filepath.IsAbs(pattern) || pattern[0] == '\\' || pattern[0] == '/'
|
|
||||||
volumeName := filepath.VolumeName(pattern)
|
|
||||||
isWindowsUNC := strings.HasPrefix(volumeName, `\\`)
|
|
||||||
if isWindowsUNC || isAbs {
|
|
||||||
startIdx := len(volumeName) + 1
|
|
||||||
return doGlob(vos, fmt.Sprintf("%s%s", volumeName, string(vos.PathSeparator())), filepath.ToSlash(pattern[startIdx:]), matches)
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise, it's a relative pattern
|
|
||||||
return doGlob(vos, ".", filepath.ToSlash(pattern), matches)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform a glob
|
|
||||||
func doGlob(vos OS, basedir, pattern string, matches []string) (m []string, e error) {
|
|
||||||
m = matches
|
|
||||||
e = nil
|
|
||||||
|
|
||||||
// if the pattern starts with any path components that aren't globbed (ie,
|
|
||||||
// `path/to/glob*`), we can skip over the un-globbed components (`path/to` in
|
|
||||||
// our example).
|
|
||||||
globIdx := indexAnyWithEscaping(pattern, "*?[{\\")
|
|
||||||
if globIdx > 0 {
|
|
||||||
globIdx = lastIndexRuneWithEscaping(pattern[:globIdx], '/')
|
|
||||||
} else if globIdx == -1 {
|
|
||||||
globIdx = lastIndexRuneWithEscaping(pattern, '/')
|
|
||||||
}
|
|
||||||
if globIdx > 0 {
|
|
||||||
basedir = filepath.Join(basedir, pattern[:globIdx])
|
|
||||||
pattern = pattern[globIdx+1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lstat will return an error if the file/directory doesn't exist
|
|
||||||
fi, err := vos.Lstat(basedir)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the pattern is empty, we've found a match
|
|
||||||
if len(pattern) == 0 {
|
|
||||||
m = append(m, basedir)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise, we need to check each item in the directory...
|
|
||||||
|
|
||||||
// first, if basedir is a symlink, follow it...
|
|
||||||
if (fi.Mode() & os.ModeSymlink) != 0 {
|
|
||||||
fi, err = vos.Stat(basedir)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// confirm it's a directory...
|
|
||||||
if !fi.IsDir() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
files, err := filesInDir(vos, basedir)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Slice(files, func(i, j int) bool { return files[i].Name() < files[j].Name() })
|
|
||||||
|
|
||||||
slashIdx := indexRuneWithEscaping(pattern, '/')
|
|
||||||
lastComponent := slashIdx == -1
|
|
||||||
if lastComponent {
|
|
||||||
slashIdx = len(pattern)
|
|
||||||
}
|
|
||||||
if pattern[:slashIdx] == "**" {
|
|
||||||
// if the current component is a doublestar, we'll try depth-first
|
|
||||||
for _, file := range files {
|
|
||||||
// if symlink, we may want to follow
|
|
||||||
if (file.Mode() & os.ModeSymlink) != 0 {
|
|
||||||
file, err = vos.Stat(filepath.Join(basedir, file.Name()))
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if file.IsDir() {
|
|
||||||
// recurse into directories
|
|
||||||
if lastComponent {
|
|
||||||
m = append(m, filepath.Join(basedir, file.Name()))
|
|
||||||
}
|
|
||||||
m, e = doGlob(vos, filepath.Join(basedir, file.Name()), pattern, m)
|
|
||||||
} else if lastComponent {
|
|
||||||
// if the pattern's last component is a doublestar, we match filenames, too
|
|
||||||
m = append(m, filepath.Join(basedir, file.Name()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if lastComponent {
|
|
||||||
return // we're done
|
|
||||||
}
|
|
||||||
|
|
||||||
pattern = pattern[slashIdx+1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
// check items in current directory and recurse
|
|
||||||
var match []string
|
|
||||||
for _, file := range files {
|
|
||||||
match, e = matchComponent(pattern, file.Name())
|
|
||||||
if e != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if match != nil {
|
|
||||||
if len(match) == 0 {
|
|
||||||
m = append(m, filepath.Join(basedir, file.Name()))
|
|
||||||
} else {
|
|
||||||
for _, alt := range match {
|
|
||||||
m, e = doGlob(vos, filepath.Join(basedir, file.Name()), alt, m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func filesInDir(vos OS, dirPath string) (files []os.FileInfo, e error) {
|
|
||||||
dir, err := vos.Open(dirPath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
defer func() {
|
|
||||||
if err := dir.Close(); e == nil {
|
|
||||||
e = err
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
files, err = dir.Readdir(-1)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attempt to match a single path component with a pattern. Note that the
|
|
||||||
// pattern may include multiple components but that the "name" is just a single
|
|
||||||
// path component. The return value is a slice of patterns that should be
|
|
||||||
// checked against subsequent path components or nil, indicating that the
|
|
||||||
// pattern does not match this path. It is assumed that pattern components are
|
|
||||||
// separated by '/'
|
|
||||||
func matchComponent(pattern, name string) ([]string, error) {
|
|
||||||
// check for matches one rune at a time
|
|
||||||
patternLen, nameLen := len(pattern), len(name)
|
|
||||||
patIdx, nameIdx := 0, 0
|
|
||||||
for patIdx < patternLen && nameIdx < nameLen {
|
|
||||||
patRune, patAdj := utf8.DecodeRuneInString(pattern[patIdx:])
|
|
||||||
nameRune, nameAdj := utf8.DecodeRuneInString(name[nameIdx:])
|
|
||||||
if patRune == '/' {
|
|
||||||
patIdx++
|
|
||||||
break
|
|
||||||
} else if patRune == '\\' {
|
|
||||||
// handle escaped runes, only if separator isn't '\\'
|
|
||||||
patIdx += patAdj
|
|
||||||
patRune, patAdj = utf8.DecodeRuneInString(pattern[patIdx:])
|
|
||||||
if patRune == utf8.RuneError {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
} else if patRune == nameRune {
|
|
||||||
patIdx += patAdj
|
|
||||||
nameIdx += nameAdj
|
|
||||||
} else {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
} else if patRune == '*' {
|
|
||||||
// handle stars - a star at the end of the pattern or before a separator
|
|
||||||
// will always match the rest of the path component
|
|
||||||
if patIdx += patAdj; patIdx >= patternLen {
|
|
||||||
return []string{}, nil
|
|
||||||
}
|
|
||||||
if patRune, patAdj = utf8.DecodeRuneInString(pattern[patIdx:]); patRune == '/' {
|
|
||||||
return []string{pattern[patIdx+patAdj:]}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if we can make any matches
|
|
||||||
for ; nameIdx < nameLen; nameIdx += nameAdj {
|
|
||||||
if m, e := matchComponent(pattern[patIdx:], name[nameIdx:]); m != nil || e != nil {
|
|
||||||
return m, e
|
|
||||||
}
|
|
||||||
_, nameAdj = utf8.DecodeRuneInString(name[nameIdx:])
|
|
||||||
}
|
|
||||||
return nil, nil
|
|
||||||
} else if patRune == '[' {
|
|
||||||
// handle character sets
|
|
||||||
patIdx += patAdj
|
|
||||||
endClass := indexRuneWithEscaping(pattern[patIdx:], ']')
|
|
||||||
if endClass == -1 {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
endClass += patIdx
|
|
||||||
classRunes := []rune(pattern[patIdx:endClass])
|
|
||||||
classRunesLen := len(classRunes)
|
|
||||||
if classRunesLen > 0 {
|
|
||||||
classIdx := 0
|
|
||||||
matchClass := false
|
|
||||||
if classRunes[0] == '^' {
|
|
||||||
classIdx++
|
|
||||||
}
|
|
||||||
for classIdx < classRunesLen {
|
|
||||||
low := classRunes[classIdx]
|
|
||||||
if low == '-' {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
classIdx++
|
|
||||||
if low == '\\' {
|
|
||||||
if classIdx < classRunesLen {
|
|
||||||
low = classRunes[classIdx]
|
|
||||||
classIdx++
|
|
||||||
} else {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
}
|
|
||||||
high := low
|
|
||||||
if classIdx < classRunesLen && classRunes[classIdx] == '-' {
|
|
||||||
// we have a range of runes
|
|
||||||
if classIdx++; classIdx >= classRunesLen {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
high = classRunes[classIdx]
|
|
||||||
if high == '-' {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
classIdx++
|
|
||||||
if high == '\\' {
|
|
||||||
if classIdx < classRunesLen {
|
|
||||||
high = classRunes[classIdx]
|
|
||||||
classIdx++
|
|
||||||
} else {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if low <= nameRune && nameRune <= high {
|
|
||||||
matchClass = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if matchClass == (classRunes[0] == '^') {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
patIdx = endClass + 1
|
|
||||||
nameIdx += nameAdj
|
|
||||||
} else if patRune == '{' {
|
|
||||||
// handle alternatives such as {alt1,alt2,...}
|
|
||||||
patIdx += patAdj
|
|
||||||
options, endOptions := splitAlternatives(pattern[patIdx:])
|
|
||||||
if endOptions == -1 {
|
|
||||||
return nil, ErrBadPattern
|
|
||||||
}
|
|
||||||
patIdx += endOptions
|
|
||||||
|
|
||||||
results := make([][]string, 0, len(options))
|
|
||||||
totalResults := 0
|
|
||||||
for _, o := range options {
|
|
||||||
m, e := matchComponent(o+pattern[patIdx:], name[nameIdx:])
|
|
||||||
if e != nil {
|
|
||||||
return nil, e
|
|
||||||
}
|
|
||||||
if m != nil {
|
|
||||||
results = append(results, m)
|
|
||||||
totalResults += len(m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(results) > 0 {
|
|
||||||
lst := make([]string, 0, totalResults)
|
|
||||||
for _, m := range results {
|
|
||||||
lst = append(lst, m...)
|
|
||||||
}
|
|
||||||
return lst, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, nil
|
|
||||||
} else if patRune == '?' || patRune == nameRune {
|
|
||||||
// handle single-rune wildcard
|
|
||||||
patIdx += patAdj
|
|
||||||
nameIdx += nameAdj
|
|
||||||
} else {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if nameIdx >= nameLen {
|
|
||||||
if patIdx >= patternLen {
|
|
||||||
return []string{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
pattern = pattern[patIdx:]
|
|
||||||
slashIdx := indexRuneWithEscaping(pattern, '/')
|
|
||||||
testPattern := pattern
|
|
||||||
if slashIdx >= 0 {
|
|
||||||
testPattern = pattern[:slashIdx]
|
|
||||||
}
|
|
||||||
|
|
||||||
zeroLength, err := isZeroLengthPattern(testPattern)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if zeroLength {
|
|
||||||
if slashIdx == -1 {
|
|
||||||
return []string{}, nil
|
|
||||||
} else {
|
|
||||||
return []string{pattern[slashIdx+1:]}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
3
vendor/github.com/bmatcuk/doublestar/go.mod
generated
vendored
3
vendor/github.com/bmatcuk/doublestar/go.mod
generated
vendored
|
@ -1,3 +0,0 @@
|
||||||
module github.com/bmatcuk/doublestar
|
|
||||||
|
|
||||||
go 1.12
|
|
67
vendor/github.com/docker/cli/AUTHORS
generated
vendored
67
vendor/github.com/docker/cli/AUTHORS
generated
vendored
|
@ -8,20 +8,25 @@ Aaron.L.Xu <likexu@harmonycloud.cn>
|
||||||
Abdur Rehman <abdur_rehman@mentor.com>
|
Abdur Rehman <abdur_rehman@mentor.com>
|
||||||
Abhinandan Prativadi <abhi@docker.com>
|
Abhinandan Prativadi <abhi@docker.com>
|
||||||
Abin Shahab <ashahab@altiscale.com>
|
Abin Shahab <ashahab@altiscale.com>
|
||||||
|
Abreto FU <public@abreto.email>
|
||||||
Ace Tang <aceapril@126.com>
|
Ace Tang <aceapril@126.com>
|
||||||
Addam Hardy <addam.hardy@gmail.com>
|
Addam Hardy <addam.hardy@gmail.com>
|
||||||
Adolfo Ochagavía <aochagavia92@gmail.com>
|
Adolfo Ochagavía <aochagavia92@gmail.com>
|
||||||
|
Adrian Plata <adrian.plata@docker.com>
|
||||||
Adrien Duermael <adrien@duermael.com>
|
Adrien Duermael <adrien@duermael.com>
|
||||||
Adrien Folie <folie.adrien@gmail.com>
|
Adrien Folie <folie.adrien@gmail.com>
|
||||||
Ahmet Alp Balkan <ahmetb@microsoft.com>
|
Ahmet Alp Balkan <ahmetb@microsoft.com>
|
||||||
Aidan Feldman <aidan.feldman@gmail.com>
|
Aidan Feldman <aidan.feldman@gmail.com>
|
||||||
Aidan Hobson Sayers <aidanhs@cantab.net>
|
Aidan Hobson Sayers <aidanhs@cantab.net>
|
||||||
AJ Bowen <aj@gandi.net>
|
AJ Bowen <aj@soulshake.net>
|
||||||
Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
|
Akhil Mohan <akhil.mohan@mayadata.io>
|
||||||
|
Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
|
||||||
Akim Demaille <akim.demaille@docker.com>
|
Akim Demaille <akim.demaille@docker.com>
|
||||||
Alan Thompson <cloojure@gmail.com>
|
Alan Thompson <cloojure@gmail.com>
|
||||||
Albert Callarisa <shark234@gmail.com>
|
Albert Callarisa <shark234@gmail.com>
|
||||||
|
Albin Kerouanton <albin@akerouanton.name>
|
||||||
Aleksa Sarai <asarai@suse.de>
|
Aleksa Sarai <asarai@suse.de>
|
||||||
|
Aleksander Piotrowski <apiotrowski312@gmail.com>
|
||||||
Alessandro Boch <aboch@tetrationanalytics.com>
|
Alessandro Boch <aboch@tetrationanalytics.com>
|
||||||
Alex Mavrogiannis <alex.mavrogiannis@docker.com>
|
Alex Mavrogiannis <alex.mavrogiannis@docker.com>
|
||||||
Alex Mayer <amayer5125@gmail.com>
|
Alex Mayer <amayer5125@gmail.com>
|
||||||
|
@ -39,6 +44,7 @@ Amir Goldstein <amir73il@aquasec.com>
|
||||||
Amit Krishnan <amit.krishnan@oracle.com>
|
Amit Krishnan <amit.krishnan@oracle.com>
|
||||||
Amit Shukla <amit.shukla@docker.com>
|
Amit Shukla <amit.shukla@docker.com>
|
||||||
Amy Lindburg <amy.lindburg@docker.com>
|
Amy Lindburg <amy.lindburg@docker.com>
|
||||||
|
Anca Iordache <anca.iordache@docker.com>
|
||||||
Anda Xu <anda.xu@docker.com>
|
Anda Xu <anda.xu@docker.com>
|
||||||
Andrea Luzzardi <aluzzardi@gmail.com>
|
Andrea Luzzardi <aluzzardi@gmail.com>
|
||||||
Andreas Köhler <andi5.py@gmx.net>
|
Andreas Köhler <andi5.py@gmx.net>
|
||||||
|
@ -48,6 +54,7 @@ Andrew Macpherson <hopscotch23@gmail.com>
|
||||||
Andrew McDonnell <bugs@andrewmcdonnell.net>
|
Andrew McDonnell <bugs@andrewmcdonnell.net>
|
||||||
Andrew Po <absourd.noise@gmail.com>
|
Andrew Po <absourd.noise@gmail.com>
|
||||||
Andrey Petrov <andrey.petrov@shazow.net>
|
Andrey Petrov <andrey.petrov@shazow.net>
|
||||||
|
Andrii Berehuliak <berkusandrew@gmail.com>
|
||||||
André Martins <aanm90@gmail.com>
|
André Martins <aanm90@gmail.com>
|
||||||
Andy Goldstein <agoldste@redhat.com>
|
Andy Goldstein <agoldste@redhat.com>
|
||||||
Andy Rothfusz <github@developersupport.net>
|
Andy Rothfusz <github@developersupport.net>
|
||||||
|
@ -60,7 +67,9 @@ Antonis Kalipetis <akalipetis@gmail.com>
|
||||||
Anusha Ragunathan <anusha.ragunathan@docker.com>
|
Anusha Ragunathan <anusha.ragunathan@docker.com>
|
||||||
Ao Li <la9249@163.com>
|
Ao Li <la9249@163.com>
|
||||||
Arash Deshmeh <adeshmeh@ca.ibm.com>
|
Arash Deshmeh <adeshmeh@ca.ibm.com>
|
||||||
|
Arko Dasgupta <arko.dasgupta@docker.com>
|
||||||
Arnaud Porterie <arnaud.porterie@docker.com>
|
Arnaud Porterie <arnaud.porterie@docker.com>
|
||||||
|
Arthur Peka <arthur.peka@outlook.com>
|
||||||
Ashwini Oruganti <ashwini.oruganti@gmail.com>
|
Ashwini Oruganti <ashwini.oruganti@gmail.com>
|
||||||
Azat Khuyiyakhmetov <shadow_uz@mail.ru>
|
Azat Khuyiyakhmetov <shadow_uz@mail.ru>
|
||||||
Bardia Keyoumarsi <bkeyouma@ucsc.edu>
|
Bardia Keyoumarsi <bkeyouma@ucsc.edu>
|
||||||
|
@ -86,6 +95,7 @@ Brent Salisbury <brent.salisbury@docker.com>
|
||||||
Bret Fisher <bret@bretfisher.com>
|
Bret Fisher <bret@bretfisher.com>
|
||||||
Brian (bex) Exelbierd <bexelbie@redhat.com>
|
Brian (bex) Exelbierd <bexelbie@redhat.com>
|
||||||
Brian Goff <cpuguy83@gmail.com>
|
Brian Goff <cpuguy83@gmail.com>
|
||||||
|
Brian Wieder <brian@4wieders.com>
|
||||||
Bryan Bess <squarejaw@bsbess.com>
|
Bryan Bess <squarejaw@bsbess.com>
|
||||||
Bryan Boreham <bjboreham@gmail.com>
|
Bryan Boreham <bjboreham@gmail.com>
|
||||||
Bryan Murphy <bmurphy1976@gmail.com>
|
Bryan Murphy <bmurphy1976@gmail.com>
|
||||||
|
@ -94,6 +104,7 @@ Cameron Spear <cameronspear@gmail.com>
|
||||||
Cao Weiwei <cao.weiwei30@zte.com.cn>
|
Cao Weiwei <cao.weiwei30@zte.com.cn>
|
||||||
Carlo Mion <mion00@gmail.com>
|
Carlo Mion <mion00@gmail.com>
|
||||||
Carlos Alexandro Becker <caarlos0@gmail.com>
|
Carlos Alexandro Becker <caarlos0@gmail.com>
|
||||||
|
Carlos de Paula <me@carlosedp.com>
|
||||||
Ce Gao <ce.gao@outlook.com>
|
Ce Gao <ce.gao@outlook.com>
|
||||||
Cedric Davies <cedricda@microsoft.com>
|
Cedric Davies <cedricda@microsoft.com>
|
||||||
Cezar Sa Espinola <cezarsa@gmail.com>
|
Cezar Sa Espinola <cezarsa@gmail.com>
|
||||||
|
@ -127,25 +138,31 @@ Coenraad Loubser <coenraad@wish.org.za>
|
||||||
Colin Hebert <hebert.colin@gmail.com>
|
Colin Hebert <hebert.colin@gmail.com>
|
||||||
Collin Guarino <collin.guarino@gmail.com>
|
Collin Guarino <collin.guarino@gmail.com>
|
||||||
Colm Hally <colmhally@gmail.com>
|
Colm Hally <colmhally@gmail.com>
|
||||||
|
Comical Derskeal <27731088+derskeal@users.noreply.github.com>
|
||||||
Corey Farrell <git@cfware.com>
|
Corey Farrell <git@cfware.com>
|
||||||
Corey Quon <corey.quon@docker.com>
|
Corey Quon <corey.quon@docker.com>
|
||||||
Craig Wilhite <crwilhit@microsoft.com>
|
Craig Wilhite <crwilhit@microsoft.com>
|
||||||
Cristian Staretu <cristian.staretu@gmail.com>
|
Cristian Staretu <cristian.staretu@gmail.com>
|
||||||
Daehyeok Mun <daehyeok@gmail.com>
|
Daehyeok Mun <daehyeok@gmail.com>
|
||||||
Dafydd Crosby <dtcrsby@gmail.com>
|
Dafydd Crosby <dtcrsby@gmail.com>
|
||||||
|
Daisuke Ito <itodaisuke00@gmail.com>
|
||||||
dalanlan <dalanlan925@gmail.com>
|
dalanlan <dalanlan925@gmail.com>
|
||||||
Damien Nadé <github@livna.org>
|
Damien Nadé <github@livna.org>
|
||||||
Dan Cotora <dan@bluevision.ro>
|
Dan Cotora <dan@bluevision.ro>
|
||||||
|
Daniel Artine <daniel.artine@ufrj.br>
|
||||||
|
Daniel Cassidy <mail@danielcassidy.me.uk>
|
||||||
Daniel Dao <dqminh@cloudflare.com>
|
Daniel Dao <dqminh@cloudflare.com>
|
||||||
Daniel Farrell <dfarrell@redhat.com>
|
Daniel Farrell <dfarrell@redhat.com>
|
||||||
Daniel Gasienica <daniel@gasienica.ch>
|
Daniel Gasienica <daniel@gasienica.ch>
|
||||||
Daniel Goosen <daniel.goosen@surveysampling.com>
|
Daniel Goosen <daniel.goosen@surveysampling.com>
|
||||||
|
Daniel Helfand <dhelfand@redhat.com>
|
||||||
Daniel Hiltgen <daniel.hiltgen@docker.com>
|
Daniel Hiltgen <daniel.hiltgen@docker.com>
|
||||||
Daniel J Walsh <dwalsh@redhat.com>
|
Daniel J Walsh <dwalsh@redhat.com>
|
||||||
Daniel Nephin <dnephin@docker.com>
|
Daniel Nephin <dnephin@docker.com>
|
||||||
Daniel Norberg <dano@spotify.com>
|
Daniel Norberg <dano@spotify.com>
|
||||||
Daniel Watkins <daniel@daniel-watkins.co.uk>
|
Daniel Watkins <daniel@daniel-watkins.co.uk>
|
||||||
Daniel Zhang <jmzwcn@gmail.com>
|
Daniel Zhang <jmzwcn@gmail.com>
|
||||||
|
Daniil Nikolenko <qoo2p5@gmail.com>
|
||||||
Danny Berger <dpb587@gmail.com>
|
Danny Berger <dpb587@gmail.com>
|
||||||
Darren Shepherd <darren.s.shepherd@gmail.com>
|
Darren Shepherd <darren.s.shepherd@gmail.com>
|
||||||
Darren Stahl <darst@microsoft.com>
|
Darren Stahl <darst@microsoft.com>
|
||||||
|
@ -178,13 +195,15 @@ Dima Stopel <dima@twistlock.com>
|
||||||
Dimitry Andric <d.andric@activevideo.com>
|
Dimitry Andric <d.andric@activevideo.com>
|
||||||
Ding Fei <dingfei@stars.org.cn>
|
Ding Fei <dingfei@stars.org.cn>
|
||||||
Diogo Monica <diogo@docker.com>
|
Diogo Monica <diogo@docker.com>
|
||||||
|
Djordje Lukic <djordje.lukic@docker.com>
|
||||||
Dmitry Gusev <dmitry.gusev@gmail.com>
|
Dmitry Gusev <dmitry.gusev@gmail.com>
|
||||||
Dmitry Smirnov <onlyjob@member.fsf.org>
|
Dmitry Smirnov <onlyjob@member.fsf.org>
|
||||||
Dmitry V. Krivenok <krivenok.dmitry@gmail.com>
|
Dmitry V. Krivenok <krivenok.dmitry@gmail.com>
|
||||||
|
Dominik Braun <dominik.braun@nbsp.de>
|
||||||
Don Kjer <don.kjer@gmail.com>
|
Don Kjer <don.kjer@gmail.com>
|
||||||
Dong Chen <dongluo.chen@docker.com>
|
Dong Chen <dongluo.chen@docker.com>
|
||||||
Doug Davis <dug@us.ibm.com>
|
Doug Davis <dug@us.ibm.com>
|
||||||
Drew Erny <drew.erny@docker.com>
|
Drew Erny <derny@mirantis.com>
|
||||||
Ed Costello <epc@epcostello.com>
|
Ed Costello <epc@epcostello.com>
|
||||||
Elango Sivanandam <elango.siva@docker.com>
|
Elango Sivanandam <elango.siva@docker.com>
|
||||||
Eli Uriegas <eli.uriegas@docker.com>
|
Eli Uriegas <eli.uriegas@docker.com>
|
||||||
|
@ -215,6 +234,7 @@ Felix Rabe <felix@rabe.io>
|
||||||
Filip Jareš <filipjares@gmail.com>
|
Filip Jareš <filipjares@gmail.com>
|
||||||
Flavio Crisciani <flavio.crisciani@docker.com>
|
Flavio Crisciani <flavio.crisciani@docker.com>
|
||||||
Florian Klein <florian.klein@free.fr>
|
Florian Klein <florian.klein@free.fr>
|
||||||
|
Forest Johnson <fjohnson@peoplenetonline.com>
|
||||||
Foysal Iqbal <foysal.iqbal.fb@gmail.com>
|
Foysal Iqbal <foysal.iqbal.fb@gmail.com>
|
||||||
François Scala <francois.scala@swiss-as.com>
|
François Scala <francois.scala@swiss-as.com>
|
||||||
Fred Lifton <fred.lifton@docker.com>
|
Fred Lifton <fred.lifton@docker.com>
|
||||||
|
@ -231,6 +251,7 @@ George MacRorie <gmacr31@gmail.com>
|
||||||
George Xie <georgexsh@gmail.com>
|
George Xie <georgexsh@gmail.com>
|
||||||
Gianluca Borello <g.borello@gmail.com>
|
Gianluca Borello <g.borello@gmail.com>
|
||||||
Gildas Cuisinier <gildas.cuisinier@gcuisinier.net>
|
Gildas Cuisinier <gildas.cuisinier@gcuisinier.net>
|
||||||
|
Goksu Toprak <goksu.toprak@docker.com>
|
||||||
Gou Rao <gou@portworx.com>
|
Gou Rao <gou@portworx.com>
|
||||||
Grant Reaber <grant.reaber@gmail.com>
|
Grant Reaber <grant.reaber@gmail.com>
|
||||||
Greg Pflaum <gpflaum@users.noreply.github.com>
|
Greg Pflaum <gpflaum@users.noreply.github.com>
|
||||||
|
@ -245,6 +266,7 @@ Harald Albers <github@albersweb.de>
|
||||||
Harold Cooper <hrldcpr@gmail.com>
|
Harold Cooper <hrldcpr@gmail.com>
|
||||||
Harry Zhang <harryz@hyper.sh>
|
Harry Zhang <harryz@hyper.sh>
|
||||||
He Simei <hesimei@zju.edu.cn>
|
He Simei <hesimei@zju.edu.cn>
|
||||||
|
Hector S <hfsam88@gmail.com>
|
||||||
Helen Xie <chenjg@harmonycloud.cn>
|
Helen Xie <chenjg@harmonycloud.cn>
|
||||||
Henning Sprang <henning.sprang@gmail.com>
|
Henning Sprang <henning.sprang@gmail.com>
|
||||||
Henry N <henrynmail-github@yahoo.de>
|
Henry N <henrynmail-github@yahoo.de>
|
||||||
|
@ -252,6 +274,7 @@ Hernan Garcia <hernandanielg@gmail.com>
|
||||||
Hongbin Lu <hongbin034@gmail.com>
|
Hongbin Lu <hongbin034@gmail.com>
|
||||||
Hu Keping <hukeping@huawei.com>
|
Hu Keping <hukeping@huawei.com>
|
||||||
Huayi Zhang <irachex@gmail.com>
|
Huayi Zhang <irachex@gmail.com>
|
||||||
|
Hugo Gabriel Eyherabide <hugogabriel.eyherabide@gmail.com>
|
||||||
huqun <huqun@zju.edu.cn>
|
huqun <huqun@zju.edu.cn>
|
||||||
Huu Nguyen <huu@prismskylabs.com>
|
Huu Nguyen <huu@prismskylabs.com>
|
||||||
Hyzhou Zhy <hyzhou.zhy@alibaba-inc.com>
|
Hyzhou Zhy <hyzhou.zhy@alibaba-inc.com>
|
||||||
|
@ -293,7 +316,7 @@ Jeremy Unruh <jeremybunruh@gmail.com>
|
||||||
Jeremy Yallop <yallop@docker.com>
|
Jeremy Yallop <yallop@docker.com>
|
||||||
Jeroen Franse <jeroenfranse@gmail.com>
|
Jeroen Franse <jeroenfranse@gmail.com>
|
||||||
Jesse Adametz <jesseadametz@gmail.com>
|
Jesse Adametz <jesseadametz@gmail.com>
|
||||||
Jessica Frazelle <jessfraz@google.com>
|
Jessica Frazelle <jess@oxide.computer>
|
||||||
Jezeniel Zapanta <jpzapanta22@gmail.com>
|
Jezeniel Zapanta <jpzapanta22@gmail.com>
|
||||||
Jian Zhang <zhangjian.fnst@cn.fujitsu.com>
|
Jian Zhang <zhangjian.fnst@cn.fujitsu.com>
|
||||||
Jie Luo <luo612@zju.edu.cn>
|
Jie Luo <luo612@zju.edu.cn>
|
||||||
|
@ -304,6 +327,7 @@ Jimmy Song <rootsongjc@gmail.com>
|
||||||
jimmyxian <jimmyxian2004@yahoo.com.cn>
|
jimmyxian <jimmyxian2004@yahoo.com.cn>
|
||||||
Jintao Zhang <zhangjintao9020@gmail.com>
|
Jintao Zhang <zhangjintao9020@gmail.com>
|
||||||
Joao Fernandes <joao.fernandes@docker.com>
|
Joao Fernandes <joao.fernandes@docker.com>
|
||||||
|
Joe Abbey <joe.abbey@gmail.com>
|
||||||
Joe Doliner <jdoliner@pachyderm.io>
|
Joe Doliner <jdoliner@pachyderm.io>
|
||||||
Joe Gordon <joe.gordon0@gmail.com>
|
Joe Gordon <joe.gordon0@gmail.com>
|
||||||
Joel Handwell <joelhandwell@gmail.com>
|
Joel Handwell <joelhandwell@gmail.com>
|
||||||
|
@ -313,7 +337,7 @@ Johan Euphrosine <proppy@google.com>
|
||||||
Johannes 'fish' Ziemke <github@freigeist.org>
|
Johannes 'fish' Ziemke <github@freigeist.org>
|
||||||
John Feminella <jxf@jxf.me>
|
John Feminella <jxf@jxf.me>
|
||||||
John Harris <john@johnharris.io>
|
John Harris <john@johnharris.io>
|
||||||
John Howard (VM) <John.Howard@microsoft.com>
|
John Howard <github@lowenna.com>
|
||||||
John Laswell <john.n.laswell@gmail.com>
|
John Laswell <john.n.laswell@gmail.com>
|
||||||
John Maguire <jmaguire@duosecurity.com>
|
John Maguire <jmaguire@duosecurity.com>
|
||||||
John Mulhausen <john@docker.com>
|
John Mulhausen <john@docker.com>
|
||||||
|
@ -322,12 +346,15 @@ John Stephens <johnstep@docker.com>
|
||||||
John Tims <john.k.tims@gmail.com>
|
John Tims <john.k.tims@gmail.com>
|
||||||
John V. Martinez <jvmatl@gmail.com>
|
John V. Martinez <jvmatl@gmail.com>
|
||||||
John Willis <john.willis@docker.com>
|
John Willis <john.willis@docker.com>
|
||||||
|
Jon Johnson <jonjohnson@google.com>
|
||||||
|
Jonatas Baldin <jonatas.baldin@gmail.com>
|
||||||
Jonathan Boulle <jonathanboulle@gmail.com>
|
Jonathan Boulle <jonathanboulle@gmail.com>
|
||||||
Jonathan Lee <jonjohn1232009@gmail.com>
|
Jonathan Lee <jonjohn1232009@gmail.com>
|
||||||
Jonathan Lomas <jonathan@floatinglomas.ca>
|
Jonathan Lomas <jonathan@floatinglomas.ca>
|
||||||
Jonathan McCrohan <jmccrohan@gmail.com>
|
Jonathan McCrohan <jmccrohan@gmail.com>
|
||||||
Jonh Wendell <jonh.wendell@redhat.com>
|
Jonh Wendell <jonh.wendell@redhat.com>
|
||||||
Jordan Jennings <jjn2009@gmail.com>
|
Jordan Jennings <jjn2009@gmail.com>
|
||||||
|
Jose J. Escobar <53836904+jescobar-docker@users.noreply.github.com>
|
||||||
Joseph Kern <jkern@semafour.net>
|
Joseph Kern <jkern@semafour.net>
|
||||||
Josh Bodah <jb3689@yahoo.com>
|
Josh Bodah <jb3689@yahoo.com>
|
||||||
Josh Chorlton <jchorlton@gmail.com>
|
Josh Chorlton <jchorlton@gmail.com>
|
||||||
|
@ -351,6 +378,7 @@ Kara Alexandra <kalexandra@us.ibm.com>
|
||||||
Kareem Khazem <karkhaz@karkhaz.com>
|
Kareem Khazem <karkhaz@karkhaz.com>
|
||||||
Karthik Nayak <Karthik.188@gmail.com>
|
Karthik Nayak <Karthik.188@gmail.com>
|
||||||
Kat Samperi <kat.samperi@gmail.com>
|
Kat Samperi <kat.samperi@gmail.com>
|
||||||
|
Kathryn Spiers <kathryn@spiers.me>
|
||||||
Katie McLaughlin <katie@glasnt.com>
|
Katie McLaughlin <katie@glasnt.com>
|
||||||
Ke Xu <leonhartx.k@gmail.com>
|
Ke Xu <leonhartx.k@gmail.com>
|
||||||
Kei Ohmura <ohmura.kei@gmail.com>
|
Kei Ohmura <ohmura.kei@gmail.com>
|
||||||
|
@ -364,6 +392,7 @@ Kevin Kern <kaiwentan@harmonycloud.cn>
|
||||||
Kevin Kirsche <Kev.Kirsche+GitHub@gmail.com>
|
Kevin Kirsche <Kev.Kirsche+GitHub@gmail.com>
|
||||||
Kevin Meredith <kevin.m.meredith@gmail.com>
|
Kevin Meredith <kevin.m.meredith@gmail.com>
|
||||||
Kevin Richardson <kevin@kevinrichardson.co>
|
Kevin Richardson <kevin@kevinrichardson.co>
|
||||||
|
Kevin Woblick <mail@kovah.de>
|
||||||
khaled souf <khaled.souf@gmail.com>
|
khaled souf <khaled.souf@gmail.com>
|
||||||
Kim Eik <kim@heldig.org>
|
Kim Eik <kim@heldig.org>
|
||||||
Kir Kolyshkin <kolyshkin@gmail.com>
|
Kir Kolyshkin <kolyshkin@gmail.com>
|
||||||
|
@ -372,7 +401,6 @@ Krasi Georgiev <krasi@vip-consult.solutions>
|
||||||
Kris-Mikael Krister <krismikael@protonmail.com>
|
Kris-Mikael Krister <krismikael@protonmail.com>
|
||||||
Kun Zhang <zkazure@gmail.com>
|
Kun Zhang <zkazure@gmail.com>
|
||||||
Kunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>
|
Kunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>
|
||||||
Kyle Spiers <kyle@spiers.me>
|
|
||||||
Lachlan Cooper <lachlancooper@gmail.com>
|
Lachlan Cooper <lachlancooper@gmail.com>
|
||||||
Lai Jiangshan <jiangshanlai@gmail.com>
|
Lai Jiangshan <jiangshanlai@gmail.com>
|
||||||
Lars Kellogg-Stedman <lars@redhat.com>
|
Lars Kellogg-Stedman <lars@redhat.com>
|
||||||
|
@ -402,13 +430,16 @@ Luca Favatella <luca.favatella@erlang-solutions.com>
|
||||||
Luca Marturana <lucamarturana@gmail.com>
|
Luca Marturana <lucamarturana@gmail.com>
|
||||||
Lucas Chan <lucas-github@lucaschan.com>
|
Lucas Chan <lucas-github@lucaschan.com>
|
||||||
Luka Hartwig <mail@lukahartwig.de>
|
Luka Hartwig <mail@lukahartwig.de>
|
||||||
|
Lukas Heeren <lukas-heeren@hotmail.com>
|
||||||
Lukasz Zajaczkowski <Lukasz.Zajaczkowski@ts.fujitsu.com>
|
Lukasz Zajaczkowski <Lukasz.Zajaczkowski@ts.fujitsu.com>
|
||||||
Lydell Manganti <LydellManganti@users.noreply.github.com>
|
Lydell Manganti <LydellManganti@users.noreply.github.com>
|
||||||
Lénaïc Huard <lhuard@amadeus.com>
|
Lénaïc Huard <lhuard@amadeus.com>
|
||||||
Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
|
Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
|
||||||
Mabin <bin.ma@huawei.com>
|
Mabin <bin.ma@huawei.com>
|
||||||
|
Maciej Kalisz <maciej.d.kalisz@gmail.com>
|
||||||
Madhav Puri <madhav.puri@gmail.com>
|
Madhav Puri <madhav.puri@gmail.com>
|
||||||
Madhu Venugopal <madhu@socketplane.io>
|
Madhu Venugopal <madhu@socketplane.io>
|
||||||
|
Madhur Batra <madhurbatra097@gmail.com>
|
||||||
Malte Janduda <mail@janduda.net>
|
Malte Janduda <mail@janduda.net>
|
||||||
Manjunath A Kumatagi <mkumatag@in.ibm.com>
|
Manjunath A Kumatagi <mkumatag@in.ibm.com>
|
||||||
Mansi Nahar <mmn4185@rit.edu>
|
Mansi Nahar <mmn4185@rit.edu>
|
||||||
|
@ -418,6 +449,7 @@ Marco Mariani <marco.mariani@alterway.fr>
|
||||||
Marco Vedovati <mvedovati@suse.com>
|
Marco Vedovati <mvedovati@suse.com>
|
||||||
Marcus Martins <marcus@docker.com>
|
Marcus Martins <marcus@docker.com>
|
||||||
Marianna Tessel <mtesselh@gmail.com>
|
Marianna Tessel <mtesselh@gmail.com>
|
||||||
|
Marius Ileana <marius.ileana@gmail.com>
|
||||||
Marius Sturm <marius@graylog.com>
|
Marius Sturm <marius@graylog.com>
|
||||||
Mark Oates <fl0yd@me.com>
|
Mark Oates <fl0yd@me.com>
|
||||||
Marsh Macy <marsma@microsoft.com>
|
Marsh Macy <marsma@microsoft.com>
|
||||||
|
@ -463,12 +495,14 @@ mikelinjie <294893458@qq.com>
|
||||||
Mikhail Vasin <vasin@cloud-tv.ru>
|
Mikhail Vasin <vasin@cloud-tv.ru>
|
||||||
Milind Chawre <milindchawre@gmail.com>
|
Milind Chawre <milindchawre@gmail.com>
|
||||||
Mindaugas Rukas <momomg@gmail.com>
|
Mindaugas Rukas <momomg@gmail.com>
|
||||||
|
Miroslav Gula <miroslav.gula@naytrolabs.com>
|
||||||
Misty Stanley-Jones <misty@docker.com>
|
Misty Stanley-Jones <misty@docker.com>
|
||||||
Mohammad Banikazemi <mb@us.ibm.com>
|
Mohammad Banikazemi <mb@us.ibm.com>
|
||||||
Mohammed Aaqib Ansari <maaquib@gmail.com>
|
Mohammed Aaqib Ansari <maaquib@gmail.com>
|
||||||
Mohini Anne Dsouza <mohini3917@gmail.com>
|
Mohini Anne Dsouza <mohini3917@gmail.com>
|
||||||
Moorthy RS <rsmoorthy@gmail.com>
|
Moorthy RS <rsmoorthy@gmail.com>
|
||||||
Morgan Bauer <mbauer@us.ibm.com>
|
Morgan Bauer <mbauer@us.ibm.com>
|
||||||
|
Morten Hekkvang <morten.hekkvang@sbab.se>
|
||||||
Moysés Borges <moysesb@gmail.com>
|
Moysés Borges <moysesb@gmail.com>
|
||||||
Mrunal Patel <mrunalp@gmail.com>
|
Mrunal Patel <mrunalp@gmail.com>
|
||||||
muicoder <muicoder@gmail.com>
|
muicoder <muicoder@gmail.com>
|
||||||
|
@ -499,9 +533,11 @@ Nishant Totla <nishanttotla@gmail.com>
|
||||||
NIWA Hideyuki <niwa.niwa@nifty.ne.jp>
|
NIWA Hideyuki <niwa.niwa@nifty.ne.jp>
|
||||||
Noah Treuhaft <noah.treuhaft@docker.com>
|
Noah Treuhaft <noah.treuhaft@docker.com>
|
||||||
O.S. Tezer <ostezer@gmail.com>
|
O.S. Tezer <ostezer@gmail.com>
|
||||||
|
Odin Ugedal <odin@ugedal.com>
|
||||||
ohmystack <jun.jiang02@ele.me>
|
ohmystack <jun.jiang02@ele.me>
|
||||||
Olle Jonsson <olle.jonsson@gmail.com>
|
Olle Jonsson <olle.jonsson@gmail.com>
|
||||||
Olli Janatuinen <olli.janatuinen@gmail.com>
|
Olli Janatuinen <olli.janatuinen@gmail.com>
|
||||||
|
Oscar Wieman <oscrx@icloud.com>
|
||||||
Otto Kekäläinen <otto@seravo.fi>
|
Otto Kekäläinen <otto@seravo.fi>
|
||||||
Ovidio Mallo <ovidio.mallo@gmail.com>
|
Ovidio Mallo <ovidio.mallo@gmail.com>
|
||||||
Pascal Borreli <pascal@borreli.com>
|
Pascal Borreli <pascal@borreli.com>
|
||||||
|
@ -511,6 +547,7 @@ Patrick Lang <plang@microsoft.com>
|
||||||
Paul <paul9869@gmail.com>
|
Paul <paul9869@gmail.com>
|
||||||
Paul Kehrer <paul.l.kehrer@gmail.com>
|
Paul Kehrer <paul.l.kehrer@gmail.com>
|
||||||
Paul Lietar <paul@lietar.net>
|
Paul Lietar <paul@lietar.net>
|
||||||
|
Paul Mulders <justinkb@gmail.com>
|
||||||
Paul Weaver <pauweave@cisco.com>
|
Paul Weaver <pauweave@cisco.com>
|
||||||
Pavel Pospisil <pospispa@gmail.com>
|
Pavel Pospisil <pospispa@gmail.com>
|
||||||
Paweł Szczekutowicz <pszczekutowicz@gmail.com>
|
Paweł Szczekutowicz <pszczekutowicz@gmail.com>
|
||||||
|
@ -537,6 +574,8 @@ Qiang Huang <h.huangqiang@huawei.com>
|
||||||
Qinglan Peng <qinglanpeng@zju.edu.cn>
|
Qinglan Peng <qinglanpeng@zju.edu.cn>
|
||||||
qudongfang <qudongfang@gmail.com>
|
qudongfang <qudongfang@gmail.com>
|
||||||
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
|
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
|
||||||
|
Rahul Zoldyck <rahulzoldyck@gmail.com>
|
||||||
|
Ravi Shekhar Jethani <rsjethani@gmail.com>
|
||||||
Ray Tsang <rayt@google.com>
|
Ray Tsang <rayt@google.com>
|
||||||
Reficul <xuzhenglun@gmail.com>
|
Reficul <xuzhenglun@gmail.com>
|
||||||
Remy Suen <remy.suen@gmail.com>
|
Remy Suen <remy.suen@gmail.com>
|
||||||
|
@ -548,11 +587,13 @@ Richard Scothern <richard.scothern@gmail.com>
|
||||||
Rick Wieman <git@rickw.nl>
|
Rick Wieman <git@rickw.nl>
|
||||||
Ritesh H Shukla <sritesh@vmware.com>
|
Ritesh H Shukla <sritesh@vmware.com>
|
||||||
Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
|
Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
|
||||||
|
Rob Gulewich <rgulewich@netflix.com>
|
||||||
Robert Wallis <smilingrob@gmail.com>
|
Robert Wallis <smilingrob@gmail.com>
|
||||||
Robin Naundorf <r.naundorf@fh-muenster.de>
|
Robin Naundorf <r.naundorf@fh-muenster.de>
|
||||||
Robin Speekenbrink <robin@kingsquare.nl>
|
Robin Speekenbrink <robin@kingsquare.nl>
|
||||||
Rodolfo Ortiz <rodolfo.ortiz@definityfirst.com>
|
Rodolfo Ortiz <rodolfo.ortiz@definityfirst.com>
|
||||||
Rogelio Canedo <rcanedo@mappy.priv>
|
Rogelio Canedo <rcanedo@mappy.priv>
|
||||||
|
Rohan Verma <hello@rohanverma.net>
|
||||||
Roland Kammerer <roland.kammerer@linbit.com>
|
Roland Kammerer <roland.kammerer@linbit.com>
|
||||||
Roman Dudin <katrmr@gmail.com>
|
Roman Dudin <katrmr@gmail.com>
|
||||||
Rory Hunter <roryhunter2@gmail.com>
|
Rory Hunter <roryhunter2@gmail.com>
|
||||||
|
@ -568,10 +609,14 @@ Sainath Grandhi <sainath.grandhi@intel.com>
|
||||||
Sakeven Jiang <jc5930@sina.cn>
|
Sakeven Jiang <jc5930@sina.cn>
|
||||||
Sally O'Malley <somalley@redhat.com>
|
Sally O'Malley <somalley@redhat.com>
|
||||||
Sam Neirinck <sam@samneirinck.com>
|
Sam Neirinck <sam@samneirinck.com>
|
||||||
|
Samarth Shah <samashah@microsoft.com>
|
||||||
Sambuddha Basu <sambuddhabasu1@gmail.com>
|
Sambuddha Basu <sambuddhabasu1@gmail.com>
|
||||||
Sami Tabet <salph.tabet@gmail.com>
|
Sami Tabet <salph.tabet@gmail.com>
|
||||||
|
Samuel Cochran <sj26@sj26.com>
|
||||||
Samuel Karp <skarp@amazon.com>
|
Samuel Karp <skarp@amazon.com>
|
||||||
Santhosh Manohar <santhosh@docker.com>
|
Santhosh Manohar <santhosh@docker.com>
|
||||||
|
Sargun Dhillon <sargun@netflix.com>
|
||||||
|
Saswat Bhattacharya <sas.saswat@gmail.com>
|
||||||
Scott Brenner <scott@scottbrenner.me>
|
Scott Brenner <scott@scottbrenner.me>
|
||||||
Scott Collier <emailscottcollier@gmail.com>
|
Scott Collier <emailscottcollier@gmail.com>
|
||||||
Sean Christopherson <sean.j.christopherson@intel.com>
|
Sean Christopherson <sean.j.christopherson@intel.com>
|
||||||
|
@ -592,6 +637,7 @@ sidharthamani <sid@rancher.com>
|
||||||
Silvin Lubecki <silvin.lubecki@docker.com>
|
Silvin Lubecki <silvin.lubecki@docker.com>
|
||||||
Simei He <hesimei@zju.edu.cn>
|
Simei He <hesimei@zju.edu.cn>
|
||||||
Simon Ferquel <simon.ferquel@docker.com>
|
Simon Ferquel <simon.ferquel@docker.com>
|
||||||
|
Simon Heimberg <simon.heimberg@heimberg-ea.ch>
|
||||||
Sindhu S <sindhus@live.in>
|
Sindhu S <sindhus@live.in>
|
||||||
Slava Semushin <semushin@redhat.com>
|
Slava Semushin <semushin@redhat.com>
|
||||||
Solomon Hykes <solomon@docker.com>
|
Solomon Hykes <solomon@docker.com>
|
||||||
|
@ -621,7 +667,10 @@ TAGOMORI Satoshi <tagomoris@gmail.com>
|
||||||
taiji-tech <csuhqg@foxmail.com>
|
taiji-tech <csuhqg@foxmail.com>
|
||||||
Taylor Jones <monitorjbl@gmail.com>
|
Taylor Jones <monitorjbl@gmail.com>
|
||||||
Tejaswini Duggaraju <naduggar@microsoft.com>
|
Tejaswini Duggaraju <naduggar@microsoft.com>
|
||||||
|
Tengfei Wang <tfwang@alauda.io>
|
||||||
|
Teppei Fukuda <knqyf263@gmail.com>
|
||||||
Thatcher Peskens <thatcher@docker.com>
|
Thatcher Peskens <thatcher@docker.com>
|
||||||
|
Thibault Coupin <thibault.coupin@gmail.com>
|
||||||
Thomas Gazagnaire <thomas@gazagnaire.org>
|
Thomas Gazagnaire <thomas@gazagnaire.org>
|
||||||
Thomas Krzero <thomas.kovatchitch@gmail.com>
|
Thomas Krzero <thomas.kovatchitch@gmail.com>
|
||||||
Thomas Leonard <thomas.leonard@docker.com>
|
Thomas Leonard <thomas.leonard@docker.com>
|
||||||
|
@ -633,6 +682,7 @@ Tianyi Wang <capkurmagati@gmail.com>
|
||||||
Tibor Vass <teabee89@gmail.com>
|
Tibor Vass <teabee89@gmail.com>
|
||||||
Tim Dettrick <t.dettrick@uq.edu.au>
|
Tim Dettrick <t.dettrick@uq.edu.au>
|
||||||
Tim Hockin <thockin@google.com>
|
Tim Hockin <thockin@google.com>
|
||||||
|
Tim Sampson <tim@sampson.fi>
|
||||||
Tim Smith <timbot@google.com>
|
Tim Smith <timbot@google.com>
|
||||||
Tim Waugh <twaugh@redhat.com>
|
Tim Waugh <twaugh@redhat.com>
|
||||||
Tim Wraight <tim.wraight@tangentlabs.co.uk>
|
Tim Wraight <tim.wraight@tangentlabs.co.uk>
|
||||||
|
@ -657,9 +707,11 @@ Tristan Carel <tristan@cogniteev.com>
|
||||||
Tycho Andersen <tycho@docker.com>
|
Tycho Andersen <tycho@docker.com>
|
||||||
Tycho Andersen <tycho@tycho.ws>
|
Tycho Andersen <tycho@tycho.ws>
|
||||||
uhayate <uhayate.gong@daocloud.io>
|
uhayate <uhayate.gong@daocloud.io>
|
||||||
|
Ulrich Bareth <ulrich.bareth@gmail.com>
|
||||||
Ulysses Souza <ulysses.souza@docker.com>
|
Ulysses Souza <ulysses.souza@docker.com>
|
||||||
Umesh Yadav <umesh4257@gmail.com>
|
Umesh Yadav <umesh4257@gmail.com>
|
||||||
Valentin Lorentz <progval+git@progval.net>
|
Valentin Lorentz <progval+git@progval.net>
|
||||||
|
Venkateswara Reddy Bukkasamudram <bukkasamudram@outlook.com>
|
||||||
Veres Lajos <vlajos@gmail.com>
|
Veres Lajos <vlajos@gmail.com>
|
||||||
Victor Vieux <victor.vieux@docker.com>
|
Victor Vieux <victor.vieux@docker.com>
|
||||||
Victoria Bialas <victoria.bialas@docker.com>
|
Victoria Bialas <victoria.bialas@docker.com>
|
||||||
|
@ -677,6 +729,7 @@ Wang Long <long.wanglong@huawei.com>
|
||||||
Wang Ping <present.wp@icloud.com>
|
Wang Ping <present.wp@icloud.com>
|
||||||
Wang Xing <hzwangxing@corp.netease.com>
|
Wang Xing <hzwangxing@corp.netease.com>
|
||||||
Wang Yuexiao <wang.yuexiao@zte.com.cn>
|
Wang Yuexiao <wang.yuexiao@zte.com.cn>
|
||||||
|
Wang Yumu <37442693@qq.com>
|
||||||
Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
|
Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
|
||||||
Wayne Song <wsong@docker.com>
|
Wayne Song <wsong@docker.com>
|
||||||
Wen Cheng Ma <wenchma@cn.ibm.com>
|
Wen Cheng Ma <wenchma@cn.ibm.com>
|
||||||
|
@ -685,6 +738,7 @@ Wes Morgan <cap10morgan@gmail.com>
|
||||||
Wewang Xiaorenfine <wang.xiaoren@zte.com.cn>
|
Wewang Xiaorenfine <wang.xiaoren@zte.com.cn>
|
||||||
William Henry <whenry@redhat.com>
|
William Henry <whenry@redhat.com>
|
||||||
Xianglin Gao <xlgao@zju.edu.cn>
|
Xianglin Gao <xlgao@zju.edu.cn>
|
||||||
|
Xiaodong Liu <liuxiaodong@loongson.cn>
|
||||||
Xiaodong Zhang <a4012017@sina.com>
|
Xiaodong Zhang <a4012017@sina.com>
|
||||||
Xiaoxi He <xxhe@alauda.io>
|
Xiaoxi He <xxhe@alauda.io>
|
||||||
Xinbo Weng <xihuanbo_0521@zju.edu.cn>
|
Xinbo Weng <xihuanbo_0521@zju.edu.cn>
|
||||||
|
@ -701,6 +755,7 @@ Yuan Sun <sunyuan3@huawei.com>
|
||||||
Yue Zhang <zy675793960@yeah.net>
|
Yue Zhang <zy675793960@yeah.net>
|
||||||
Yunxiang Huang <hyxqshk@vip.qq.com>
|
Yunxiang Huang <hyxqshk@vip.qq.com>
|
||||||
Zachary Romero <zacromero3@gmail.com>
|
Zachary Romero <zacromero3@gmail.com>
|
||||||
|
Zander Mackie <zmackie@gmail.com>
|
||||||
zebrilee <zebrilee@gmail.com>
|
zebrilee <zebrilee@gmail.com>
|
||||||
Zhang Kun <zkazure@gmail.com>
|
Zhang Kun <zkazure@gmail.com>
|
||||||
Zhang Wei <zhangwei555@huawei.com>
|
Zhang Wei <zhangwei555@huawei.com>
|
||||||
|
|
2
vendor/github.com/docker/cli/NOTICE
generated
vendored
2
vendor/github.com/docker/cli/NOTICE
generated
vendored
|
@ -3,7 +3,7 @@ Copyright 2012-2017 Docker, Inc.
|
||||||
|
|
||||||
This product includes software developed at Docker, Inc. (https://www.docker.com).
|
This product includes software developed at Docker, Inc. (https://www.docker.com).
|
||||||
|
|
||||||
This product contains software (https://github.com/kr/pty) developed
|
This product contains software (https://github.com/creack/pty) developed
|
||||||
by Keith Rarick, licensed under the MIT License.
|
by Keith Rarick, licensed under the MIT License.
|
||||||
|
|
||||||
The following is courtesy of our legal counsel:
|
The following is courtesy of our legal counsel:
|
||||||
|
|
38
vendor/github.com/docker/cli/cli/config/configfile/file.go
generated
vendored
38
vendor/github.com/docker/cli/cli/config/configfile/file.go
generated
vendored
|
@ -13,6 +13,7 @@ import (
|
||||||
"github.com/docker/cli/cli/config/credentials"
|
"github.com/docker/cli/cli/config/credentials"
|
||||||
"github.com/docker/cli/cli/config/types"
|
"github.com/docker/cli/cli/config/types"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -118,7 +119,7 @@ func (configFile *ConfigFile) LegacyLoadFromReader(configData io.Reader) error {
|
||||||
// LoadFromReader reads the configuration data given and sets up the auth config
|
// LoadFromReader reads the configuration data given and sets up the auth config
|
||||||
// information with given directory and populates the receiver object
|
// information with given directory and populates the receiver object
|
||||||
func (configFile *ConfigFile) LoadFromReader(configData io.Reader) error {
|
func (configFile *ConfigFile) LoadFromReader(configData io.Reader) error {
|
||||||
if err := json.NewDecoder(configData).Decode(&configFile); err != nil {
|
if err := json.NewDecoder(configData).Decode(&configFile); err != nil && !errors.Is(err, io.EOF) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
|
@ -168,6 +169,13 @@ func (configFile *ConfigFile) SaveToWriter(writer io.Writer) error {
|
||||||
configFile.AuthConfigs = tmpAuthConfigs
|
configFile.AuthConfigs = tmpAuthConfigs
|
||||||
defer func() { configFile.AuthConfigs = saveAuthConfigs }()
|
defer func() { configFile.AuthConfigs = saveAuthConfigs }()
|
||||||
|
|
||||||
|
// User-Agent header is automatically set, and should not be stored in the configuration
|
||||||
|
for v := range configFile.HTTPHeaders {
|
||||||
|
if strings.EqualFold(v, "User-Agent") {
|
||||||
|
delete(configFile.HTTPHeaders, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
data, err := json.MarshalIndent(configFile, "", "\t")
|
data, err := json.MarshalIndent(configFile, "", "\t")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -177,7 +185,7 @@ func (configFile *ConfigFile) SaveToWriter(writer io.Writer) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save encodes and writes out all the authorization information
|
// Save encodes and writes out all the authorization information
|
||||||
func (configFile *ConfigFile) Save() error {
|
func (configFile *ConfigFile) Save() (retErr error) {
|
||||||
if configFile.Filename == "" {
|
if configFile.Filename == "" {
|
||||||
return errors.Errorf("Can't save config with empty filename")
|
return errors.Errorf("Can't save config with empty filename")
|
||||||
}
|
}
|
||||||
|
@ -190,13 +198,33 @@ func (configFile *ConfigFile) Save() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer func() {
|
||||||
|
temp.Close()
|
||||||
|
if retErr != nil {
|
||||||
|
if err := os.Remove(temp.Name()); err != nil {
|
||||||
|
logrus.WithError(err).WithField("file", temp.Name()).Debug("Error cleaning up temp file")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
err = configFile.SaveToWriter(temp)
|
err = configFile.SaveToWriter(temp)
|
||||||
temp.Close()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
os.Remove(temp.Name())
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return os.Rename(temp.Name(), configFile.Filename)
|
|
||||||
|
if err := temp.Close(); err != nil {
|
||||||
|
return errors.Wrap(err, "error closing temp file")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle situation where the configfile is a symlink
|
||||||
|
cfgFile := configFile.Filename
|
||||||
|
if f, err := os.Readlink(cfgFile); err == nil {
|
||||||
|
cfgFile = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try copying the current config file (if any) ownership and permissions
|
||||||
|
copyFilePermissions(cfgFile, temp.Name())
|
||||||
|
return os.Rename(temp.Name(), cfgFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseProxyConfig computes proxy configuration by retrieving the config for the provided host and
|
// ParseProxyConfig computes proxy configuration by retrieving the config for the provided host and
|
||||||
|
|
35
vendor/github.com/docker/cli/cli/config/configfile/file_unix.go
generated
vendored
Normal file
35
vendor/github.com/docker/cli/cli/config/configfile/file_unix.go
generated
vendored
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
|
package configfile
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
// copyFilePermissions copies file ownership and permissions from "src" to "dst",
|
||||||
|
// ignoring any error during the process.
|
||||||
|
func copyFilePermissions(src, dst string) {
|
||||||
|
var (
|
||||||
|
mode os.FileMode = 0600
|
||||||
|
uid, gid int
|
||||||
|
)
|
||||||
|
|
||||||
|
fi, err := os.Stat(src)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if fi.Mode().IsRegular() {
|
||||||
|
mode = fi.Mode()
|
||||||
|
}
|
||||||
|
if err := os.Chmod(dst, mode); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
uid = int(fi.Sys().(*syscall.Stat_t).Uid)
|
||||||
|
gid = int(fi.Sys().(*syscall.Stat_t).Gid)
|
||||||
|
|
||||||
|
if uid > 0 && gid > 0 {
|
||||||
|
_ = os.Chown(dst, uid, gid)
|
||||||
|
}
|
||||||
|
}
|
5
vendor/github.com/docker/cli/cli/config/configfile/file_windows.go
generated
vendored
Normal file
5
vendor/github.com/docker/cli/cli/config/configfile/file_windows.go
generated
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package configfile
|
||||||
|
|
||||||
|
func copyFilePermissions(src, dst string) {
|
||||||
|
// TODO implement for Windows
|
||||||
|
}
|
2
vendor/github.com/docker/cli/cli/config/credentials/default_store.go
generated
vendored
2
vendor/github.com/docker/cli/cli/config/credentials/default_store.go
generated
vendored
|
@ -1,7 +1,7 @@
|
||||||
package credentials
|
package credentials
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os/exec"
|
exec "golang.org/x/sys/execabs"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DetectDefaultStore return the default credentials store for the platform if
|
// DetectDefaultStore return the default credentials store for the platform if
|
||||||
|
|
3
vendor/github.com/docker/docker-credential-helpers/client/command.go
generated
vendored
3
vendor/github.com/docker/docker-credential-helpers/client/command.go
generated
vendored
|
@ -4,7 +4,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
|
exec "golang.org/x/sys/execabs"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Program is an interface to execute external programs.
|
// Program is an interface to execute external programs.
|
||||||
|
|
2
vendor/github.com/docker/docker-credential-helpers/credentials/version.go
generated
vendored
2
vendor/github.com/docker/docker-credential-helpers/credentials/version.go
generated
vendored
|
@ -1,4 +1,4 @@
|
||||||
package credentials
|
package credentials
|
||||||
|
|
||||||
// Version holds a string describing the current version
|
// Version holds a string describing the current version
|
||||||
const Version = "0.6.3"
|
const Version = "0.6.4"
|
||||||
|
|
3
vendor/github.com/franela/goblin/Makefile
generated
vendored
3
vendor/github.com/franela/goblin/Makefile
generated
vendored
|
@ -1,3 +0,0 @@
|
||||||
export GOPATH=$(shell pwd)
|
|
||||||
test:
|
|
||||||
go test -v
|
|
4
vendor/github.com/franela/goblin/README.md
generated
vendored
4
vendor/github.com/franela/goblin/README.md
generated
vendored
|
@ -111,12 +111,12 @@ package foobar
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
. "github.com/franela/goblin"
|
goblin "github.com/franela/goblin"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test(t *testing.T) {
|
func Test(t *testing.T) {
|
||||||
g := Goblin(t)
|
g := goblin.Goblin(t)
|
||||||
|
|
||||||
//special hook for gomega
|
//special hook for gomega
|
||||||
RegisterFailHandler(func(m string, _ ...int) { g.Fail(m) })
|
RegisterFailHandler(func(m string, _ ...int) { g.Fail(m) })
|
||||||
|
|
61
vendor/github.com/franela/goblin/assertions.go
generated
vendored
61
vendor/github.com/franela/goblin/assertions.go
generated
vendored
|
@ -90,3 +90,64 @@ func (a *Assertion) IsFalse(messages ...interface{}) {
|
||||||
formatMessages(messages...)))
|
formatMessages(messages...)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isNil returns whether a.src is nil or not.
|
||||||
|
func (a *Assertion) isNil() bool {
|
||||||
|
if !objectsAreEqual(a.src, nil) {
|
||||||
|
specialKinds := []reflect.Kind{
|
||||||
|
reflect.Slice, reflect.Chan,
|
||||||
|
reflect.Map, reflect.Ptr,
|
||||||
|
reflect.Interface, reflect.Func,
|
||||||
|
}
|
||||||
|
t := reflect.TypeOf(a.src).Kind()
|
||||||
|
for _, kind := range specialKinds {
|
||||||
|
if t == kind {
|
||||||
|
return reflect.ValueOf(a.src).IsNil()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNil asserts that source is nil.
|
||||||
|
func (a *Assertion) IsNil(messages ...interface{}) {
|
||||||
|
if !a.isNil() {
|
||||||
|
message := fmt.Sprintf("%v %s%v", a.src, "expected to be nil", formatMessages(messages...))
|
||||||
|
a.fail(message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNotNil asserts that source is not nil.
|
||||||
|
func (a *Assertion) IsNotNil(messages ...interface{}) {
|
||||||
|
if a.isNil() {
|
||||||
|
message := fmt.Sprintf("%v %s%v", a.src, "is nil", formatMessages(messages...))
|
||||||
|
a.fail(message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsZero asserts that source is a zero value for its respective type.
|
||||||
|
// If it is a structure, for example, all of its fields must have their
|
||||||
|
// respective zero value: "" for strings, 0 for int, etc. Slices, arrays
|
||||||
|
// and maps are only considered zero if they are nil. To check if these
|
||||||
|
// type of values are empty or not, use the len() from the data source
|
||||||
|
// with IsZero(). Example: g.Assert(len(list)).IsZero().
|
||||||
|
func (a *Assertion) IsZero(messages ...interface{}) {
|
||||||
|
valueOf := reflect.ValueOf(a.src)
|
||||||
|
|
||||||
|
if !valueOf.IsZero() {
|
||||||
|
message := fmt.Sprintf("%#v %s%v", a.src, "is not a zero value", formatMessages(messages...))
|
||||||
|
|
||||||
|
a.fail(message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNotZero asserts the contrary of IsZero.
|
||||||
|
func (a *Assertion) IsNotZero(messages ...interface{}) {
|
||||||
|
valueOf := reflect.ValueOf(a.src)
|
||||||
|
|
||||||
|
if valueOf.IsZero() {
|
||||||
|
message := fmt.Sprintf("%#v %s%v", a.src, "is a zero value", formatMessages(messages...))
|
||||||
|
a.fail(message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
133
vendor/github.com/franela/goblin/goblin.go
generated
vendored
133
vendor/github.com/franela/goblin/goblin.go
generated
vendored
|
@ -83,13 +83,13 @@ func (d *Describe) runJustBeforeEach() {
|
||||||
|
|
||||||
func (d *Describe) runAfterEach() {
|
func (d *Describe) runAfterEach() {
|
||||||
|
|
||||||
if d.parent != nil {
|
|
||||||
d.parent.runAfterEach()
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, a := range d.afterEach {
|
for _, a := range d.afterEach {
|
||||||
a()
|
a()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.parent != nil {
|
||||||
|
d.parent.runAfterEach()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Describe) run(g *G) bool {
|
func (d *Describe) run(g *G) bool {
|
||||||
|
@ -124,12 +124,13 @@ type Failure struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type It struct {
|
type It struct {
|
||||||
h interface{}
|
h interface{}
|
||||||
name string
|
name string
|
||||||
parent *Describe
|
parent *Describe
|
||||||
failure *Failure
|
failure *Failure
|
||||||
reporter Reporter
|
failureMu sync.RWMutex
|
||||||
isAsync bool
|
reporter Reporter
|
||||||
|
isAsync bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *It) run(g *G) bool {
|
func (it *It) run(g *G) bool {
|
||||||
|
@ -139,19 +140,15 @@ func (it *It) run(g *G) bool {
|
||||||
g.reporter.ItIsPending(it.name)
|
g.reporter.ItIsPending(it.name)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
//TODO: should handle errors for beforeEach
|
|
||||||
it.parent.runBeforeEach()
|
|
||||||
|
|
||||||
it.parent.runJustBeforeEach()
|
runIt(g, it)
|
||||||
|
|
||||||
runIt(g, it.h)
|
|
||||||
|
|
||||||
it.parent.runAfterEach()
|
|
||||||
|
|
||||||
failed := false
|
failed := false
|
||||||
|
it.failureMu.RLock()
|
||||||
if it.failure != nil {
|
if it.failure != nil {
|
||||||
failed = true
|
failed = true
|
||||||
}
|
}
|
||||||
|
it.failureMu.RUnlock()
|
||||||
|
|
||||||
if failed {
|
if failed {
|
||||||
g.reporter.ItFailed(it.name)
|
g.reporter.ItFailed(it.name)
|
||||||
|
@ -163,6 +160,8 @@ func (it *It) run(g *G) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *It) failed(msg string, stack []string) {
|
func (it *It) failed(msg string, stack []string) {
|
||||||
|
it.failureMu.Lock()
|
||||||
|
defer it.failureMu.Unlock()
|
||||||
it.failure = &Failure{Stack: stack, Message: msg, TestName: it.parent.name + " " + it.name}
|
it.failure = &Failure{Stack: stack, Message: msg, TestName: it.parent.name + " " + it.name}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,13 +195,17 @@ func parseFlags() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var doParseOnce sync.Once
|
||||||
var timeout = flag.Duration("goblin.timeout", 5*time.Second, "Sets default timeouts for all tests")
|
var timeout = flag.Duration("goblin.timeout", 5*time.Second, "Sets default timeouts for all tests")
|
||||||
var isTty = flag.Bool("goblin.tty", true, "Sets the default output format (color / monochrome)")
|
var isTty = flag.Bool("goblin.tty", true, "Sets the default output format (color / monochrome)")
|
||||||
var regexParam = flag.String("goblin.run", "", "Runs only tests which match the supplied regex")
|
var regexParam = flag.String("goblin.run", "", "Runs only tests which match the supplied regex")
|
||||||
var runRegex *regexp.Regexp
|
var runRegex *regexp.Regexp
|
||||||
|
|
||||||
func Goblin(t *testing.T, arguments ...string) *G {
|
func Goblin(t *testing.T, arguments ...string) *G {
|
||||||
parseFlags()
|
doParseOnce.Do(func() {
|
||||||
|
parseFlags()
|
||||||
|
})
|
||||||
|
|
||||||
g := &G{t: t, timeout: *timeout}
|
g := &G{t: t, timeout: *timeout}
|
||||||
var fancy TextFancier
|
var fancy TextFancier
|
||||||
if *isTty {
|
if *isTty {
|
||||||
|
@ -215,29 +218,39 @@ func Goblin(t *testing.T, arguments ...string) *G {
|
||||||
return g
|
return g
|
||||||
}
|
}
|
||||||
|
|
||||||
func runIt(g *G, h interface{}) {
|
func runIt(g *G, it *It) {
|
||||||
defer timeTrack(time.Now(), g)
|
|
||||||
g.mutex.Lock()
|
g.mutex.Lock()
|
||||||
g.timedOut = false
|
g.timedOut = false
|
||||||
g.mutex.Unlock()
|
g.mutex.Unlock()
|
||||||
g.timer = time.NewTimer(g.timeout)
|
g.timer = time.NewTimer(g.timeout)
|
||||||
g.shouldContinue = make(chan bool)
|
g.shouldContinue = make(chan bool)
|
||||||
if call, ok := h.(func()); ok {
|
if call, ok := it.h.(func()); ok {
|
||||||
// the test is synchronous
|
// the test is synchronous
|
||||||
go func(c chan bool) { call(); c <- true }(g.shouldContinue)
|
go func(c chan bool) {
|
||||||
} else if call, ok := h.(func(Done)); ok {
|
it.parent.runBeforeEach()
|
||||||
|
it.parent.runJustBeforeEach()
|
||||||
|
timeTrack(g, func() { call() })
|
||||||
|
it.parent.runAfterEach()
|
||||||
|
c <- true
|
||||||
|
}(g.shouldContinue)
|
||||||
|
} else if call, ok := it.h.(func(Done)); ok {
|
||||||
doneCalled := 0
|
doneCalled := 0
|
||||||
go func(c chan bool) {
|
go func(c chan bool) {
|
||||||
call(func(msg ...interface{}) {
|
it.parent.runBeforeEach()
|
||||||
if len(msg) > 0 {
|
it.parent.runJustBeforeEach()
|
||||||
g.Fail(msg)
|
timeTrack(g, func() {
|
||||||
} else {
|
call(func(msg ...interface{}) {
|
||||||
doneCalled++
|
if len(msg) > 0 {
|
||||||
if doneCalled > 1 {
|
g.Fail(msg)
|
||||||
g.Fail("Done called multiple times")
|
} else {
|
||||||
|
doneCalled++
|
||||||
|
if doneCalled > 1 {
|
||||||
|
g.Fail("Done called multiple times")
|
||||||
|
}
|
||||||
|
it.parent.runAfterEach()
|
||||||
|
c <- true
|
||||||
}
|
}
|
||||||
c <- true
|
})
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}(g.shouldContinue)
|
}(g.shouldContinue)
|
||||||
} else {
|
} else {
|
||||||
|
@ -334,25 +347,57 @@ func (g *G) Assert(src interface{}) *Assertion {
|
||||||
return &Assertion{src: src, fail: g.Fail}
|
return &Assertion{src: src, fail: g.Fail}
|
||||||
}
|
}
|
||||||
|
|
||||||
func timeTrack(start time.Time, g *G) {
|
func timeTrack(g *G, call func()) {
|
||||||
g.reporter.ItTook(time.Since(start))
|
t := time.Now()
|
||||||
|
defer func() {
|
||||||
|
g.reporter.ItTook(time.Since(t))
|
||||||
|
}()
|
||||||
|
call()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *G) Fail(error interface{}) {
|
func (g *G) errorCommon(msg string, fatal bool) {
|
||||||
//Skips 7 stacks due to the functions between the stack and the test
|
|
||||||
stack := ResolveStack(7)
|
|
||||||
message := fmt.Sprintf("%v", error)
|
|
||||||
if g.currentIt == nil {
|
if g.currentIt == nil {
|
||||||
panic("Asserts should be written inside an It() block.")
|
panic("Asserts should be written inside an It() block.")
|
||||||
}
|
}
|
||||||
g.currentIt.failed(message, stack)
|
g.currentIt.failed(msg, ResolveStack(9))
|
||||||
if g.shouldContinue != nil {
|
if g.shouldContinue != nil {
|
||||||
g.shouldContinue <- true
|
g.shouldContinue <- true
|
||||||
}
|
}
|
||||||
g.mutex.Lock()
|
|
||||||
defer g.mutex.Unlock()
|
if fatal {
|
||||||
if !g.timedOut {
|
g.mutex.Lock()
|
||||||
//Stop test function execution
|
defer g.mutex.Unlock()
|
||||||
runtime.Goexit()
|
if !g.timedOut {
|
||||||
|
//Stop test function execution
|
||||||
|
runtime.Goexit()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *G) Fail(error interface{}) {
|
||||||
|
message := fmt.Sprintf("%v", error)
|
||||||
|
g.errorCommon(message, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *G) FailNow() {
|
||||||
|
g.t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *G) Failf(format string, args ...interface{}) {
|
||||||
|
message := fmt.Sprintf(format, args...)
|
||||||
|
g.errorCommon(message, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *G) Fatalf(format string, args ...interface{}) {
|
||||||
|
message := fmt.Sprintf(format, args...)
|
||||||
|
g.errorCommon(message, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *G) Errorf(format string, args ...interface{}) {
|
||||||
|
message := fmt.Sprintf(format, args...)
|
||||||
|
g.errorCommon(message, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *G) Helper() {
|
||||||
|
g.t.Helper()
|
||||||
|
}
|
||||||
|
|
7
vendor/github.com/franela/goblin/reporting.go
generated
vendored
7
vendor/github.com/franela/goblin/reporting.go
generated
vendored
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -33,6 +34,7 @@ type DetailedReporter struct {
|
||||||
level, failed, passed, pending, excluded int
|
level, failed, passed, pending, excluded int
|
||||||
failures []*Failure
|
failures []*Failure
|
||||||
executionTime, totalExecutionTime time.Duration
|
executionTime, totalExecutionTime time.Duration
|
||||||
|
executionTimeMu sync.RWMutex
|
||||||
fancy TextFancier
|
fancy TextFancier
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,6 +96,8 @@ func (r *DetailedReporter) EndDescribe() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *DetailedReporter) ItTook(duration time.Duration) {
|
func (r *DetailedReporter) ItTook(duration time.Duration) {
|
||||||
|
r.executionTimeMu.Lock()
|
||||||
|
defer r.executionTimeMu.Unlock()
|
||||||
r.executionTime = duration
|
r.executionTime = duration
|
||||||
r.totalExecutionTime += duration
|
r.totalExecutionTime += duration
|
||||||
}
|
}
|
||||||
|
@ -123,7 +127,10 @@ func (r *DetailedReporter) Begin() {
|
||||||
|
|
||||||
func (r *DetailedReporter) End() {
|
func (r *DetailedReporter) End() {
|
||||||
comp := fmt.Sprintf("%d tests complete", r.passed)
|
comp := fmt.Sprintf("%d tests complete", r.passed)
|
||||||
|
|
||||||
|
r.executionTimeMu.RLock()
|
||||||
t := fmt.Sprintf("(%d ms)", r.totalExecutionTime/time.Millisecond)
|
t := fmt.Sprintf("(%d ms)", r.totalExecutionTime/time.Millisecond)
|
||||||
|
r.executionTimeMu.RUnlock()
|
||||||
|
|
||||||
//fmt.Printf("\n\n \033[32m%d tests complete\033[0m \033[90m(%d ms)\033[0m\n", r.passed, r.totalExecutionTime/time.Millisecond)
|
//fmt.Printf("\n\n \033[32m%d tests complete\033[0m \033[90m(%d ms)\033[0m\n", r.passed, r.totalExecutionTime/time.Millisecond)
|
||||||
fmt.Printf("\n\n %v %v\n", r.fancy.Green(comp), r.fancy.Gray(t))
|
fmt.Printf("\n\n %v %v\n", r.fancy.Green(comp), r.fancy.Gray(t))
|
||||||
|
|
3
vendor/github.com/google/go-github/v39/AUTHORS
generated
vendored
3
vendor/github.com/google/go-github/v39/AUTHORS
generated
vendored
|
@ -155,6 +155,7 @@ ishan upadhyay <ishanupadhyay412@gmail.com>
|
||||||
isqua <isqua@isqua.ru>
|
isqua <isqua@isqua.ru>
|
||||||
Jacob Valdemar <jan@lunar.app>
|
Jacob Valdemar <jan@lunar.app>
|
||||||
Jake Krammer <jake.krammer1@gmail.com>
|
Jake Krammer <jake.krammer1@gmail.com>
|
||||||
|
Jake White <jake@jwhite.network>
|
||||||
Jameel Haffejee <RC1140@republiccommandos.co.za>
|
Jameel Haffejee <RC1140@republiccommandos.co.za>
|
||||||
James Cockbain <james.cockbain@ibm.com>
|
James Cockbain <james.cockbain@ibm.com>
|
||||||
James Loh <github@jloh.co>
|
James Loh <github@jloh.co>
|
||||||
|
@ -353,4 +354,4 @@ Yosuke Akatsuka <yosuke.akatsuka@access-company.com>
|
||||||
Yumikiyo Osanai <yumios.art@gmail.com>
|
Yumikiyo Osanai <yumios.art@gmail.com>
|
||||||
Yusuke Kuoka <ykuoka@gmail.com>
|
Yusuke Kuoka <ykuoka@gmail.com>
|
||||||
Zach Latta <zach@zachlatta.com>
|
Zach Latta <zach@zachlatta.com>
|
||||||
zhouhaibing089 <zhouhaibing089@gmail.com>
|
zhouhaibing089 <zhouhaibing089@gmail.com>
|
3
vendor/github.com/google/go-github/v39/github/actions_workflow_jobs.go
generated
vendored
3
vendor/github.com/google/go-github/v39/github/actions_workflow_jobs.go
generated
vendored
|
@ -38,6 +38,8 @@ type WorkflowJob struct {
|
||||||
Name *string `json:"name,omitempty"`
|
Name *string `json:"name,omitempty"`
|
||||||
Steps []*TaskStep `json:"steps,omitempty"`
|
Steps []*TaskStep `json:"steps,omitempty"`
|
||||||
CheckRunURL *string `json:"check_run_url,omitempty"`
|
CheckRunURL *string `json:"check_run_url,omitempty"`
|
||||||
|
// Labels represents runner labels from the `runs-on:` key from a GitHub Actions workflow.
|
||||||
|
Labels []string `json:"labels,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Jobs represents a slice of repository action workflow job.
|
// Jobs represents a slice of repository action workflow job.
|
||||||
|
@ -145,5 +147,4 @@ func (s *ActionsService) getWorkflowLogsFromURL(ctx context.Context, u string, f
|
||||||
resp, err = s.getWorkflowLogsFromURL(ctx, u, false)
|
resp, err = s.getWorkflowLogsFromURL(ctx, u, false)
|
||||||
}
|
}
|
||||||
return resp, err
|
return resp, err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
4
vendor/github.com/google/go-github/v39/github/apps.go
generated
vendored
4
vendor/github.com/google/go-github/v39/github/apps.go
generated
vendored
|
@ -47,6 +47,10 @@ type InstallationTokenOptions struct {
|
||||||
// Providing repository IDs restricts the access of an installation token to specific repositories.
|
// Providing repository IDs restricts the access of an installation token to specific repositories.
|
||||||
RepositoryIDs []int64 `json:"repository_ids,omitempty"`
|
RepositoryIDs []int64 `json:"repository_ids,omitempty"`
|
||||||
|
|
||||||
|
// The names of the repositories that the installation token can access.
|
||||||
|
// Providing repository names restricts the access of an installation token to specific repositories.
|
||||||
|
Repositories []string `json:"repositories,omitempty"`
|
||||||
|
|
||||||
// The permissions granted to the access token.
|
// The permissions granted to the access token.
|
||||||
// The permissions object includes the permission names and their access type.
|
// The permissions object includes the permission names and their access type.
|
||||||
Permissions *InstallationPermissions `json:"permissions,omitempty"`
|
Permissions *InstallationPermissions `json:"permissions,omitempty"`
|
||||||
|
|
48
vendor/github.com/google/go-github/v39/github/apps_hooks.go
generated
vendored
Normal file
48
vendor/github.com/google/go-github/v39/github/apps_hooks.go
generated
vendored
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
// Copyright 2021 The go-github AUTHORS. All rights reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package github
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetHookConfig returns the webhook configuration for a GitHub App.
|
||||||
|
// The underlying transport must be authenticated as an app.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps#get-a-webhook-configuration-for-an-app
|
||||||
|
func (s *AppsService) GetHookConfig(ctx context.Context) (*HookConfig, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest("GET", "app/hook/config", nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
config := new(HookConfig)
|
||||||
|
resp, err := s.client.Do(ctx, req, &config)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return config, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateHookConfig updates the webhook configuration for a GitHub App.
|
||||||
|
// The underlying transport must be authenticated as an app.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps#update-a-webhook-configuration-for-an-app
|
||||||
|
func (s *AppsService) UpdateHookConfig(ctx context.Context, config *HookConfig) (*HookConfig, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest("PATCH", "app/hook/config", config)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
c := new(HookConfig)
|
||||||
|
resp, err := s.client.Do(ctx, req, c)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c, resp, nil
|
||||||
|
}
|
21
vendor/github.com/google/go-github/v39/github/doc.go
generated
vendored
21
vendor/github.com/google/go-github/v39/github/doc.go
generated
vendored
|
@ -73,6 +73,10 @@ BasicAuthTransport.
|
||||||
|
|
||||||
GitHub Apps authentication can be provided by the
|
GitHub Apps authentication can be provided by the
|
||||||
https://github.com/bradleyfalzon/ghinstallation package.
|
https://github.com/bradleyfalzon/ghinstallation package.
|
||||||
|
It supports both authentication as an installation, using an installation access token,
|
||||||
|
and as an app, using a JWT.
|
||||||
|
|
||||||
|
To authenticate as an installation:
|
||||||
|
|
||||||
import "github.com/bradleyfalzon/ghinstallation"
|
import "github.com/bradleyfalzon/ghinstallation"
|
||||||
|
|
||||||
|
@ -89,6 +93,23 @@ https://github.com/bradleyfalzon/ghinstallation package.
|
||||||
// Use client...
|
// Use client...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
To authenticate as an app, using a JWT:
|
||||||
|
|
||||||
|
import "github.com/bradleyfalzon/ghinstallation"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Wrap the shared transport for use with the application ID 1.
|
||||||
|
atr, err := ghinstallation.NewAppsTransportKeyFromFile(http.DefaultTransport, 1, "2016-10-19.private-key.pem")
|
||||||
|
if err != nil {
|
||||||
|
// Handle error.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use app transport with client
|
||||||
|
client := github.NewClient(&http.Client{Transport: atr})
|
||||||
|
|
||||||
|
// Use client...
|
||||||
|
}
|
||||||
|
|
||||||
Rate Limiting
|
Rate Limiting
|
||||||
|
|
||||||
GitHub imposes a rate limit on all API clients. Unauthenticated clients are
|
GitHub imposes a rate limit on all API clients. Unauthenticated clients are
|
||||||
|
|
13
vendor/github.com/google/go-github/v39/github/event_types.go
generated
vendored
13
vendor/github.com/google/go-github/v39/github/event_types.go
generated
vendored
|
@ -384,6 +384,10 @@ type IssueCommentEvent struct {
|
||||||
Repo *Repository `json:"repository,omitempty"`
|
Repo *Repository `json:"repository,omitempty"`
|
||||||
Sender *User `json:"sender,omitempty"`
|
Sender *User `json:"sender,omitempty"`
|
||||||
Installation *Installation `json:"installation,omitempty"`
|
Installation *Installation `json:"installation,omitempty"`
|
||||||
|
|
||||||
|
// The following field is only present when the webhook is triggered on
|
||||||
|
// a repository belonging to an organization.
|
||||||
|
Organization *Organization `json:"organization,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// IssuesEvent is triggered when an issue is opened, edited, deleted, transferred,
|
// IssuesEvent is triggered when an issue is opened, edited, deleted, transferred,
|
||||||
|
@ -819,6 +823,10 @@ type PushEvent struct {
|
||||||
Pusher *User `json:"pusher,omitempty"`
|
Pusher *User `json:"pusher,omitempty"`
|
||||||
Sender *User `json:"sender,omitempty"`
|
Sender *User `json:"sender,omitempty"`
|
||||||
Installation *Installation `json:"installation,omitempty"`
|
Installation *Installation `json:"installation,omitempty"`
|
||||||
|
|
||||||
|
// The following field is only present when the webhook is triggered on
|
||||||
|
// a repository belonging to an organization.
|
||||||
|
Organization *Organization `json:"organization,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p PushEvent) String() string {
|
func (p PushEvent) String() string {
|
||||||
|
@ -1116,13 +1124,16 @@ type WorkflowDispatchEvent struct {
|
||||||
|
|
||||||
// WorkflowJobEvent is triggered when a job is queued, started or completed.
|
// WorkflowJobEvent is triggered when a job is queued, started or completed.
|
||||||
//
|
//
|
||||||
// GitHub API docs: pending
|
// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#workflow_job
|
||||||
type WorkflowJobEvent struct {
|
type WorkflowJobEvent struct {
|
||||||
WorkflowJob *WorkflowJob `json:"workflow_job,omitempty"`
|
WorkflowJob *WorkflowJob `json:"workflow_job,omitempty"`
|
||||||
|
|
||||||
Action *string `json:"action,omitempty"`
|
Action *string `json:"action,omitempty"`
|
||||||
|
|
||||||
// The following fields are only populated by Webhook events.
|
// The following fields are only populated by Webhook events.
|
||||||
|
|
||||||
|
// Org is not nil when the webhook is configured for an organization or the event
|
||||||
|
// occurs from activity in a repository owned by an organization.
|
||||||
Org *Organization `json:"organization,omitempty"`
|
Org *Organization `json:"organization,omitempty"`
|
||||||
Repo *Repository `json:"repository,omitempty"`
|
Repo *Repository `json:"repository,omitempty"`
|
||||||
Sender *User `json:"sender,omitempty"`
|
Sender *User `json:"sender,omitempty"`
|
||||||
|
|
152
vendor/github.com/google/go-github/v39/github/github-accessors.go
generated
vendored
152
vendor/github.com/google/go-github/v39/github/github-accessors.go
generated
vendored
|
@ -4516,6 +4516,22 @@ func (f *ForkEvent) GetSender() *User {
|
||||||
return f.Sender
|
return f.Sender
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPreviousTagName returns the PreviousTagName field if it's non-nil, zero value otherwise.
|
||||||
|
func (g *GenerateNotesOptions) GetPreviousTagName() string {
|
||||||
|
if g == nil || g.PreviousTagName == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *g.PreviousTagName
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise.
|
||||||
|
func (g *GenerateNotesOptions) GetTargetCommitish() string {
|
||||||
|
if g == nil || g.TargetCommitish == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *g.TargetCommitish
|
||||||
|
}
|
||||||
|
|
||||||
// GetInclude returns the Include field if it's non-nil, zero value otherwise.
|
// GetInclude returns the Include field if it's non-nil, zero value otherwise.
|
||||||
func (g *GetAuditLogOptions) GetInclude() string {
|
func (g *GetAuditLogOptions) GetInclude() string {
|
||||||
if g == nil || g.Include == nil {
|
if g == nil || g.Include == nil {
|
||||||
|
@ -5236,6 +5252,14 @@ func (h *HookConfig) GetInsecureSSL() string {
|
||||||
return *h.InsecureSSL
|
return *h.InsecureSSL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSecret returns the Secret field if it's non-nil, zero value otherwise.
|
||||||
|
func (h *HookConfig) GetSecret() string {
|
||||||
|
if h == nil || h.Secret == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *h.Secret
|
||||||
|
}
|
||||||
|
|
||||||
// GetURL returns the URL field if it's non-nil, zero value otherwise.
|
// GetURL returns the URL field if it's non-nil, zero value otherwise.
|
||||||
func (h *HookConfig) GetURL() string {
|
func (h *HookConfig) GetURL() string {
|
||||||
if h == nil || h.URL == nil {
|
if h == nil || h.URL == nil {
|
||||||
|
@ -6564,6 +6588,14 @@ func (i *IssueCommentEvent) GetIssue() *Issue {
|
||||||
return i.Issue
|
return i.Issue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetOrganization returns the Organization field.
|
||||||
|
func (i *IssueCommentEvent) GetOrganization() *Organization {
|
||||||
|
if i == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return i.Organization
|
||||||
|
}
|
||||||
|
|
||||||
// GetRepo returns the Repo field.
|
// GetRepo returns the Repo field.
|
||||||
func (i *IssueCommentEvent) GetRepo() *Repository {
|
func (i *IssueCommentEvent) GetRepo() *Repository {
|
||||||
if i == nil {
|
if i == nil {
|
||||||
|
@ -9212,6 +9244,14 @@ func (p *Package) GetRegistry() *PackageRegistry {
|
||||||
return p.Registry
|
return p.Registry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetRepository returns the Repository field.
|
||||||
|
func (p *Package) GetRepository() *Repository {
|
||||||
|
if p == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return p.Repository
|
||||||
|
}
|
||||||
|
|
||||||
// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
|
// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
|
||||||
func (p *Package) GetUpdatedAt() Timestamp {
|
func (p *Package) GetUpdatedAt() Timestamp {
|
||||||
if p == nil || p.UpdatedAt == nil {
|
if p == nil || p.UpdatedAt == nil {
|
||||||
|
@ -9220,6 +9260,30 @@ func (p *Package) GetUpdatedAt() Timestamp {
|
||||||
return *p.UpdatedAt
|
return *p.UpdatedAt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetURL returns the URL field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *Package) GetURL() string {
|
||||||
|
if p == nil || p.URL == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.URL
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetVersionCount returns the VersionCount field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *Package) GetVersionCount() int64 {
|
||||||
|
if p == nil || p.VersionCount == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return *p.VersionCount
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *Package) GetVisibility() string {
|
||||||
|
if p == nil || p.Visibility == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.Visibility
|
||||||
|
}
|
||||||
|
|
||||||
// GetAction returns the Action field if it's non-nil, zero value otherwise.
|
// GetAction returns the Action field if it's non-nil, zero value otherwise.
|
||||||
func (p *PackageEvent) GetAction() string {
|
func (p *PackageEvent) GetAction() string {
|
||||||
if p == nil || p.Action == nil {
|
if p == nil || p.Action == nil {
|
||||||
|
@ -9364,6 +9428,46 @@ func (p *PackageFile) GetUpdatedAt() Timestamp {
|
||||||
return *p.UpdatedAt
|
return *p.UpdatedAt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPackageType returns the PackageType field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *PackageListOptions) GetPackageType() string {
|
||||||
|
if p == nil || p.PackageType == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.PackageType
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetState returns the State field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *PackageListOptions) GetState() string {
|
||||||
|
if p == nil || p.State == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.State
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *PackageListOptions) GetVisibility() string {
|
||||||
|
if p == nil || p.Visibility == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.Visibility
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetContainer returns the Container field.
|
||||||
|
func (p *PackageMetadata) GetContainer() *PackageContainerMetadata {
|
||||||
|
if p == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return p.Container
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPackageType returns the PackageType field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *PackageMetadata) GetPackageType() string {
|
||||||
|
if p == nil || p.PackageType == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.PackageType
|
||||||
|
}
|
||||||
|
|
||||||
// GetAboutURL returns the AboutURL field if it's non-nil, zero value otherwise.
|
// GetAboutURL returns the AboutURL field if it's non-nil, zero value otherwise.
|
||||||
func (p *PackageRegistry) GetAboutURL() string {
|
func (p *PackageRegistry) GetAboutURL() string {
|
||||||
if p == nil || p.AboutURL == nil {
|
if p == nil || p.AboutURL == nil {
|
||||||
|
@ -9564,6 +9668,30 @@ func (p *PackageVersion) GetManifest() string {
|
||||||
return *p.Manifest
|
return *p.Manifest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetMetadata returns the Metadata field.
|
||||||
|
func (p *PackageVersion) GetMetadata() *PackageMetadata {
|
||||||
|
if p == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return p.Metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetName returns the Name field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *PackageVersion) GetName() string {
|
||||||
|
if p == nil || p.Name == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPackageHTMLURL returns the PackageHTMLURL field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *PackageVersion) GetPackageHTMLURL() string {
|
||||||
|
if p == nil || p.PackageHTMLURL == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.PackageHTMLURL
|
||||||
|
}
|
||||||
|
|
||||||
// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
|
// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
|
||||||
func (p *PackageVersion) GetPrerelease() bool {
|
func (p *PackageVersion) GetPrerelease() bool {
|
||||||
if p == nil || p.Prerelease == nil {
|
if p == nil || p.Prerelease == nil {
|
||||||
|
@ -9620,6 +9748,14 @@ func (p *PackageVersion) GetUpdatedAt() Timestamp {
|
||||||
return *p.UpdatedAt
|
return *p.UpdatedAt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetURL returns the URL field if it's non-nil, zero value otherwise.
|
||||||
|
func (p *PackageVersion) GetURL() string {
|
||||||
|
if p == nil || p.URL == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *p.URL
|
||||||
|
}
|
||||||
|
|
||||||
// GetVersion returns the Version field if it's non-nil, zero value otherwise.
|
// GetVersion returns the Version field if it's non-nil, zero value otherwise.
|
||||||
func (p *PackageVersion) GetVersion() string {
|
func (p *PackageVersion) GetVersion() string {
|
||||||
if p == nil || p.Version == nil {
|
if p == nil || p.Version == nil {
|
||||||
|
@ -12220,6 +12356,14 @@ func (p *PushEvent) GetInstallation() *Installation {
|
||||||
return p.Installation
|
return p.Installation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetOrganization returns the Organization field.
|
||||||
|
func (p *PushEvent) GetOrganization() *Organization {
|
||||||
|
if p == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return p.Organization
|
||||||
|
}
|
||||||
|
|
||||||
// GetPusher returns the Pusher field.
|
// GetPusher returns the Pusher field.
|
||||||
func (p *PushEvent) GetPusher() *User {
|
func (p *PushEvent) GetPusher() *User {
|
||||||
if p == nil {
|
if p == nil {
|
||||||
|
@ -14332,6 +14476,14 @@ func (r *RepositoryRelease) GetDraft() bool {
|
||||||
return *r.Draft
|
return *r.Draft
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetGenerateReleaseNotes returns the GenerateReleaseNotes field if it's non-nil, zero value otherwise.
|
||||||
|
func (r *RepositoryRelease) GetGenerateReleaseNotes() bool {
|
||||||
|
if r == nil || r.GenerateReleaseNotes == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return *r.GenerateReleaseNotes
|
||||||
|
}
|
||||||
|
|
||||||
// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
|
// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
|
||||||
func (r *RepositoryRelease) GetHTMLURL() string {
|
func (r *RepositoryRelease) GetHTMLURL() string {
|
||||||
if r == nil || r.HTMLURL == nil {
|
if r == nil || r.HTMLURL == nil {
|
||||||
|
|
10
vendor/github.com/google/go-github/v39/github/github.go
generated
vendored
10
vendor/github.com/google/go-github/v39/github/github.go
generated
vendored
|
@ -708,10 +708,10 @@ func (c *Client) checkRateLimitBeforeDo(req *http.Request, rateLimitCategory rat
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// compareHttpResponse returns whether two http.Response objects are equal or not.
|
// compareHTTPResponse returns whether two http.Response objects are equal or not.
|
||||||
// Currently, only StatusCode is checked. This function is used when implementing the
|
// Currently, only StatusCode is checked. This function is used when implementing the
|
||||||
// Is(error) bool interface for the custom error types in this package.
|
// Is(error) bool interface for the custom error types in this package.
|
||||||
func compareHttpResponse(r1, r2 *http.Response) bool {
|
func compareHTTPResponse(r1, r2 *http.Response) bool {
|
||||||
if r1 == nil && r2 == nil {
|
if r1 == nil && r2 == nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -761,7 +761,7 @@ func (r *ErrorResponse) Is(target error) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.Message != v.Message || (r.DocumentationURL != v.DocumentationURL) ||
|
if r.Message != v.Message || (r.DocumentationURL != v.DocumentationURL) ||
|
||||||
!compareHttpResponse(r.Response, v.Response) {
|
!compareHTTPResponse(r.Response, v.Response) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -827,7 +827,7 @@ func (r *RateLimitError) Is(target error) bool {
|
||||||
|
|
||||||
return r.Rate == v.Rate &&
|
return r.Rate == v.Rate &&
|
||||||
r.Message == v.Message &&
|
r.Message == v.Message &&
|
||||||
compareHttpResponse(r.Response, v.Response)
|
compareHTTPResponse(r.Response, v.Response)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AcceptedError occurs when GitHub returns 202 Accepted response with an
|
// AcceptedError occurs when GitHub returns 202 Accepted response with an
|
||||||
|
@ -881,7 +881,7 @@ func (r *AbuseRateLimitError) Is(target error) bool {
|
||||||
|
|
||||||
return r.Message == v.Message &&
|
return r.Message == v.Message &&
|
||||||
r.RetryAfter == v.RetryAfter &&
|
r.RetryAfter == v.RetryAfter &&
|
||||||
compareHttpResponse(r.Response, v.Response)
|
compareHTTPResponse(r.Response, v.Response)
|
||||||
}
|
}
|
||||||
|
|
||||||
// sanitizeURL redacts the client_secret parameter from the URL which may be
|
// sanitizeURL redacts the client_secret parameter from the URL which may be
|
||||||
|
|
2
vendor/github.com/google/go-github/v39/github/messages.go
generated
vendored
2
vendor/github.com/google/go-github/v39/github/messages.go
generated
vendored
|
@ -192,7 +192,7 @@ func ValidatePayloadFromBody(contentType string, readable io.Reader, signature s
|
||||||
payload = []byte(form.Get(payloadFormParam))
|
payload = []byte(form.Get(payloadFormParam))
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("Webhook request has unsupported Content-Type %q", contentType)
|
return nil, fmt.Errorf("webhook request has unsupported Content-Type %q", contentType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only validate the signature if a secret token exists. This is intended for
|
// Only validate the signature if a secret token exists. This is intended for
|
||||||
|
|
3
vendor/github.com/google/go-github/v39/github/orgs_audit_log.go
generated
vendored
3
vendor/github.com/google/go-github/v39/github/orgs_audit_log.go
generated
vendored
|
@ -24,6 +24,9 @@ type HookConfig struct {
|
||||||
ContentType *string `json:"content_type,omitempty"`
|
ContentType *string `json:"content_type,omitempty"`
|
||||||
InsecureSSL *string `json:"insecure_ssl,omitempty"`
|
InsecureSSL *string `json:"insecure_ssl,omitempty"`
|
||||||
URL *string `json:"url,omitempty"`
|
URL *string `json:"url,omitempty"`
|
||||||
|
|
||||||
|
// Secret is returned obfuscated by GitHub, but it can be set for outgoing requests.
|
||||||
|
Secret *string `json:"secret,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// AuditEntry describes the fields that may be represented by various audit-log "action" entries.
|
// AuditEntry describes the fields that may be represented by various audit-log "action" entries.
|
||||||
|
|
149
vendor/github.com/google/go-github/v39/github/orgs_packages.go
generated
vendored
Normal file
149
vendor/github.com/google/go-github/v39/github/orgs_packages.go
generated
vendored
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
// Copyright 2021 The go-github AUTHORS. All rights reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package github
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// List the packages for an organization.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#list-packages-for-an-organization
|
||||||
|
func (s *OrganizationsService) ListPackages(ctx context.Context, org string, opts *PackageListOptions) ([]*Package, *Response, error) {
|
||||||
|
u := fmt.Sprintf("orgs/%v/packages", org)
|
||||||
|
u, err := addOptions(u, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var packages []*Package
|
||||||
|
resp, err := s.client.Do(ctx, req, &packages)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return packages, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a package by name from an organization.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-a-package-for-an-organization
|
||||||
|
func (s *OrganizationsService) GetPackage(ctx context.Context, org, packageType, packageName string) (*Package, *Response, error) {
|
||||||
|
u := fmt.Sprintf("orgs/%v/packages/%v/%v", org, packageType, packageName)
|
||||||
|
req, err := s.client.NewRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var pack *Package
|
||||||
|
resp, err := s.client.Do(ctx, req, &pack)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return pack, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete a package from an organization.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#delete-a-package-for-an-organization
|
||||||
|
func (s *OrganizationsService) DeletePackage(ctx context.Context, org, packageType, packageName string) (*Response, error) {
|
||||||
|
u := fmt.Sprintf("orgs/%v/packages/%v/%v", org, packageType, packageName)
|
||||||
|
req, err := s.client.NewRequest("DELETE", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(ctx, req, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore a package to an organization.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#restore-a-package-for-an-organization
|
||||||
|
func (s *OrganizationsService) RestorePackage(ctx context.Context, org, packageType, packageName string) (*Response, error) {
|
||||||
|
u := fmt.Sprintf("orgs/%v/packages/%v/%v/restore", org, packageType, packageName)
|
||||||
|
req, err := s.client.NewRequest("POST", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(ctx, req, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all versions of a package in an organization.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-all-package-versions-for-a-package-owned-by-an-organization
|
||||||
|
func (s *OrganizationsService) PackageGetAllVersions(ctx context.Context, org, packageType, packageName string, opts *PackageListOptions) ([]*PackageVersion, *Response, error) {
|
||||||
|
u := fmt.Sprintf("orgs/%v/packages/%v/%v/versions", org, packageType, packageName)
|
||||||
|
u, err := addOptions(u, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var versions []*PackageVersion
|
||||||
|
resp, err := s.client.Do(ctx, req, &versions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return versions, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a specific version of a package in an organization.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-a-package-version-for-an-organization
|
||||||
|
func (s *OrganizationsService) PackageGetVersion(ctx context.Context, org, packageType, packageName string, packageVersionID int64) (*PackageVersion, *Response, error) {
|
||||||
|
u := fmt.Sprintf("orgs/%v/packages/%v/%v/versions/%v", org, packageType, packageName, packageVersionID)
|
||||||
|
req, err := s.client.NewRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var version *PackageVersion
|
||||||
|
resp, err := s.client.Do(ctx, req, &version)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return version, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete a package version from an organization.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#delete-package-version-for-an-organization
|
||||||
|
func (s *OrganizationsService) PackageDeleteVersion(ctx context.Context, org, packageType, packageName string, packageVersionID int64) (*Response, error) {
|
||||||
|
u := fmt.Sprintf("orgs/%v/packages/%v/%v/versions/%v", org, packageType, packageName, packageVersionID)
|
||||||
|
req, err := s.client.NewRequest("DELETE", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(ctx, req, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore a package version to an organization.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#restore-package-version-for-an-organization
|
||||||
|
func (s *OrganizationsService) PackageRestoreVersion(ctx context.Context, org, packageType, packageName string, packageVersionID int64) (*Response, error) {
|
||||||
|
u := fmt.Sprintf("orgs/%v/packages/%v/%v/versions/%v/restore", org, packageType, packageName, packageVersionID)
|
||||||
|
req, err := s.client.NewRequest("POST", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(ctx, req, nil)
|
||||||
|
}
|
78
vendor/github.com/google/go-github/v39/github/packages.go
generated
vendored
78
vendor/github.com/google/go-github/v39/github/packages.go
generated
vendored
|
@ -16,6 +16,10 @@ type Package struct {
|
||||||
Owner *User `json:"owner,omitempty"`
|
Owner *User `json:"owner,omitempty"`
|
||||||
PackageVersion *PackageVersion `json:"package_version,omitempty"`
|
PackageVersion *PackageVersion `json:"package_version,omitempty"`
|
||||||
Registry *PackageRegistry `json:"registry,omitempty"`
|
Registry *PackageRegistry `json:"registry,omitempty"`
|
||||||
|
URL *string `json:"url,omitempty"`
|
||||||
|
VersionCount *int64 `json:"version_count,omitempty"`
|
||||||
|
Visibility *string `json:"visibility,omitempty"`
|
||||||
|
Repository *Repository `json:"repository,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p Package) String() string {
|
func (p Package) String() string {
|
||||||
|
@ -24,24 +28,28 @@ func (p Package) String() string {
|
||||||
|
|
||||||
// PackageVersion represents a GitHub package version.
|
// PackageVersion represents a GitHub package version.
|
||||||
type PackageVersion struct {
|
type PackageVersion struct {
|
||||||
ID *int64 `json:"id,omitempty"`
|
ID *int64 `json:"id,omitempty"`
|
||||||
Version *string `json:"version,omitempty"`
|
Version *string `json:"version,omitempty"`
|
||||||
Summary *string `json:"summary,omitempty"`
|
Summary *string `json:"summary,omitempty"`
|
||||||
Body *string `json:"body,omitempty"`
|
Body *string `json:"body,omitempty"`
|
||||||
BodyHTML *string `json:"body_html,omitempty"`
|
BodyHTML *string `json:"body_html,omitempty"`
|
||||||
Release *PackageRelease `json:"release,omitempty"`
|
Release *PackageRelease `json:"release,omitempty"`
|
||||||
Manifest *string `json:"manifest,omitempty"`
|
Manifest *string `json:"manifest,omitempty"`
|
||||||
HTMLURL *string `json:"html_url,omitempty"`
|
HTMLURL *string `json:"html_url,omitempty"`
|
||||||
TagName *string `json:"tag_name,omitempty"`
|
TagName *string `json:"tag_name,omitempty"`
|
||||||
TargetCommitish *string `json:"target_commitish,omitempty"`
|
TargetCommitish *string `json:"target_commitish,omitempty"`
|
||||||
TargetOID *string `json:"target_oid,omitempty"`
|
TargetOID *string `json:"target_oid,omitempty"`
|
||||||
Draft *bool `json:"draft,omitempty"`
|
Draft *bool `json:"draft,omitempty"`
|
||||||
Prerelease *bool `json:"prerelease,omitempty"`
|
Prerelease *bool `json:"prerelease,omitempty"`
|
||||||
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
||||||
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
||||||
PackageFiles []*PackageFile `json:"package_files,omitempty"`
|
PackageFiles []*PackageFile `json:"package_files,omitempty"`
|
||||||
Author *User `json:"author,omitempty"`
|
Author *User `json:"author,omitempty"`
|
||||||
InstallationCommand *string `json:"installation_command,omitempty"`
|
InstallationCommand *string `json:"installation_command,omitempty"`
|
||||||
|
Metadata *PackageMetadata `json:"metadata,omitempty"`
|
||||||
|
PackageHTMLURL *string `json:"package_html_url,omitempty"`
|
||||||
|
Name *string `json:"name,omitempty"`
|
||||||
|
URL *string `json:"url,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pv PackageVersion) String() string {
|
func (pv PackageVersion) String() string {
|
||||||
|
@ -99,3 +107,37 @@ type PackageRegistry struct {
|
||||||
func (r PackageRegistry) String() string {
|
func (r PackageRegistry) String() string {
|
||||||
return Stringify(r)
|
return Stringify(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PackageListOptions represents the optional list options for a package.
|
||||||
|
type PackageListOptions struct {
|
||||||
|
// Visibility of packages "public", "internal" or "private".
|
||||||
|
Visibility *string `url:"visibility,omitempty"`
|
||||||
|
|
||||||
|
// PackageType represents the type of package.
|
||||||
|
// It can be one of "npm", "maven", "rubygems", "nuget", "docker", or "container".
|
||||||
|
PackageType *string `url:"package_type,omitempty"`
|
||||||
|
|
||||||
|
// State of package either "active" or "deleted".
|
||||||
|
State *string `url:"state,omitempty"`
|
||||||
|
|
||||||
|
ListOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
// PackageMetadata represents metadata from a package.
|
||||||
|
type PackageMetadata struct {
|
||||||
|
PackageType *string `json:"package_type,omitempty"`
|
||||||
|
Container *PackageContainerMetadata `json:"container,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r PackageMetadata) String() string {
|
||||||
|
return Stringify(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PackageContainerMetadata represents container metadata for docker container packages.
|
||||||
|
type PackageContainerMetadata struct {
|
||||||
|
Tags []string `json:"tags,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r PackageContainerMetadata) String() string {
|
||||||
|
return Stringify(r)
|
||||||
|
}
|
||||||
|
|
24
vendor/github.com/google/go-github/v39/github/pulls_reviews.go
generated
vendored
24
vendor/github.com/google/go-github/v39/github/pulls_reviews.go
generated
vendored
|
@ -125,10 +125,6 @@ func (s *PullRequestsService) ListReviews(ctx context.Context, owner, repo strin
|
||||||
|
|
||||||
// GetReview fetches the specified pull request review.
|
// GetReview fetches the specified pull request review.
|
||||||
//
|
//
|
||||||
// TODO: Follow up with GitHub support about an issue with this method's
|
|
||||||
// returned error format and remove this comment once it's fixed.
|
|
||||||
// Read more about it here - https://github.com/google/go-github/issues/540
|
|
||||||
//
|
|
||||||
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#get-a-review-for-a-pull-request
|
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#get-a-review-for-a-pull-request
|
||||||
func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) {
|
func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) {
|
||||||
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
|
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
|
||||||
|
@ -149,10 +145,6 @@ func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string,
|
||||||
|
|
||||||
// DeletePendingReview deletes the specified pull request pending review.
|
// DeletePendingReview deletes the specified pull request pending review.
|
||||||
//
|
//
|
||||||
// TODO: Follow up with GitHub support about an issue with this method's
|
|
||||||
// returned error format and remove this comment once it's fixed.
|
|
||||||
// Read more about it here - https://github.com/google/go-github/issues/540
|
|
||||||
//
|
|
||||||
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#delete-a-pending-review-for-a-pull-request
|
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#delete-a-pending-review-for-a-pull-request
|
||||||
func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) {
|
func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) {
|
||||||
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
|
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
|
||||||
|
@ -173,10 +165,6 @@ func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, re
|
||||||
|
|
||||||
// ListReviewComments lists all the comments for the specified review.
|
// ListReviewComments lists all the comments for the specified review.
|
||||||
//
|
//
|
||||||
// TODO: Follow up with GitHub support about an issue with this method's
|
|
||||||
// returned error format and remove this comment once it's fixed.
|
|
||||||
// Read more about it here - https://github.com/google/go-github/issues/540
|
|
||||||
//
|
|
||||||
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-comments-for-a-pull-request-review
|
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-comments-for-a-pull-request-review
|
||||||
func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, repo string, number int, reviewID int64, opts *ListOptions) ([]*PullRequestComment, *Response, error) {
|
func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, repo string, number int, reviewID int64, opts *ListOptions) ([]*PullRequestComment, *Response, error) {
|
||||||
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID)
|
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID)
|
||||||
|
@ -201,10 +189,6 @@ func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, rep
|
||||||
|
|
||||||
// CreateReview creates a new review on the specified pull request.
|
// CreateReview creates a new review on the specified pull request.
|
||||||
//
|
//
|
||||||
// TODO: Follow up with GitHub support about an issue with this method's
|
|
||||||
// returned error format and remove this comment once it's fixed.
|
|
||||||
// Read more about it here - https://github.com/google/go-github/issues/540
|
|
||||||
//
|
|
||||||
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#create-a-review-for-a-pull-request
|
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#create-a-review-for-a-pull-request
|
||||||
//
|
//
|
||||||
// In order to use multi-line comments, you must use the "comfort fade" preview.
|
// In order to use multi-line comments, you must use the "comfort fade" preview.
|
||||||
|
@ -289,10 +273,6 @@ func (s *PullRequestsService) UpdateReview(ctx context.Context, owner, repo stri
|
||||||
|
|
||||||
// SubmitReview submits a specified review on the specified pull request.
|
// SubmitReview submits a specified review on the specified pull request.
|
||||||
//
|
//
|
||||||
// TODO: Follow up with GitHub support about an issue with this method's
|
|
||||||
// returned error format and remove this comment once it's fixed.
|
|
||||||
// Read more about it here - https://github.com/google/go-github/issues/540
|
|
||||||
//
|
|
||||||
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#submit-a-review-for-a-pull-request
|
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#submit-a-review-for-a-pull-request
|
||||||
func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) {
|
func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) {
|
||||||
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID)
|
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID)
|
||||||
|
@ -313,10 +293,6 @@ func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo stri
|
||||||
|
|
||||||
// DismissReview dismisses a specified review on the specified pull request.
|
// DismissReview dismisses a specified review on the specified pull request.
|
||||||
//
|
//
|
||||||
// TODO: Follow up with GitHub support about an issue with this method's
|
|
||||||
// returned error format and remove this comment once it's fixed.
|
|
||||||
// Read more about it here - https://github.com/google/go-github/issues/540
|
|
||||||
//
|
|
||||||
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#dismiss-a-review-for-a-pull-request
|
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#dismiss-a-review-for-a-pull-request
|
||||||
func (s *PullRequestsService) DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) {
|
func (s *PullRequestsService) DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) {
|
||||||
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID)
|
u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID)
|
||||||
|
|
8
vendor/github.com/google/go-github/v39/github/repos_contents.go
generated
vendored
8
vendor/github.com/google/go-github/v39/github/repos_contents.go
generated
vendored
|
@ -132,7 +132,7 @@ func (s *RepositoriesService) DownloadContents(ctx context.Context, owner, repo,
|
||||||
for _, contents := range dirContents {
|
for _, contents := range dirContents {
|
||||||
if *contents.Name == filename {
|
if *contents.Name == filename {
|
||||||
if contents.DownloadURL == nil || *contents.DownloadURL == "" {
|
if contents.DownloadURL == nil || *contents.DownloadURL == "" {
|
||||||
return nil, resp, fmt.Errorf("No download link found for %s", filepath)
|
return nil, resp, fmt.Errorf("no download link found for %s", filepath)
|
||||||
}
|
}
|
||||||
dlResp, err := s.client.client.Get(*contents.DownloadURL)
|
dlResp, err := s.client.client.Get(*contents.DownloadURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -141,7 +141,7 @@ func (s *RepositoriesService) DownloadContents(ctx context.Context, owner, repo,
|
||||||
return dlResp.Body, &Response{Response: dlResp}, nil
|
return dlResp.Body, &Response{Response: dlResp}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, resp, fmt.Errorf("No file named %s found in %s", filename, dir)
|
return nil, resp, fmt.Errorf("no file named %s found in %s", filename, dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DownloadContentsWithMeta is identical to DownloadContents but additionally
|
// DownloadContentsWithMeta is identical to DownloadContents but additionally
|
||||||
|
@ -162,7 +162,7 @@ func (s *RepositoriesService) DownloadContentsWithMeta(ctx context.Context, owne
|
||||||
for _, contents := range dirContents {
|
for _, contents := range dirContents {
|
||||||
if *contents.Name == filename {
|
if *contents.Name == filename {
|
||||||
if contents.DownloadURL == nil || *contents.DownloadURL == "" {
|
if contents.DownloadURL == nil || *contents.DownloadURL == "" {
|
||||||
return nil, contents, resp, fmt.Errorf("No download link found for %s", filepath)
|
return nil, contents, resp, fmt.Errorf("no download link found for %s", filepath)
|
||||||
}
|
}
|
||||||
dlResp, err := s.client.client.Get(*contents.DownloadURL)
|
dlResp, err := s.client.client.Get(*contents.DownloadURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -171,7 +171,7 @@ func (s *RepositoriesService) DownloadContentsWithMeta(ctx context.Context, owne
|
||||||
return dlResp.Body, contents, &Response{Response: dlResp}, nil
|
return dlResp.Body, contents, &Response{Response: dlResp}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, nil, resp, fmt.Errorf("No file named %s found in %s", filename, dir)
|
return nil, nil, resp, fmt.Errorf("no file named %s found in %s", filename, dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetContents can return either the metadata and content of a single file
|
// GetContents can return either the metadata and content of a single file
|
||||||
|
|
36
vendor/github.com/google/go-github/v39/github/repos_releases.go
generated
vendored
36
vendor/github.com/google/go-github/v39/github/repos_releases.go
generated
vendored
|
@ -26,6 +26,7 @@ type RepositoryRelease struct {
|
||||||
Draft *bool `json:"draft,omitempty"`
|
Draft *bool `json:"draft,omitempty"`
|
||||||
Prerelease *bool `json:"prerelease,omitempty"`
|
Prerelease *bool `json:"prerelease,omitempty"`
|
||||||
DiscussionCategoryName *string `json:"discussion_category_name,omitempty"`
|
DiscussionCategoryName *string `json:"discussion_category_name,omitempty"`
|
||||||
|
GenerateReleaseNotes *bool `json:"generate_release_notes,omitempty"`
|
||||||
|
|
||||||
// The following fields are not used in CreateRelease or EditRelease:
|
// The following fields are not used in CreateRelease or EditRelease:
|
||||||
ID *int64 `json:"id,omitempty"`
|
ID *int64 `json:"id,omitempty"`
|
||||||
|
@ -46,6 +47,19 @@ func (r RepositoryRelease) String() string {
|
||||||
return Stringify(r)
|
return Stringify(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RepositoryReleaseNotes represents a GitHub-generated release notes.
|
||||||
|
type RepositoryReleaseNotes struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Body string `json:"body"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenerateNotesOptions represents the options to generate release notes.
|
||||||
|
type GenerateNotesOptions struct {
|
||||||
|
TagName string `json:"tag_name"`
|
||||||
|
PreviousTagName *string `json:"previous_tag_name,omitempty"`
|
||||||
|
TargetCommitish *string `json:"target_commitish,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
// ReleaseAsset represents a GitHub release asset in a repository.
|
// ReleaseAsset represents a GitHub release asset in a repository.
|
||||||
type ReleaseAsset struct {
|
type ReleaseAsset struct {
|
||||||
ID *int64 `json:"id,omitempty"`
|
ID *int64 `json:"id,omitempty"`
|
||||||
|
@ -114,6 +128,25 @@ func (s *RepositoriesService) GetReleaseByTag(ctx context.Context, owner, repo,
|
||||||
return s.getSingleRelease(ctx, u)
|
return s.getSingleRelease(ctx, u)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GenerateReleaseNotes generates the release notes for the given tag.
|
||||||
|
// TODO: api docs
|
||||||
|
// GitHub API docs:
|
||||||
|
func (s *RepositoriesService) GenerateReleaseNotes(ctx context.Context, owner, repo string, opts *GenerateNotesOptions) (*RepositoryReleaseNotes, *Response, error) {
|
||||||
|
u := fmt.Sprintf("repos/%s/%s/releases/generate-notes", owner, repo)
|
||||||
|
req, err := s.client.NewRequest("POST", u, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
r := new(RepositoryReleaseNotes)
|
||||||
|
resp, err := s.client.Do(ctx, req, r)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string) (*RepositoryRelease, *Response, error) {
|
func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string) (*RepositoryRelease, *Response, error) {
|
||||||
req, err := s.client.NewRequest("GET", url, nil)
|
req, err := s.client.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -141,6 +174,7 @@ type repositoryReleaseRequest struct {
|
||||||
Body *string `json:"body,omitempty"`
|
Body *string `json:"body,omitempty"`
|
||||||
Draft *bool `json:"draft,omitempty"`
|
Draft *bool `json:"draft,omitempty"`
|
||||||
Prerelease *bool `json:"prerelease,omitempty"`
|
Prerelease *bool `json:"prerelease,omitempty"`
|
||||||
|
GenerateReleaseNotes *bool `json:"generate_release_notes,omitempty"`
|
||||||
DiscussionCategoryName *string `json:"discussion_category_name,omitempty"`
|
DiscussionCategoryName *string `json:"discussion_category_name,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +195,7 @@ func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo str
|
||||||
Draft: release.Draft,
|
Draft: release.Draft,
|
||||||
Prerelease: release.Prerelease,
|
Prerelease: release.Prerelease,
|
||||||
DiscussionCategoryName: release.DiscussionCategoryName,
|
DiscussionCategoryName: release.DiscussionCategoryName,
|
||||||
|
GenerateReleaseNotes: release.GenerateReleaseNotes,
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest("POST", u, releaseReq)
|
req, err := s.client.NewRequest("POST", u, releaseReq)
|
||||||
|
@ -193,6 +228,7 @@ func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo strin
|
||||||
Draft: release.Draft,
|
Draft: release.Draft,
|
||||||
Prerelease: release.Prerelease,
|
Prerelease: release.Prerelease,
|
||||||
DiscussionCategoryName: release.DiscussionCategoryName,
|
DiscussionCategoryName: release.DiscussionCategoryName,
|
||||||
|
GenerateReleaseNotes: release.GenerateReleaseNotes,
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest("PATCH", u, releaseReq)
|
req, err := s.client.NewRequest("PATCH", u, releaseReq)
|
||||||
|
|
207
vendor/github.com/google/go-github/v39/github/users_packages.go
generated
vendored
Normal file
207
vendor/github.com/google/go-github/v39/github/users_packages.go
generated
vendored
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
// Copyright 2021 The go-github AUTHORS. All rights reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package github
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// List the packages for a user. Passing the empty string for "user" will
|
||||||
|
// list packages for the authenticated user.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#list-packages-for-the-authenticated-users-namespace
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#list-packages-for-a-user
|
||||||
|
func (s *UsersService) ListPackages(ctx context.Context, user string, opts *PackageListOptions) ([]*Package, *Response, error) {
|
||||||
|
var u string
|
||||||
|
if user != "" {
|
||||||
|
u = fmt.Sprintf("user/%v/packages", user)
|
||||||
|
} else {
|
||||||
|
u = "user/packages"
|
||||||
|
}
|
||||||
|
u, err := addOptions(u, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var packages []*Package
|
||||||
|
resp, err := s.client.Do(ctx, req, &packages)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return packages, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a package by name for a user. Passing the empty string for "user" will
|
||||||
|
// get the package for the authenticated user.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-a-package-for-the-authenticated-user
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-a-package-for-a-user
|
||||||
|
func (s *UsersService) GetPackage(ctx context.Context, user, packageType, packageName string) (*Package, *Response, error) {
|
||||||
|
var u string
|
||||||
|
if user != "" {
|
||||||
|
u = fmt.Sprintf("users/%v/packages/%v/%v", user, packageType, packageName)
|
||||||
|
} else {
|
||||||
|
u = fmt.Sprintf("user/packages/%v/%v", packageType, packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var pack *Package
|
||||||
|
resp, err := s.client.Do(ctx, req, &pack)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return pack, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete a package from a user. Passing the empty string for "user" will
|
||||||
|
// delete the package for the authenticated user.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#delete-a-package-for-the-authenticated-user
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#delete-a-package-for-a-user
|
||||||
|
func (s *UsersService) DeletePackage(ctx context.Context, user, packageType, packageName string) (*Response, error) {
|
||||||
|
var u string
|
||||||
|
if user != "" {
|
||||||
|
u = fmt.Sprintf("users/%v/packages/%v/%v", user, packageType, packageName)
|
||||||
|
} else {
|
||||||
|
u = fmt.Sprintf("user/packages/%v/%v", packageType, packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("DELETE", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(ctx, req, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore a package to a user. Passing the empty string for "user" will
|
||||||
|
// restore the package for the authenticated user.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#restore-a-package-for-the-authenticated-user
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#restore-a-package-for-a-user
|
||||||
|
func (s *UsersService) RestorePackage(ctx context.Context, user, packageType, packageName string) (*Response, error) {
|
||||||
|
var u string
|
||||||
|
if user != "" {
|
||||||
|
u = fmt.Sprintf("users/%v/packages/%v/%v/restore", user, packageType, packageName)
|
||||||
|
} else {
|
||||||
|
u = fmt.Sprintf("user/packages/%v/%v/restore", packageType, packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("POST", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(ctx, req, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all versions of a package for a user. Passing the empty string for "user" will
|
||||||
|
// get versions for the authenticated user.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-all-package-versions-for-a-package-owned-by-the-authenticated-user
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/users#delete-an-email-address-for-the-authenticated-user
|
||||||
|
func (s *UsersService) PackageGetAllVersions(ctx context.Context, user, packageType, packageName string) ([]*PackageVersion, *Response, error) {
|
||||||
|
var u string
|
||||||
|
if user != "" {
|
||||||
|
u = fmt.Sprintf("users/%v/packages/%v/%v/versions", user, packageType, packageName)
|
||||||
|
} else {
|
||||||
|
u = fmt.Sprintf("user/packages/%v/%v/versions", packageType, packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var versions []*PackageVersion
|
||||||
|
resp, err := s.client.Do(ctx, req, &versions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return versions, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a specific version of a package for a user. Passing the empty string for "user" will
|
||||||
|
// get the version for the authenticated user.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-a-package-version-for-the-authenticated-user
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-a-package-version-for-a-user
|
||||||
|
func (s *UsersService) PackageGetVersion(ctx context.Context, user, packageType, packageName string, packageVersionID int64) (*PackageVersion, *Response, error) {
|
||||||
|
var u string
|
||||||
|
if user != "" {
|
||||||
|
u = fmt.Sprintf("users/%v/packages/%v/%v/versions/%v", user, packageType, packageName, packageVersionID)
|
||||||
|
} else {
|
||||||
|
u = fmt.Sprintf("user/packages/%v/%v/versions/%v", packageType, packageName, packageVersionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var version *PackageVersion
|
||||||
|
resp, err := s.client.Do(ctx, req, &version)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return version, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete a package version for a user. Passing the empty string for "user" will
|
||||||
|
// delete the version for the authenticated user.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#delete-a-package-version-for-the-authenticated-user
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#delete-package-version-for-a-user
|
||||||
|
func (s *UsersService) PackageDeleteVersion(ctx context.Context, user, packageType, packageName string, packageVersionID int64) (*Response, error) {
|
||||||
|
var u string
|
||||||
|
if user != "" {
|
||||||
|
u = fmt.Sprintf("users/%v/packages/%v/%v/versions/%v", user, packageType, packageName, packageVersionID)
|
||||||
|
} else {
|
||||||
|
u = fmt.Sprintf("user/packages/%v/%v/versions/%v", packageType, packageName, packageVersionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("DELETE", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(ctx, req, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore a package version to a user. Passing the empty string for "user" will
|
||||||
|
// restore the version for the authenticated user.
|
||||||
|
//
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#restore-a-package-version-for-the-authenticated-user
|
||||||
|
// GitHub API docs: https://docs.github.com/en/rest/reference/packages#restore-package-version-for-a-user
|
||||||
|
func (s *UsersService) PackageRestoreVersion(ctx context.Context, user, packageType, packageName string, packageVersionID int64) (*Response, error) {
|
||||||
|
var u string
|
||||||
|
if user != "" {
|
||||||
|
u = fmt.Sprintf("users/%v/packages/%v/%v/versions/%v/restore", user, packageType, packageName, packageVersionID)
|
||||||
|
} else {
|
||||||
|
u = fmt.Sprintf("user/packages/%v/%v/versions/%v/restore", packageType, packageName, packageVersionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest("POST", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(ctx, req, nil)
|
||||||
|
}
|
1
vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go
generated
vendored
1
vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go
generated
vendored
|
@ -32,6 +32,7 @@ func DefaultPooledTransport() *http.Transport {
|
||||||
IdleConnTimeout: 90 * time.Second,
|
IdleConnTimeout: 90 * time.Second,
|
||||||
TLSHandshakeTimeout: 10 * time.Second,
|
TLSHandshakeTimeout: 10 * time.Second,
|
||||||
ExpectContinueTimeout: 1 * time.Second,
|
ExpectContinueTimeout: 1 * time.Second,
|
||||||
|
ForceAttemptHTTP2: true,
|
||||||
MaxIdleConnsPerHost: runtime.GOMAXPROCS(0) + 1,
|
MaxIdleConnsPerHost: runtime.GOMAXPROCS(0) + 1,
|
||||||
}
|
}
|
||||||
return transport
|
return transport
|
||||||
|
|
2
vendor/github.com/hashicorp/go-cleanhttp/go.mod
generated
vendored
2
vendor/github.com/hashicorp/go-cleanhttp/go.mod
generated
vendored
|
@ -1 +1,3 @@
|
||||||
module github.com/hashicorp/go-cleanhttp
|
module github.com/hashicorp/go-cleanhttp
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
2
vendor/github.com/hashicorp/go-retryablehttp/client.go
generated
vendored
2
vendor/github.com/hashicorp/go-retryablehttp/client.go
generated
vendored
|
@ -471,7 +471,7 @@ func baseRetryPolicy(resp *http.Response, err error) (bool, error) {
|
||||||
// seconds the server states it may be ready to process more requests from this client.
|
// seconds the server states it may be ready to process more requests from this client.
|
||||||
func DefaultBackoff(min, max time.Duration, attemptNum int, resp *http.Response) time.Duration {
|
func DefaultBackoff(min, max time.Duration, attemptNum int, resp *http.Response) time.Duration {
|
||||||
if resp != nil {
|
if resp != nil {
|
||||||
if resp.StatusCode == http.StatusTooManyRequests {
|
if resp.StatusCode == http.StatusTooManyRequests || resp.StatusCode == http.StatusServiceUnavailable {
|
||||||
if s, ok := resp.Header["Retry-After"]; ok {
|
if s, ok := resp.Header["Retry-After"]; ok {
|
||||||
if sleep, err := strconv.ParseInt(s[0], 10, 64); err == nil {
|
if sleep, err := strconv.ParseInt(s[0], 10, 64); err == nil {
|
||||||
return time.Second * time.Duration(sleep)
|
return time.Second * time.Duration(sleep)
|
||||||
|
|
8
vendor/github.com/joho/godotenv/.travis.yml
generated
vendored
8
vendor/github.com/joho/godotenv/.travis.yml
generated
vendored
|
@ -1,8 +0,0 @@
|
||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.x
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- osx
|
|
27
vendor/github.com/joho/godotenv/README.md
generated
vendored
27
vendor/github.com/joho/godotenv/README.md
generated
vendored
|
@ -1,4 +1,4 @@
|
||||||
# GoDotEnv [](https://travis-ci.org/joho/godotenv) [](https://ci.appveyor.com/project/joho/godotenv) [](https://goreportcard.com/report/github.com/joho/godotenv)
|
# GoDotEnv  [](https://goreportcard.com/report/github.com/joho/godotenv)
|
||||||
|
|
||||||
A Go (golang) port of the Ruby dotenv project (which loads env vars from a .env file)
|
A Go (golang) port of the Ruby dotenv project (which loads env vars from a .env file)
|
||||||
|
|
||||||
|
@ -110,6 +110,31 @@ content := getRemoteFileContent()
|
||||||
myEnv, err := godotenv.Unmarshal(content)
|
myEnv, err := godotenv.Unmarshal(content)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Precedence & Conventions
|
||||||
|
|
||||||
|
Existing envs take precedence of envs that are loaded later.
|
||||||
|
|
||||||
|
The [convention](https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use)
|
||||||
|
for managing multiple environments (i.e. development, test, production)
|
||||||
|
is to create an env named `{YOURAPP}_ENV` and load envs in this order:
|
||||||
|
|
||||||
|
```go
|
||||||
|
env := os.Getenv("FOO_ENV")
|
||||||
|
if "" == env {
|
||||||
|
env = "development"
|
||||||
|
}
|
||||||
|
|
||||||
|
godotenv.Load(".env." + env + ".local")
|
||||||
|
if "test" != env {
|
||||||
|
godotenv.Load(".env.local")
|
||||||
|
}
|
||||||
|
godotenv.Load(".env." + env)
|
||||||
|
godotenv.Load() // The Original .env
|
||||||
|
```
|
||||||
|
|
||||||
|
If you need to, you can also use `godotenv.Overload()` to defy this convention
|
||||||
|
and overwrite existing envs instead of only supplanting them. Use with caution.
|
||||||
|
|
||||||
### Command Mode
|
### Command Mode
|
||||||
|
|
||||||
Assuming you've installed the command as above and you've got `$GOPATH/bin` in your `$PATH`
|
Assuming you've installed the command as above and you've got `$GOPATH/bin` in your `$PATH`
|
||||||
|
|
3
vendor/github.com/joho/godotenv/go.mod
generated
vendored
Normal file
3
vendor/github.com/joho/godotenv/go.mod
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module github.com/joho/godotenv
|
||||||
|
|
||||||
|
go 1.12
|
59
vendor/github.com/joho/godotenv/godotenv.go
generated
vendored
59
vendor/github.com/joho/godotenv/godotenv.go
generated
vendored
|
@ -22,6 +22,7 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -147,15 +148,20 @@ func Exec(filenames []string, cmd string, cmdArgs []string) error {
|
||||||
|
|
||||||
// Write serializes the given environment and writes it to a file
|
// Write serializes the given environment and writes it to a file
|
||||||
func Write(envMap map[string]string, filename string) error {
|
func Write(envMap map[string]string, filename string) error {
|
||||||
content, error := Marshal(envMap)
|
content, err := Marshal(envMap)
|
||||||
if error != nil {
|
if err != nil {
|
||||||
return error
|
return err
|
||||||
}
|
}
|
||||||
file, error := os.Create(filename)
|
file, err := os.Create(filename)
|
||||||
if error != nil {
|
if err != nil {
|
||||||
return error
|
return err
|
||||||
}
|
}
|
||||||
_, err := file.WriteString(content)
|
defer file.Close()
|
||||||
|
_, err = file.WriteString(content + "\n")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
file.Sync()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +170,11 @@ func Write(envMap map[string]string, filename string) error {
|
||||||
func Marshal(envMap map[string]string) (string, error) {
|
func Marshal(envMap map[string]string) (string, error) {
|
||||||
lines := make([]string, 0, len(envMap))
|
lines := make([]string, 0, len(envMap))
|
||||||
for k, v := range envMap {
|
for k, v := range envMap {
|
||||||
lines = append(lines, fmt.Sprintf(`%s="%s"`, k, doubleQuoteEscape(v)))
|
if d, err := strconv.Atoi(v); err == nil {
|
||||||
|
lines = append(lines, fmt.Sprintf(`%s=%d`, k, d))
|
||||||
|
} else {
|
||||||
|
lines = append(lines, fmt.Sprintf(`%s="%s"`, k, doubleQuoteEscape(v)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sort.Strings(lines)
|
sort.Strings(lines)
|
||||||
return strings.Join(lines, "\n"), nil
|
return strings.Join(lines, "\n"), nil
|
||||||
|
@ -209,6 +219,8 @@ func readFile(filename string) (envMap map[string]string, err error) {
|
||||||
return Parse(file)
|
return Parse(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var exportRegex = regexp.MustCompile(`^\s*(?:export\s+)?(.*?)\s*$`)
|
||||||
|
|
||||||
func parseLine(line string, envMap map[string]string) (key string, value string, err error) {
|
func parseLine(line string, envMap map[string]string) (key string, value string, err error) {
|
||||||
if len(line) == 0 {
|
if len(line) == 0 {
|
||||||
err = errors.New("zero length string")
|
err = errors.New("zero length string")
|
||||||
|
@ -256,13 +268,22 @@ func parseLine(line string, envMap map[string]string) (key string, value string,
|
||||||
if strings.HasPrefix(key, "export") {
|
if strings.HasPrefix(key, "export") {
|
||||||
key = strings.TrimPrefix(key, "export")
|
key = strings.TrimPrefix(key, "export")
|
||||||
}
|
}
|
||||||
key = strings.Trim(key, " ")
|
key = strings.TrimSpace(key)
|
||||||
|
|
||||||
|
key = exportRegex.ReplaceAllString(splitString[0], "$1")
|
||||||
|
|
||||||
// Parse the value
|
// Parse the value
|
||||||
value = parseValue(splitString[1], envMap)
|
value = parseValue(splitString[1], envMap)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
singleQuotesRegex = regexp.MustCompile(`\A'(.*)'\z`)
|
||||||
|
doubleQuotesRegex = regexp.MustCompile(`\A"(.*)"\z`)
|
||||||
|
escapeRegex = regexp.MustCompile(`\\.`)
|
||||||
|
unescapeCharsRegex = regexp.MustCompile(`\\([^$])`)
|
||||||
|
)
|
||||||
|
|
||||||
func parseValue(value string, envMap map[string]string) string {
|
func parseValue(value string, envMap map[string]string) string {
|
||||||
|
|
||||||
// trim
|
// trim
|
||||||
|
@ -270,11 +291,9 @@ func parseValue(value string, envMap map[string]string) string {
|
||||||
|
|
||||||
// check if we've got quoted values or possible escapes
|
// check if we've got quoted values or possible escapes
|
||||||
if len(value) > 1 {
|
if len(value) > 1 {
|
||||||
rs := regexp.MustCompile(`\A'(.*)'\z`)
|
singleQuotes := singleQuotesRegex.FindStringSubmatch(value)
|
||||||
singleQuotes := rs.FindStringSubmatch(value)
|
|
||||||
|
|
||||||
rd := regexp.MustCompile(`\A"(.*)"\z`)
|
doubleQuotes := doubleQuotesRegex.FindStringSubmatch(value)
|
||||||
doubleQuotes := rd.FindStringSubmatch(value)
|
|
||||||
|
|
||||||
if singleQuotes != nil || doubleQuotes != nil {
|
if singleQuotes != nil || doubleQuotes != nil {
|
||||||
// pull the quotes off the edges
|
// pull the quotes off the edges
|
||||||
|
@ -283,7 +302,6 @@ func parseValue(value string, envMap map[string]string) string {
|
||||||
|
|
||||||
if doubleQuotes != nil {
|
if doubleQuotes != nil {
|
||||||
// expand newlines
|
// expand newlines
|
||||||
escapeRegex := regexp.MustCompile(`\\.`)
|
|
||||||
value = escapeRegex.ReplaceAllStringFunc(value, func(match string) string {
|
value = escapeRegex.ReplaceAllStringFunc(value, func(match string) string {
|
||||||
c := strings.TrimPrefix(match, `\`)
|
c := strings.TrimPrefix(match, `\`)
|
||||||
switch c {
|
switch c {
|
||||||
|
@ -296,8 +314,7 @@ func parseValue(value string, envMap map[string]string) string {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// unescape characters
|
// unescape characters
|
||||||
e := regexp.MustCompile(`\\([^$])`)
|
value = unescapeCharsRegex.ReplaceAllString(value, "$1")
|
||||||
value = e.ReplaceAllString(value, "$1")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if singleQuotes == nil {
|
if singleQuotes == nil {
|
||||||
|
@ -308,11 +325,11 @@ func parseValue(value string, envMap map[string]string) string {
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
func expandVariables(v string, m map[string]string) string {
|
var expandVarRegex = regexp.MustCompile(`(\\)?(\$)(\()?\{?([A-Z0-9_]+)?\}?`)
|
||||||
r := regexp.MustCompile(`(\\)?(\$)(\()?\{?([A-Z0-9_]+)?\}?`)
|
|
||||||
|
|
||||||
return r.ReplaceAllStringFunc(v, func(s string) string {
|
func expandVariables(v string, m map[string]string) string {
|
||||||
submatch := r.FindStringSubmatch(s)
|
return expandVarRegex.ReplaceAllStringFunc(v, func(s string) string {
|
||||||
|
submatch := expandVarRegex.FindStringSubmatch(s)
|
||||||
|
|
||||||
if submatch == nil {
|
if submatch == nil {
|
||||||
return s
|
return s
|
||||||
|
@ -327,7 +344,7 @@ func expandVariables(v string, m map[string]string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func isIgnoredLine(line string) bool {
|
func isIgnoredLine(line string) bool {
|
||||||
trimmedLine := strings.Trim(line, " \n\t")
|
trimmedLine := strings.TrimSpace(line)
|
||||||
return len(trimmedLine) == 0 || strings.HasPrefix(trimmedLine, "#")
|
return len(trimmedLine) == 0 || strings.HasPrefix(trimmedLine, "#")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
5
vendor/github.com/joho/godotenv/renovate.json
generated
vendored
Normal file
5
vendor/github.com/joho/godotenv/renovate.json
generated
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"extends": [
|
||||||
|
"config:base"
|
||||||
|
]
|
||||||
|
}
|
2
vendor/github.com/lib/pq/.gitignore
generated
vendored
2
vendor/github.com/lib/pq/.gitignore
generated
vendored
|
@ -2,3 +2,5 @@
|
||||||
*.test
|
*.test
|
||||||
*~
|
*~
|
||||||
*.swp
|
*.swp
|
||||||
|
.idea
|
||||||
|
.vscode
|
73
vendor/github.com/lib/pq/.travis.sh
generated
vendored
73
vendor/github.com/lib/pq/.travis.sh
generated
vendored
|
@ -1,73 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
client_configure() {
|
|
||||||
sudo chmod 600 $PQSSLCERTTEST_PATH/postgresql.key
|
|
||||||
}
|
|
||||||
|
|
||||||
pgdg_repository() {
|
|
||||||
local sourcelist='sources.list.d/postgresql.list'
|
|
||||||
|
|
||||||
curl -sS 'https://www.postgresql.org/media/keys/ACCC4CF8.asc' | sudo apt-key add -
|
|
||||||
echo deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main $PGVERSION | sudo tee "/etc/apt/$sourcelist"
|
|
||||||
sudo apt-get -o Dir::Etc::sourcelist="$sourcelist" -o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0' update
|
|
||||||
}
|
|
||||||
|
|
||||||
postgresql_configure() {
|
|
||||||
sudo tee /etc/postgresql/$PGVERSION/main/pg_hba.conf > /dev/null <<-config
|
|
||||||
local all all trust
|
|
||||||
hostnossl all pqgossltest 127.0.0.1/32 reject
|
|
||||||
hostnossl all pqgosslcert 127.0.0.1/32 reject
|
|
||||||
hostssl all pqgossltest 127.0.0.1/32 trust
|
|
||||||
hostssl all pqgosslcert 127.0.0.1/32 cert
|
|
||||||
host all all 127.0.0.1/32 trust
|
|
||||||
hostnossl all pqgossltest ::1/128 reject
|
|
||||||
hostnossl all pqgosslcert ::1/128 reject
|
|
||||||
hostssl all pqgossltest ::1/128 trust
|
|
||||||
hostssl all pqgosslcert ::1/128 cert
|
|
||||||
host all all ::1/128 trust
|
|
||||||
config
|
|
||||||
|
|
||||||
xargs sudo install -o postgres -g postgres -m 600 -t /var/lib/postgresql/$PGVERSION/main/ <<-certificates
|
|
||||||
certs/root.crt
|
|
||||||
certs/server.crt
|
|
||||||
certs/server.key
|
|
||||||
certificates
|
|
||||||
|
|
||||||
sort -VCu <<-versions ||
|
|
||||||
$PGVERSION
|
|
||||||
9.2
|
|
||||||
versions
|
|
||||||
sudo tee -a /etc/postgresql/$PGVERSION/main/postgresql.conf > /dev/null <<-config
|
|
||||||
ssl_ca_file = 'root.crt'
|
|
||||||
ssl_cert_file = 'server.crt'
|
|
||||||
ssl_key_file = 'server.key'
|
|
||||||
config
|
|
||||||
|
|
||||||
echo 127.0.0.1 postgres | sudo tee -a /etc/hosts > /dev/null
|
|
||||||
|
|
||||||
sudo service postgresql restart
|
|
||||||
}
|
|
||||||
|
|
||||||
postgresql_install() {
|
|
||||||
xargs sudo apt-get -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confnew' install <<-packages
|
|
||||||
postgresql-$PGVERSION
|
|
||||||
postgresql-server-dev-$PGVERSION
|
|
||||||
postgresql-contrib-$PGVERSION
|
|
||||||
packages
|
|
||||||
}
|
|
||||||
|
|
||||||
postgresql_uninstall() {
|
|
||||||
sudo service postgresql stop
|
|
||||||
xargs sudo apt-get -y --purge remove <<-packages
|
|
||||||
libpq-dev
|
|
||||||
libpq5
|
|
||||||
postgresql
|
|
||||||
postgresql-client-common
|
|
||||||
postgresql-common
|
|
||||||
packages
|
|
||||||
sudo rm -rf /var/lib/postgresql
|
|
||||||
}
|
|
||||||
|
|
||||||
$1
|
|
44
vendor/github.com/lib/pq/.travis.yml
generated
vendored
44
vendor/github.com/lib/pq/.travis.yml
generated
vendored
|
@ -1,44 +0,0 @@
|
||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.13.x
|
|
||||||
- 1.14.x
|
|
||||||
- master
|
|
||||||
|
|
||||||
sudo: true
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- PGUSER=postgres
|
|
||||||
- PQGOSSLTESTS=1
|
|
||||||
- PQSSLCERTTEST_PATH=$PWD/certs
|
|
||||||
- PGHOST=127.0.0.1
|
|
||||||
matrix:
|
|
||||||
- PGVERSION=10
|
|
||||||
- PGVERSION=9.6
|
|
||||||
- PGVERSION=9.5
|
|
||||||
- PGVERSION=9.4
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- ./.travis.sh postgresql_uninstall
|
|
||||||
- ./.travis.sh pgdg_repository
|
|
||||||
- ./.travis.sh postgresql_install
|
|
||||||
- ./.travis.sh postgresql_configure
|
|
||||||
- ./.travis.sh client_configure
|
|
||||||
- go get golang.org/x/tools/cmd/goimports
|
|
||||||
- go get golang.org/x/lint/golint
|
|
||||||
- GO111MODULE=on go get honnef.co/go/tools/cmd/staticcheck@2020.1.3
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- createdb pqgotest
|
|
||||||
- createuser -DRS pqgossltest
|
|
||||||
- createuser -DRS pqgosslcert
|
|
||||||
|
|
||||||
script:
|
|
||||||
- >
|
|
||||||
goimports -d -e $(find -name '*.go') | awk '{ print } END { exit NR == 0 ? 0 : 1 }'
|
|
||||||
- go vet ./...
|
|
||||||
- staticcheck -go 1.13 ./...
|
|
||||||
- golint ./...
|
|
||||||
- PQTEST_BINARY_PARAMETERS=no go test -race -v ./...
|
|
||||||
- PQTEST_BINARY_PARAMETERS=yes go test -race -v ./...
|
|
9
vendor/github.com/lib/pq/README.md
generated
vendored
9
vendor/github.com/lib/pq/README.md
generated
vendored
|
@ -19,6 +19,7 @@
|
||||||
* Unix socket support
|
* Unix socket support
|
||||||
* Notifications: `LISTEN`/`NOTIFY`
|
* Notifications: `LISTEN`/`NOTIFY`
|
||||||
* pgpass support
|
* pgpass support
|
||||||
|
* GSS (Kerberos) auth
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
|
@ -26,4 +27,10 @@
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
This package is effectively in maintenance mode and is not actively developed. Small patches and features are only rarely reviewed and merged. We recommend using [pgx](https://github.com/jackc/pgx) which is actively maintained.
|
This package is currently in maintenance mode, which means:
|
||||||
|
1. It generally does not accept new features.
|
||||||
|
2. It does accept bug fixes and version compatability changes provided by the community.
|
||||||
|
3. Maintainers usually do not resolve reported issues.
|
||||||
|
4. Community members are encouraged to help each other with reported issues.
|
||||||
|
|
||||||
|
For users that require new features or reliable resolution of reported bugs, we recommend using [pgx](https://github.com/jackc/pgx) which is under active development.
|
||||||
|
|
141
vendor/github.com/lib/pq/array.go
generated
vendored
141
vendor/github.com/lib/pq/array.go
generated
vendored
|
@ -22,7 +22,7 @@ var typeSQLScanner = reflect.TypeOf((*sql.Scanner)(nil)).Elem()
|
||||||
// db.Query(`SELECT * FROM t WHERE id = ANY($1)`, pq.Array([]int{235, 401}))
|
// db.Query(`SELECT * FROM t WHERE id = ANY($1)`, pq.Array([]int{235, 401}))
|
||||||
//
|
//
|
||||||
// var x []sql.NullInt64
|
// var x []sql.NullInt64
|
||||||
// db.QueryRow('SELECT ARRAY[235, 401]').Scan(pq.Array(&x))
|
// db.QueryRow(`SELECT ARRAY[235, 401]`).Scan(pq.Array(&x))
|
||||||
//
|
//
|
||||||
// Scanning multi-dimensional arrays is not supported. Arrays where the lower
|
// Scanning multi-dimensional arrays is not supported. Arrays where the lower
|
||||||
// bound is not one (such as `[0:0]={1}') are not supported.
|
// bound is not one (such as `[0:0]={1}') are not supported.
|
||||||
|
@ -35,19 +35,31 @@ func Array(a interface{}) interface {
|
||||||
return (*BoolArray)(&a)
|
return (*BoolArray)(&a)
|
||||||
case []float64:
|
case []float64:
|
||||||
return (*Float64Array)(&a)
|
return (*Float64Array)(&a)
|
||||||
|
case []float32:
|
||||||
|
return (*Float32Array)(&a)
|
||||||
case []int64:
|
case []int64:
|
||||||
return (*Int64Array)(&a)
|
return (*Int64Array)(&a)
|
||||||
|
case []int32:
|
||||||
|
return (*Int32Array)(&a)
|
||||||
case []string:
|
case []string:
|
||||||
return (*StringArray)(&a)
|
return (*StringArray)(&a)
|
||||||
|
case [][]byte:
|
||||||
|
return (*ByteaArray)(&a)
|
||||||
|
|
||||||
case *[]bool:
|
case *[]bool:
|
||||||
return (*BoolArray)(a)
|
return (*BoolArray)(a)
|
||||||
case *[]float64:
|
case *[]float64:
|
||||||
return (*Float64Array)(a)
|
return (*Float64Array)(a)
|
||||||
|
case *[]float32:
|
||||||
|
return (*Float32Array)(a)
|
||||||
case *[]int64:
|
case *[]int64:
|
||||||
return (*Int64Array)(a)
|
return (*Int64Array)(a)
|
||||||
|
case *[]int32:
|
||||||
|
return (*Int32Array)(a)
|
||||||
case *[]string:
|
case *[]string:
|
||||||
return (*StringArray)(a)
|
return (*StringArray)(a)
|
||||||
|
case *[][]byte:
|
||||||
|
return (*ByteaArray)(a)
|
||||||
}
|
}
|
||||||
|
|
||||||
return GenericArray{a}
|
return GenericArray{a}
|
||||||
|
@ -267,6 +279,70 @@ func (a Float64Array) Value() (driver.Value, error) {
|
||||||
return "{}", nil
|
return "{}", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Float32Array represents a one-dimensional array of the PostgreSQL double
|
||||||
|
// precision type.
|
||||||
|
type Float32Array []float32
|
||||||
|
|
||||||
|
// Scan implements the sql.Scanner interface.
|
||||||
|
func (a *Float32Array) Scan(src interface{}) error {
|
||||||
|
switch src := src.(type) {
|
||||||
|
case []byte:
|
||||||
|
return a.scanBytes(src)
|
||||||
|
case string:
|
||||||
|
return a.scanBytes([]byte(src))
|
||||||
|
case nil:
|
||||||
|
*a = nil
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("pq: cannot convert %T to Float32Array", src)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Float32Array) scanBytes(src []byte) error {
|
||||||
|
elems, err := scanLinearArray(src, []byte{','}, "Float32Array")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if *a != nil && len(elems) == 0 {
|
||||||
|
*a = (*a)[:0]
|
||||||
|
} else {
|
||||||
|
b := make(Float32Array, len(elems))
|
||||||
|
for i, v := range elems {
|
||||||
|
var x float64
|
||||||
|
if x, err = strconv.ParseFloat(string(v), 32); err != nil {
|
||||||
|
return fmt.Errorf("pq: parsing array element index %d: %v", i, err)
|
||||||
|
}
|
||||||
|
b[i] = float32(x)
|
||||||
|
}
|
||||||
|
*a = b
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value implements the driver.Valuer interface.
|
||||||
|
func (a Float32Array) Value() (driver.Value, error) {
|
||||||
|
if a == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if n := len(a); n > 0 {
|
||||||
|
// There will be at least two curly brackets, N bytes of values,
|
||||||
|
// and N-1 bytes of delimiters.
|
||||||
|
b := make([]byte, 1, 1+2*n)
|
||||||
|
b[0] = '{'
|
||||||
|
|
||||||
|
b = strconv.AppendFloat(b, float64(a[0]), 'f', -1, 32)
|
||||||
|
for i := 1; i < n; i++ {
|
||||||
|
b = append(b, ',')
|
||||||
|
b = strconv.AppendFloat(b, float64(a[i]), 'f', -1, 32)
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(append(b, '}')), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return "{}", nil
|
||||||
|
}
|
||||||
|
|
||||||
// GenericArray implements the driver.Valuer and sql.Scanner interfaces for
|
// GenericArray implements the driver.Valuer and sql.Scanner interfaces for
|
||||||
// an array or slice of any dimension.
|
// an array or slice of any dimension.
|
||||||
type GenericArray struct{ A interface{} }
|
type GenericArray struct{ A interface{} }
|
||||||
|
@ -483,6 +559,69 @@ func (a Int64Array) Value() (driver.Value, error) {
|
||||||
return "{}", nil
|
return "{}", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Int32Array represents a one-dimensional array of the PostgreSQL integer types.
|
||||||
|
type Int32Array []int32
|
||||||
|
|
||||||
|
// Scan implements the sql.Scanner interface.
|
||||||
|
func (a *Int32Array) Scan(src interface{}) error {
|
||||||
|
switch src := src.(type) {
|
||||||
|
case []byte:
|
||||||
|
return a.scanBytes(src)
|
||||||
|
case string:
|
||||||
|
return a.scanBytes([]byte(src))
|
||||||
|
case nil:
|
||||||
|
*a = nil
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("pq: cannot convert %T to Int32Array", src)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Int32Array) scanBytes(src []byte) error {
|
||||||
|
elems, err := scanLinearArray(src, []byte{','}, "Int32Array")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if *a != nil && len(elems) == 0 {
|
||||||
|
*a = (*a)[:0]
|
||||||
|
} else {
|
||||||
|
b := make(Int32Array, len(elems))
|
||||||
|
for i, v := range elems {
|
||||||
|
var x int
|
||||||
|
if x, err = strconv.Atoi(string(v)); err != nil {
|
||||||
|
return fmt.Errorf("pq: parsing array element index %d: %v", i, err)
|
||||||
|
}
|
||||||
|
b[i] = int32(x)
|
||||||
|
}
|
||||||
|
*a = b
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value implements the driver.Valuer interface.
|
||||||
|
func (a Int32Array) Value() (driver.Value, error) {
|
||||||
|
if a == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if n := len(a); n > 0 {
|
||||||
|
// There will be at least two curly brackets, N bytes of values,
|
||||||
|
// and N-1 bytes of delimiters.
|
||||||
|
b := make([]byte, 1, 1+2*n)
|
||||||
|
b[0] = '{'
|
||||||
|
|
||||||
|
b = strconv.AppendInt(b, int64(a[0]), 10)
|
||||||
|
for i := 1; i < n; i++ {
|
||||||
|
b = append(b, ',')
|
||||||
|
b = strconv.AppendInt(b, int64(a[i]), 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(append(b, '}')), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return "{}", nil
|
||||||
|
}
|
||||||
|
|
||||||
// StringArray represents a one-dimensional array of the PostgreSQL character types.
|
// StringArray represents a one-dimensional array of the PostgreSQL character types.
|
||||||
type StringArray []string
|
type StringArray []string
|
||||||
|
|
||||||
|
|
198
vendor/github.com/lib/pq/conn.go
generated
vendored
198
vendor/github.com/lib/pq/conn.go
generated
vendored
|
@ -18,6 +18,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
|
@ -38,13 +39,18 @@ var (
|
||||||
errNoLastInsertID = errors.New("no LastInsertId available after the empty statement")
|
errNoLastInsertID = errors.New("no LastInsertId available after the empty statement")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Compile time validation that our types implement the expected interfaces
|
||||||
|
var (
|
||||||
|
_ driver.Driver = Driver{}
|
||||||
|
)
|
||||||
|
|
||||||
// Driver is the Postgres database driver.
|
// Driver is the Postgres database driver.
|
||||||
type Driver struct{}
|
type Driver struct{}
|
||||||
|
|
||||||
// Open opens a new connection to the database. name is a connection string.
|
// Open opens a new connection to the database. name is a connection string.
|
||||||
// Most users should only use it through database/sql package from the standard
|
// Most users should only use it through database/sql package from the standard
|
||||||
// library.
|
// library.
|
||||||
func (d *Driver) Open(name string) (driver.Conn, error) {
|
func (d Driver) Open(name string) (driver.Conn, error) {
|
||||||
return Open(name)
|
return Open(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +142,7 @@ type conn struct {
|
||||||
|
|
||||||
// If true, this connection is bad and all public-facing functions should
|
// If true, this connection is bad and all public-facing functions should
|
||||||
// return ErrBadConn.
|
// return ErrBadConn.
|
||||||
bad bool
|
bad *atomic.Value
|
||||||
|
|
||||||
// If set, this connection should never use the binary format when
|
// If set, this connection should never use the binary format when
|
||||||
// receiving query results from prepared statements. Only provided for
|
// receiving query results from prepared statements. Only provided for
|
||||||
|
@ -155,6 +161,9 @@ type conn struct {
|
||||||
|
|
||||||
// If not nil, notifications will be synchronously sent here
|
// If not nil, notifications will be synchronously sent here
|
||||||
notificationHandler func(*Notification)
|
notificationHandler func(*Notification)
|
||||||
|
|
||||||
|
// GSSAPI context
|
||||||
|
gss GSS
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle driver-side settings in parsed connection string.
|
// Handle driver-side settings in parsed connection string.
|
||||||
|
@ -289,11 +298,20 @@ func (c *Connector) open(ctx context.Context) (cn *conn, err error) {
|
||||||
// the user.
|
// the user.
|
||||||
defer errRecoverNoErrBadConn(&err)
|
defer errRecoverNoErrBadConn(&err)
|
||||||
|
|
||||||
o := c.opts
|
// Create a new values map (copy). This makes it so maps in different
|
||||||
|
// connections do not reference the same underlying data structure, so it
|
||||||
|
// is safe for multiple connections to concurrently write to their opts.
|
||||||
|
o := make(values)
|
||||||
|
for k, v := range c.opts {
|
||||||
|
o[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
bad := &atomic.Value{}
|
||||||
|
bad.Store(false)
|
||||||
cn = &conn{
|
cn = &conn{
|
||||||
opts: o,
|
opts: o,
|
||||||
dialer: c.dialer,
|
dialer: c.dialer,
|
||||||
|
bad: bad,
|
||||||
}
|
}
|
||||||
err = cn.handleDriverSettings(o)
|
err = cn.handleDriverSettings(o)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -335,10 +353,6 @@ func (c *Connector) open(ctx context.Context) (cn *conn, err error) {
|
||||||
|
|
||||||
func dial(ctx context.Context, d Dialer, o values) (net.Conn, error) {
|
func dial(ctx context.Context, d Dialer, o values) (net.Conn, error) {
|
||||||
network, address := network(o)
|
network, address := network(o)
|
||||||
// SSL is not necessary or supported over UNIX domain sockets
|
|
||||||
if network == "unix" {
|
|
||||||
o["sslmode"] = "disable"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zero or not specified means wait indefinitely.
|
// Zero or not specified means wait indefinitely.
|
||||||
if timeout, ok := o["connect_timeout"]; ok && timeout != "0" {
|
if timeout, ok := o["connect_timeout"]; ok && timeout != "0" {
|
||||||
|
@ -502,9 +516,22 @@ func (cn *conn) isInTransaction() bool {
|
||||||
cn.txnStatus == txnStatusInFailedTransaction
|
cn.txnStatus == txnStatusInFailedTransaction
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cn *conn) setBad() {
|
||||||
|
if cn.bad != nil {
|
||||||
|
cn.bad.Store(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cn *conn) getBad() bool {
|
||||||
|
if cn.bad != nil {
|
||||||
|
return cn.bad.Load().(bool)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (cn *conn) checkIsInTransaction(intxn bool) {
|
func (cn *conn) checkIsInTransaction(intxn bool) {
|
||||||
if cn.isInTransaction() != intxn {
|
if cn.isInTransaction() != intxn {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected transaction status %v", cn.txnStatus)
|
errorf("unexpected transaction status %v", cn.txnStatus)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -514,7 +541,7 @@ func (cn *conn) Begin() (_ driver.Tx, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *conn) begin(mode string) (_ driver.Tx, err error) {
|
func (cn *conn) begin(mode string) (_ driver.Tx, err error) {
|
||||||
if cn.bad {
|
if cn.getBad() {
|
||||||
return nil, driver.ErrBadConn
|
return nil, driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer cn.errRecover(&err)
|
defer cn.errRecover(&err)
|
||||||
|
@ -525,11 +552,11 @@ func (cn *conn) begin(mode string) (_ driver.Tx, err error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if commandTag != "BEGIN" {
|
if commandTag != "BEGIN" {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
return nil, fmt.Errorf("unexpected command tag %s", commandTag)
|
return nil, fmt.Errorf("unexpected command tag %s", commandTag)
|
||||||
}
|
}
|
||||||
if cn.txnStatus != txnStatusIdleInTransaction {
|
if cn.txnStatus != txnStatusIdleInTransaction {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
return nil, fmt.Errorf("unexpected transaction status %v", cn.txnStatus)
|
return nil, fmt.Errorf("unexpected transaction status %v", cn.txnStatus)
|
||||||
}
|
}
|
||||||
return cn, nil
|
return cn, nil
|
||||||
|
@ -543,7 +570,7 @@ func (cn *conn) closeTxn() {
|
||||||
|
|
||||||
func (cn *conn) Commit() (err error) {
|
func (cn *conn) Commit() (err error) {
|
||||||
defer cn.closeTxn()
|
defer cn.closeTxn()
|
||||||
if cn.bad {
|
if cn.getBad() {
|
||||||
return driver.ErrBadConn
|
return driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer cn.errRecover(&err)
|
defer cn.errRecover(&err)
|
||||||
|
@ -565,12 +592,12 @@ func (cn *conn) Commit() (err error) {
|
||||||
_, commandTag, err := cn.simpleExec("COMMIT")
|
_, commandTag, err := cn.simpleExec("COMMIT")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if cn.isInTransaction() {
|
if cn.isInTransaction() {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if commandTag != "COMMIT" {
|
if commandTag != "COMMIT" {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
return fmt.Errorf("unexpected command tag %s", commandTag)
|
return fmt.Errorf("unexpected command tag %s", commandTag)
|
||||||
}
|
}
|
||||||
cn.checkIsInTransaction(false)
|
cn.checkIsInTransaction(false)
|
||||||
|
@ -579,7 +606,7 @@ func (cn *conn) Commit() (err error) {
|
||||||
|
|
||||||
func (cn *conn) Rollback() (err error) {
|
func (cn *conn) Rollback() (err error) {
|
||||||
defer cn.closeTxn()
|
defer cn.closeTxn()
|
||||||
if cn.bad {
|
if cn.getBad() {
|
||||||
return driver.ErrBadConn
|
return driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer cn.errRecover(&err)
|
defer cn.errRecover(&err)
|
||||||
|
@ -591,7 +618,7 @@ func (cn *conn) rollback() (err error) {
|
||||||
_, commandTag, err := cn.simpleExec("ROLLBACK")
|
_, commandTag, err := cn.simpleExec("ROLLBACK")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if cn.isInTransaction() {
|
if cn.isInTransaction() {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -631,7 +658,7 @@ func (cn *conn) simpleExec(q string) (res driver.Result, commandTag string, err
|
||||||
case 'T', 'D':
|
case 'T', 'D':
|
||||||
// ignore any results
|
// ignore any results
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unknown response for simple query: %q", t)
|
errorf("unknown response for simple query: %q", t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -653,7 +680,7 @@ func (cn *conn) simpleQuery(q string) (res *rows, err error) {
|
||||||
// the user can close, though, to avoid connections from being
|
// the user can close, though, to avoid connections from being
|
||||||
// leaked. A "rows" with done=true works fine for that purpose.
|
// leaked. A "rows" with done=true works fine for that purpose.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected message %q in simple query execution", t)
|
errorf("unexpected message %q in simple query execution", t)
|
||||||
}
|
}
|
||||||
if res == nil {
|
if res == nil {
|
||||||
|
@ -664,8 +691,11 @@ func (cn *conn) simpleQuery(q string) (res *rows, err error) {
|
||||||
// Set the result and tag to the last command complete if there wasn't a
|
// Set the result and tag to the last command complete if there wasn't a
|
||||||
// query already run. Although queries usually return from here and cede
|
// query already run. Although queries usually return from here and cede
|
||||||
// control to Next, a query with zero results does not.
|
// control to Next, a query with zero results does not.
|
||||||
if t == 'C' && res.colNames == nil {
|
if t == 'C' {
|
||||||
res.result, res.tag = cn.parseComplete(r.string())
|
res.result, res.tag = cn.parseComplete(r.string())
|
||||||
|
if res.colNames != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res.done = true
|
res.done = true
|
||||||
case 'Z':
|
case 'Z':
|
||||||
|
@ -677,7 +707,7 @@ func (cn *conn) simpleQuery(q string) (res *rows, err error) {
|
||||||
err = parseError(r)
|
err = parseError(r)
|
||||||
case 'D':
|
case 'D':
|
||||||
if res == nil {
|
if res == nil {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected DataRow in simple query execution")
|
errorf("unexpected DataRow in simple query execution")
|
||||||
}
|
}
|
||||||
// the query didn't fail; kick off to Next
|
// the query didn't fail; kick off to Next
|
||||||
|
@ -692,7 +722,7 @@ func (cn *conn) simpleQuery(q string) (res *rows, err error) {
|
||||||
// To work around a bug in QueryRow in Go 1.2 and earlier, wait
|
// To work around a bug in QueryRow in Go 1.2 and earlier, wait
|
||||||
// until the first DataRow has been received.
|
// until the first DataRow has been received.
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unknown response for simple query: %q", t)
|
errorf("unknown response for simple query: %q", t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -785,7 +815,7 @@ func (cn *conn) prepareTo(q, stmtName string) *stmt {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *conn) Prepare(q string) (_ driver.Stmt, err error) {
|
func (cn *conn) Prepare(q string) (_ driver.Stmt, err error) {
|
||||||
if cn.bad {
|
if cn.getBad() {
|
||||||
return nil, driver.ErrBadConn
|
return nil, driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer cn.errRecover(&err)
|
defer cn.errRecover(&err)
|
||||||
|
@ -824,7 +854,7 @@ func (cn *conn) Query(query string, args []driver.Value) (driver.Rows, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *conn) query(query string, args []driver.Value) (_ *rows, err error) {
|
func (cn *conn) query(query string, args []driver.Value) (_ *rows, err error) {
|
||||||
if cn.bad {
|
if cn.getBad() {
|
||||||
return nil, driver.ErrBadConn
|
return nil, driver.ErrBadConn
|
||||||
}
|
}
|
||||||
if cn.inCopy {
|
if cn.inCopy {
|
||||||
|
@ -858,7 +888,7 @@ func (cn *conn) query(query string, args []driver.Value) (_ *rows, err error) {
|
||||||
|
|
||||||
// Implement the optional "Execer" interface for one-shot queries
|
// Implement the optional "Execer" interface for one-shot queries
|
||||||
func (cn *conn) Exec(query string, args []driver.Value) (res driver.Result, err error) {
|
func (cn *conn) Exec(query string, args []driver.Value) (res driver.Result, err error) {
|
||||||
if cn.bad {
|
if cn.getBad() {
|
||||||
return nil, driver.ErrBadConn
|
return nil, driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer cn.errRecover(&err)
|
defer cn.errRecover(&err)
|
||||||
|
@ -892,9 +922,20 @@ func (cn *conn) Exec(query string, args []driver.Value) (res driver.Result, err
|
||||||
return r, err
|
return r, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type safeRetryError struct {
|
||||||
|
Err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (se *safeRetryError) Error() string {
|
||||||
|
return se.Err.Error()
|
||||||
|
}
|
||||||
|
|
||||||
func (cn *conn) send(m *writeBuf) {
|
func (cn *conn) send(m *writeBuf) {
|
||||||
_, err := cn.c.Write(m.wrap())
|
n, err := cn.c.Write(m.wrap())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if n == 0 {
|
||||||
|
err = &safeRetryError{Err: err}
|
||||||
|
}
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -919,7 +960,7 @@ func (cn *conn) sendSimpleMessage(typ byte) (err error) {
|
||||||
// the message yourself.
|
// the message yourself.
|
||||||
func (cn *conn) saveMessage(typ byte, buf *readBuf) {
|
func (cn *conn) saveMessage(typ byte, buf *readBuf) {
|
||||||
if cn.saveMessageType != 0 {
|
if cn.saveMessageType != 0 {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected saveMessageType %d", cn.saveMessageType)
|
errorf("unexpected saveMessageType %d", cn.saveMessageType)
|
||||||
}
|
}
|
||||||
cn.saveMessageType = typ
|
cn.saveMessageType = typ
|
||||||
|
@ -1065,7 +1106,7 @@ func isDriverSetting(key string) bool {
|
||||||
return true
|
return true
|
||||||
case "password":
|
case "password":
|
||||||
return true
|
return true
|
||||||
case "sslmode", "sslcert", "sslkey", "sslrootcert":
|
case "sslmode", "sslcert", "sslkey", "sslrootcert", "sslinline":
|
||||||
return true
|
return true
|
||||||
case "fallback_application_name":
|
case "fallback_application_name":
|
||||||
return true
|
return true
|
||||||
|
@ -1075,7 +1116,10 @@ func isDriverSetting(key string) bool {
|
||||||
return true
|
return true
|
||||||
case "binary_parameters":
|
case "binary_parameters":
|
||||||
return true
|
return true
|
||||||
|
case "krbsrvname":
|
||||||
|
return true
|
||||||
|
case "krbspn":
|
||||||
|
return true
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -1155,6 +1199,59 @@ func (cn *conn) auth(r *readBuf, o values) {
|
||||||
if r.int32() != 0 {
|
if r.int32() != 0 {
|
||||||
errorf("unexpected authentication response: %q", t)
|
errorf("unexpected authentication response: %q", t)
|
||||||
}
|
}
|
||||||
|
case 7: // GSSAPI, startup
|
||||||
|
if newGss == nil {
|
||||||
|
errorf("kerberos error: no GSSAPI provider registered (import github.com/lib/pq/auth/kerberos if you need Kerberos support)")
|
||||||
|
}
|
||||||
|
cli, err := newGss()
|
||||||
|
if err != nil {
|
||||||
|
errorf("kerberos error: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
var token []byte
|
||||||
|
|
||||||
|
if spn, ok := o["krbspn"]; ok {
|
||||||
|
// Use the supplied SPN if provided..
|
||||||
|
token, err = cli.GetInitTokenFromSpn(spn)
|
||||||
|
} else {
|
||||||
|
// Allow the kerberos service name to be overridden
|
||||||
|
service := "postgres"
|
||||||
|
if val, ok := o["krbsrvname"]; ok {
|
||||||
|
service = val
|
||||||
|
}
|
||||||
|
|
||||||
|
token, err = cli.GetInitToken(o["host"], service)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
errorf("failed to get Kerberos ticket: %q", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
w := cn.writeBuf('p')
|
||||||
|
w.bytes(token)
|
||||||
|
cn.send(w)
|
||||||
|
|
||||||
|
// Store for GSSAPI continue message
|
||||||
|
cn.gss = cli
|
||||||
|
|
||||||
|
case 8: // GSSAPI continue
|
||||||
|
|
||||||
|
if cn.gss == nil {
|
||||||
|
errorf("GSSAPI protocol error")
|
||||||
|
}
|
||||||
|
|
||||||
|
b := []byte(*r)
|
||||||
|
|
||||||
|
done, tokOut, err := cn.gss.Continue(b)
|
||||||
|
if err == nil && !done {
|
||||||
|
w := cn.writeBuf('p')
|
||||||
|
w.bytes(tokOut)
|
||||||
|
cn.send(w)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Errors fall through and read the more detailed message
|
||||||
|
// from the server..
|
||||||
|
|
||||||
case 10:
|
case 10:
|
||||||
sc := scram.NewClient(sha256.New, o["user"], o["password"])
|
sc := scram.NewClient(sha256.New, o["user"], o["password"])
|
||||||
sc.Step(nil)
|
sc.Step(nil)
|
||||||
|
@ -1233,7 +1330,7 @@ func (st *stmt) Close() (err error) {
|
||||||
if st.closed {
|
if st.closed {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if st.cn.bad {
|
if st.cn.getBad() {
|
||||||
return driver.ErrBadConn
|
return driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer st.cn.errRecover(&err)
|
defer st.cn.errRecover(&err)
|
||||||
|
@ -1247,14 +1344,14 @@ func (st *stmt) Close() (err error) {
|
||||||
|
|
||||||
t, _ := st.cn.recv1()
|
t, _ := st.cn.recv1()
|
||||||
if t != '3' {
|
if t != '3' {
|
||||||
st.cn.bad = true
|
st.cn.setBad()
|
||||||
errorf("unexpected close response: %q", t)
|
errorf("unexpected close response: %q", t)
|
||||||
}
|
}
|
||||||
st.closed = true
|
st.closed = true
|
||||||
|
|
||||||
t, r := st.cn.recv1()
|
t, r := st.cn.recv1()
|
||||||
if t != 'Z' {
|
if t != 'Z' {
|
||||||
st.cn.bad = true
|
st.cn.setBad()
|
||||||
errorf("expected ready for query, but got: %q", t)
|
errorf("expected ready for query, but got: %q", t)
|
||||||
}
|
}
|
||||||
st.cn.processReadyForQuery(r)
|
st.cn.processReadyForQuery(r)
|
||||||
|
@ -1263,7 +1360,11 @@ func (st *stmt) Close() (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *stmt) Query(v []driver.Value) (r driver.Rows, err error) {
|
func (st *stmt) Query(v []driver.Value) (r driver.Rows, err error) {
|
||||||
if st.cn.bad {
|
return st.query(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (st *stmt) query(v []driver.Value) (r *rows, err error) {
|
||||||
|
if st.cn.getBad() {
|
||||||
return nil, driver.ErrBadConn
|
return nil, driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer st.cn.errRecover(&err)
|
defer st.cn.errRecover(&err)
|
||||||
|
@ -1276,7 +1377,7 @@ func (st *stmt) Query(v []driver.Value) (r driver.Rows, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *stmt) Exec(v []driver.Value) (res driver.Result, err error) {
|
func (st *stmt) Exec(v []driver.Value) (res driver.Result, err error) {
|
||||||
if st.cn.bad {
|
if st.cn.getBad() {
|
||||||
return nil, driver.ErrBadConn
|
return nil, driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer st.cn.errRecover(&err)
|
defer st.cn.errRecover(&err)
|
||||||
|
@ -1363,7 +1464,7 @@ func (cn *conn) parseComplete(commandTag string) (driver.Result, string) {
|
||||||
if affectedRows == nil && strings.HasPrefix(commandTag, "INSERT ") {
|
if affectedRows == nil && strings.HasPrefix(commandTag, "INSERT ") {
|
||||||
parts := strings.Split(commandTag, " ")
|
parts := strings.Split(commandTag, " ")
|
||||||
if len(parts) != 3 {
|
if len(parts) != 3 {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected INSERT command tag %s", commandTag)
|
errorf("unexpected INSERT command tag %s", commandTag)
|
||||||
}
|
}
|
||||||
affectedRows = &parts[len(parts)-1]
|
affectedRows = &parts[len(parts)-1]
|
||||||
|
@ -1375,7 +1476,7 @@ func (cn *conn) parseComplete(commandTag string) (driver.Result, string) {
|
||||||
}
|
}
|
||||||
n, err := strconv.ParseInt(*affectedRows, 10, 64)
|
n, err := strconv.ParseInt(*affectedRows, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("could not parse commandTag: %s", err)
|
errorf("could not parse commandTag: %s", err)
|
||||||
}
|
}
|
||||||
return driver.RowsAffected(n), commandTag
|
return driver.RowsAffected(n), commandTag
|
||||||
|
@ -1442,7 +1543,7 @@ func (rs *rows) Next(dest []driver.Value) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
conn := rs.cn
|
conn := rs.cn
|
||||||
if conn.bad {
|
if conn.getBad() {
|
||||||
return driver.ErrBadConn
|
return driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer conn.errRecover(&err)
|
defer conn.errRecover(&err)
|
||||||
|
@ -1467,7 +1568,7 @@ func (rs *rows) Next(dest []driver.Value) (err error) {
|
||||||
case 'D':
|
case 'D':
|
||||||
n := rs.rb.int16()
|
n := rs.rb.int16()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
conn.bad = true
|
conn.setBad()
|
||||||
errorf("unexpected DataRow after error %s", err)
|
errorf("unexpected DataRow after error %s", err)
|
||||||
}
|
}
|
||||||
if n < len(dest) {
|
if n < len(dest) {
|
||||||
|
@ -1634,10 +1735,9 @@ func (cn *conn) processParameterStatus(r *readBuf) {
|
||||||
case "server_version":
|
case "server_version":
|
||||||
var major1 int
|
var major1 int
|
||||||
var major2 int
|
var major2 int
|
||||||
var minor int
|
_, err = fmt.Sscanf(r.string(), "%d.%d", &major1, &major2)
|
||||||
_, err = fmt.Sscanf(r.string(), "%d.%d.%d", &major1, &major2, &minor)
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
cn.parameterStatus.serverVersion = major1*10000 + major2*100 + minor
|
cn.parameterStatus.serverVersion = major1*10000 + major2*100
|
||||||
}
|
}
|
||||||
|
|
||||||
case "TimeZone":
|
case "TimeZone":
|
||||||
|
@ -1662,7 +1762,7 @@ func (cn *conn) readReadyForQuery() {
|
||||||
cn.processReadyForQuery(r)
|
cn.processReadyForQuery(r)
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected message %q; expected ReadyForQuery", t)
|
errorf("unexpected message %q; expected ReadyForQuery", t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1682,7 +1782,7 @@ func (cn *conn) readParseResponse() {
|
||||||
cn.readReadyForQuery()
|
cn.readReadyForQuery()
|
||||||
panic(err)
|
panic(err)
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected Parse response %q", t)
|
errorf("unexpected Parse response %q", t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1707,7 +1807,7 @@ func (cn *conn) readStatementDescribeResponse() (paramTyps []oid.Oid, colNames [
|
||||||
cn.readReadyForQuery()
|
cn.readReadyForQuery()
|
||||||
panic(err)
|
panic(err)
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected Describe statement response %q", t)
|
errorf("unexpected Describe statement response %q", t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1725,7 +1825,7 @@ func (cn *conn) readPortalDescribeResponse() rowsHeader {
|
||||||
cn.readReadyForQuery()
|
cn.readReadyForQuery()
|
||||||
panic(err)
|
panic(err)
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected Describe response %q", t)
|
errorf("unexpected Describe response %q", t)
|
||||||
}
|
}
|
||||||
panic("not reached")
|
panic("not reached")
|
||||||
|
@ -1741,7 +1841,7 @@ func (cn *conn) readBindResponse() {
|
||||||
cn.readReadyForQuery()
|
cn.readReadyForQuery()
|
||||||
panic(err)
|
panic(err)
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected Bind response %q", t)
|
errorf("unexpected Bind response %q", t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1768,7 +1868,7 @@ func (cn *conn) postExecuteWorkaround() {
|
||||||
cn.saveMessage(t, r)
|
cn.saveMessage(t, r)
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected message during extended query execution: %q", t)
|
errorf("unexpected message during extended query execution: %q", t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1781,7 +1881,7 @@ func (cn *conn) readExecuteResponse(protocolState string) (res driver.Result, co
|
||||||
switch t {
|
switch t {
|
||||||
case 'C':
|
case 'C':
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected CommandComplete after error %s", err)
|
errorf("unexpected CommandComplete after error %s", err)
|
||||||
}
|
}
|
||||||
res, commandTag = cn.parseComplete(r.string())
|
res, commandTag = cn.parseComplete(r.string())
|
||||||
|
@ -1795,7 +1895,7 @@ func (cn *conn) readExecuteResponse(protocolState string) (res driver.Result, co
|
||||||
err = parseError(r)
|
err = parseError(r)
|
||||||
case 'T', 'D', 'I':
|
case 'T', 'D', 'I':
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unexpected %q after error %s", t, err)
|
errorf("unexpected %q after error %s", t, err)
|
||||||
}
|
}
|
||||||
if t == 'I' {
|
if t == 'I' {
|
||||||
|
@ -1803,7 +1903,7 @@ func (cn *conn) readExecuteResponse(protocolState string) (res driver.Result, co
|
||||||
}
|
}
|
||||||
// ignore any results
|
// ignore any results
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
errorf("unknown %s response: %q", protocolState, t)
|
errorf("unknown %s response: %q", protocolState, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
114
vendor/github.com/lib/pq/conn_go18.go
generated
vendored
114
vendor/github.com/lib/pq/conn_go18.go
generated
vendored
|
@ -7,9 +7,14 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
watchCancelDialContextTimeout = time.Second * 10
|
||||||
|
)
|
||||||
|
|
||||||
// Implement the "QueryerContext" interface
|
// Implement the "QueryerContext" interface
|
||||||
func (cn *conn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
|
func (cn *conn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
|
||||||
list := make([]driver.Value, len(args))
|
list := make([]driver.Value, len(args))
|
||||||
|
@ -42,6 +47,14 @@ func (cn *conn) ExecContext(ctx context.Context, query string, args []driver.Nam
|
||||||
return cn.Exec(query, list)
|
return cn.Exec(query, list)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Implement the "ConnPrepareContext" interface
|
||||||
|
func (cn *conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) {
|
||||||
|
if finish := cn.watchCancel(ctx); finish != nil {
|
||||||
|
defer finish()
|
||||||
|
}
|
||||||
|
return cn.Prepare(query)
|
||||||
|
}
|
||||||
|
|
||||||
// Implement the "ConnBeginTx" interface
|
// Implement the "ConnBeginTx" interface
|
||||||
func (cn *conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
|
func (cn *conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
|
||||||
var mode string
|
var mode string
|
||||||
|
@ -89,25 +102,37 @@ func (cn *conn) Ping(ctx context.Context) error {
|
||||||
|
|
||||||
func (cn *conn) watchCancel(ctx context.Context) func() {
|
func (cn *conn) watchCancel(ctx context.Context) func() {
|
||||||
if done := ctx.Done(); done != nil {
|
if done := ctx.Done(); done != nil {
|
||||||
finished := make(chan struct{})
|
finished := make(chan struct{}, 1)
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-done:
|
case <-done:
|
||||||
|
select {
|
||||||
|
case finished <- struct{}{}:
|
||||||
|
default:
|
||||||
|
// We raced with the finish func, let the next query handle this with the
|
||||||
|
// context.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the connection state to bad so it does not get reused.
|
||||||
|
cn.setBad()
|
||||||
|
|
||||||
// At this point the function level context is canceled,
|
// At this point the function level context is canceled,
|
||||||
// so it must not be used for the additional network
|
// so it must not be used for the additional network
|
||||||
// request to cancel the query.
|
// request to cancel the query.
|
||||||
// Create a new context to pass into the dial.
|
// Create a new context to pass into the dial.
|
||||||
ctxCancel, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
ctxCancel, cancel := context.WithTimeout(context.Background(), watchCancelDialContextTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
_ = cn.cancel(ctxCancel)
|
_ = cn.cancel(ctxCancel)
|
||||||
finished <- struct{}{}
|
|
||||||
case <-finished:
|
case <-finished:
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
return func() {
|
return func() {
|
||||||
select {
|
select {
|
||||||
case <-finished:
|
case <-finished:
|
||||||
|
cn.setBad()
|
||||||
|
cn.Close()
|
||||||
case finished <- struct{}{}:
|
case finished <- struct{}{}:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -116,17 +141,29 @@ func (cn *conn) watchCancel(ctx context.Context) func() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *conn) cancel(ctx context.Context) error {
|
func (cn *conn) cancel(ctx context.Context) error {
|
||||||
c, err := dial(ctx, cn.dialer, cn.opts)
|
// Create a new values map (copy). This makes sure the connection created
|
||||||
|
// in this method cannot write to the same underlying data, which could
|
||||||
|
// cause a concurrent map write panic. This is necessary because cancel
|
||||||
|
// is called from a goroutine in watchCancel.
|
||||||
|
o := make(values)
|
||||||
|
for k, v := range cn.opts {
|
||||||
|
o[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
c, err := dial(ctx, cn.dialer, o)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
{
|
{
|
||||||
|
bad := &atomic.Value{}
|
||||||
|
bad.Store(false)
|
||||||
can := conn{
|
can := conn{
|
||||||
c: c,
|
c: c,
|
||||||
|
bad: bad,
|
||||||
}
|
}
|
||||||
err = can.ssl(cn.opts)
|
err = can.ssl(o)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -147,3 +184,68 @@ func (cn *conn) cancel(ctx context.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Implement the "StmtQueryContext" interface
|
||||||
|
func (st *stmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) {
|
||||||
|
list := make([]driver.Value, len(args))
|
||||||
|
for i, nv := range args {
|
||||||
|
list[i] = nv.Value
|
||||||
|
}
|
||||||
|
finish := st.watchCancel(ctx)
|
||||||
|
r, err := st.query(list)
|
||||||
|
if err != nil {
|
||||||
|
if finish != nil {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r.finish = finish
|
||||||
|
return r, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implement the "StmtExecContext" interface
|
||||||
|
func (st *stmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) {
|
||||||
|
list := make([]driver.Value, len(args))
|
||||||
|
for i, nv := range args {
|
||||||
|
list[i] = nv.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
if finish := st.watchCancel(ctx); finish != nil {
|
||||||
|
defer finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
return st.Exec(list)
|
||||||
|
}
|
||||||
|
|
||||||
|
// watchCancel is implemented on stmt in order to not mark the parent conn as bad
|
||||||
|
func (st *stmt) watchCancel(ctx context.Context) func() {
|
||||||
|
if done := ctx.Done(); done != nil {
|
||||||
|
finished := make(chan struct{})
|
||||||
|
go func() {
|
||||||
|
select {
|
||||||
|
case <-done:
|
||||||
|
// At this point the function level context is canceled,
|
||||||
|
// so it must not be used for the additional network
|
||||||
|
// request to cancel the query.
|
||||||
|
// Create a new context to pass into the dial.
|
||||||
|
ctxCancel, cancel := context.WithTimeout(context.Background(), watchCancelDialContextTimeout)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
_ = st.cancel(ctxCancel)
|
||||||
|
finished <- struct{}{}
|
||||||
|
case <-finished:
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return func() {
|
||||||
|
select {
|
||||||
|
case <-finished:
|
||||||
|
case finished <- struct{}{}:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (st *stmt) cancel(ctx context.Context) error {
|
||||||
|
return st.cn.cancel(ctx)
|
||||||
|
}
|
||||||
|
|
7
vendor/github.com/lib/pq/connector.go
generated
vendored
7
vendor/github.com/lib/pq/connector.go
generated
vendored
|
@ -27,7 +27,7 @@ func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) {
|
||||||
return c.open(ctx)
|
return c.open(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Driver returnst the underlying driver of this Connector.
|
// Driver returns the underlying driver of this Connector.
|
||||||
func (c *Connector) Driver() driver.Driver {
|
func (c *Connector) Driver() driver.Driver {
|
||||||
return &Driver{}
|
return &Driver{}
|
||||||
}
|
}
|
||||||
|
@ -106,5 +106,10 @@ func NewConnector(dsn string) (*Connector, error) {
|
||||||
o["user"] = u
|
o["user"] = u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SSL is not necessary or supported over UNIX domain sockets
|
||||||
|
if network, _ := network(o); network == "unix" {
|
||||||
|
o["sslmode"] = "disable"
|
||||||
|
}
|
||||||
|
|
||||||
return &Connector{opts: o, dialer: defaultDialer{}}, nil
|
return &Connector{opts: o, dialer: defaultDialer{}}, nil
|
||||||
}
|
}
|
||||||
|
|
29
vendor/github.com/lib/pq/copy.go
generated
vendored
29
vendor/github.com/lib/pq/copy.go
generated
vendored
|
@ -49,6 +49,7 @@ type copyin struct {
|
||||||
buffer []byte
|
buffer []byte
|
||||||
rowData chan []byte
|
rowData chan []byte
|
||||||
done chan bool
|
done chan bool
|
||||||
|
driver.Result
|
||||||
|
|
||||||
closed bool
|
closed bool
|
||||||
|
|
||||||
|
@ -151,6 +152,8 @@ func (ci *copyin) resploop() {
|
||||||
switch t {
|
switch t {
|
||||||
case 'C':
|
case 'C':
|
||||||
// complete
|
// complete
|
||||||
|
res, _ := ci.cn.parseComplete(r.string())
|
||||||
|
ci.setResult(res)
|
||||||
case 'N':
|
case 'N':
|
||||||
if n := ci.cn.noticeHandler; n != nil {
|
if n := ci.cn.noticeHandler; n != nil {
|
||||||
n(parseError(&r))
|
n(parseError(&r))
|
||||||
|
@ -173,13 +176,13 @@ func (ci *copyin) resploop() {
|
||||||
|
|
||||||
func (ci *copyin) setBad() {
|
func (ci *copyin) setBad() {
|
||||||
ci.Lock()
|
ci.Lock()
|
||||||
ci.cn.bad = true
|
ci.cn.setBad()
|
||||||
ci.Unlock()
|
ci.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ci *copyin) isBad() bool {
|
func (ci *copyin) isBad() bool {
|
||||||
ci.Lock()
|
ci.Lock()
|
||||||
b := ci.cn.bad
|
b := ci.cn.getBad()
|
||||||
ci.Unlock()
|
ci.Unlock()
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
@ -201,6 +204,22 @@ func (ci *copyin) setError(err error) {
|
||||||
ci.Unlock()
|
ci.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ci *copyin) setResult(result driver.Result) {
|
||||||
|
ci.Lock()
|
||||||
|
ci.Result = result
|
||||||
|
ci.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ci *copyin) getResult() driver.Result {
|
||||||
|
ci.Lock()
|
||||||
|
result := ci.Result
|
||||||
|
ci.Unlock()
|
||||||
|
if result == nil {
|
||||||
|
return driver.RowsAffected(0)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
func (ci *copyin) NumInput() int {
|
func (ci *copyin) NumInput() int {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
@ -231,7 +250,11 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return driver.RowsAffected(0), ci.Close()
|
if err := ci.Close(); err != nil {
|
||||||
|
return driver.RowsAffected(0), err
|
||||||
|
}
|
||||||
|
|
||||||
|
return ci.getResult(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
numValues := len(v)
|
numValues := len(v)
|
||||||
|
|
23
vendor/github.com/lib/pq/doc.go
generated
vendored
23
vendor/github.com/lib/pq/doc.go
generated
vendored
|
@ -241,5 +241,28 @@ bytes by the PostgreSQL server.
|
||||||
You can find a complete, working example of Listener usage at
|
You can find a complete, working example of Listener usage at
|
||||||
https://godoc.org/github.com/lib/pq/example/listen.
|
https://godoc.org/github.com/lib/pq/example/listen.
|
||||||
|
|
||||||
|
|
||||||
|
Kerberos Support
|
||||||
|
|
||||||
|
|
||||||
|
If you need support for Kerberos authentication, add the following to your main
|
||||||
|
package:
|
||||||
|
|
||||||
|
import "github.com/lib/pq/auth/kerberos"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
pq.RegisterGSSProvider(func() (pq.Gss, error) { return kerberos.NewGSS() })
|
||||||
|
}
|
||||||
|
|
||||||
|
This package is in a separate module so that users who don't need Kerberos
|
||||||
|
don't have to download unnecessary dependencies.
|
||||||
|
|
||||||
|
When imported, additional connection string parameters are supported:
|
||||||
|
|
||||||
|
* krbsrvname - GSS (Kerberos) service name when constructing the
|
||||||
|
SPN (default is `postgres`). This will be combined with the host
|
||||||
|
to form the full SPN: `krbsrvname/host`.
|
||||||
|
* krbspn - GSS (Kerberos) SPN. This takes priority over
|
||||||
|
`krbsrvname` if present.
|
||||||
*/
|
*/
|
||||||
package pq
|
package pq
|
||||||
|
|
14
vendor/github.com/lib/pq/encode.go
generated
vendored
14
vendor/github.com/lib/pq/encode.go
generated
vendored
|
@ -200,11 +200,17 @@ func appendEscapedText(buf []byte, text string) []byte {
|
||||||
func mustParse(f string, typ oid.Oid, s []byte) time.Time {
|
func mustParse(f string, typ oid.Oid, s []byte) time.Time {
|
||||||
str := string(s)
|
str := string(s)
|
||||||
|
|
||||||
// check for a 30-minute-offset timezone
|
// Check for a minute and second offset in the timezone.
|
||||||
if (typ == oid.T_timestamptz || typ == oid.T_timetz) &&
|
if typ == oid.T_timestamptz || typ == oid.T_timetz {
|
||||||
str[len(str)-3] == ':' {
|
for i := 3; i <= 6; i += 3 {
|
||||||
f += ":00"
|
if str[len(str)-i] == ':' {
|
||||||
|
f += ":00"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special case for 24:00 time.
|
// Special case for 24:00 time.
|
||||||
// Unfortunately, golang does not parse 24:00 as a proper time.
|
// Unfortunately, golang does not parse 24:00 as a proper time.
|
||||||
// In this case, we want to try "round to the next day", to differentiate.
|
// In this case, we want to try "round to the next day", to differentiate.
|
||||||
|
|
13
vendor/github.com/lib/pq/error.go
generated
vendored
13
vendor/github.com/lib/pq/error.go
generated
vendored
|
@ -484,7 +484,7 @@ func (cn *conn) errRecover(err *error) {
|
||||||
case nil:
|
case nil:
|
||||||
// Do nothing
|
// Do nothing
|
||||||
case runtime.Error:
|
case runtime.Error:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
panic(v)
|
panic(v)
|
||||||
case *Error:
|
case *Error:
|
||||||
if v.Fatal() {
|
if v.Fatal() {
|
||||||
|
@ -493,23 +493,26 @@ func (cn *conn) errRecover(err *error) {
|
||||||
*err = v
|
*err = v
|
||||||
}
|
}
|
||||||
case *net.OpError:
|
case *net.OpError:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
*err = v
|
*err = v
|
||||||
|
case *safeRetryError:
|
||||||
|
cn.setBad()
|
||||||
|
*err = driver.ErrBadConn
|
||||||
case error:
|
case error:
|
||||||
if v == io.EOF || v.(error).Error() == "remote error: handshake failure" {
|
if v == io.EOF || v.Error() == "remote error: handshake failure" {
|
||||||
*err = driver.ErrBadConn
|
*err = driver.ErrBadConn
|
||||||
} else {
|
} else {
|
||||||
*err = v
|
*err = v
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
panic(fmt.Sprintf("unknown error: %#v", e))
|
panic(fmt.Sprintf("unknown error: %#v", e))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Any time we return ErrBadConn, we need to remember it since *Tx doesn't
|
// Any time we return ErrBadConn, we need to remember it since *Tx doesn't
|
||||||
// mark the connection bad in database/sql.
|
// mark the connection bad in database/sql.
|
||||||
if *err == driver.ErrBadConn {
|
if *err == driver.ErrBadConn {
|
||||||
cn.bad = true
|
cn.setBad()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
vendor/github.com/lib/pq/go.mod
generated
vendored
2
vendor/github.com/lib/pq/go.mod
generated
vendored
|
@ -1 +1,3 @@
|
||||||
module github.com/lib/pq
|
module github.com/lib/pq
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
27
vendor/github.com/lib/pq/krb.go
generated
vendored
Normal file
27
vendor/github.com/lib/pq/krb.go
generated
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
package pq
|
||||||
|
|
||||||
|
// NewGSSFunc creates a GSS authentication provider, for use with
|
||||||
|
// RegisterGSSProvider.
|
||||||
|
type NewGSSFunc func() (GSS, error)
|
||||||
|
|
||||||
|
var newGss NewGSSFunc
|
||||||
|
|
||||||
|
// RegisterGSSProvider registers a GSS authentication provider. For example, if
|
||||||
|
// you need to use Kerberos to authenticate with your server, add this to your
|
||||||
|
// main package:
|
||||||
|
//
|
||||||
|
// import "github.com/lib/pq/auth/kerberos"
|
||||||
|
//
|
||||||
|
// func init() {
|
||||||
|
// pq.RegisterGSSProvider(func() (pq.GSS, error) { return kerberos.NewGSS() })
|
||||||
|
// }
|
||||||
|
func RegisterGSSProvider(newGssArg NewGSSFunc) {
|
||||||
|
newGss = newGssArg
|
||||||
|
}
|
||||||
|
|
||||||
|
// GSS provides GSSAPI authentication (e.g., Kerberos).
|
||||||
|
type GSS interface {
|
||||||
|
GetInitToken(host string, service string) ([]byte, error)
|
||||||
|
GetInitTokenFromSpn(spn string) ([]byte, error)
|
||||||
|
Continue(inToken []byte) (done bool, outToken []byte, err error)
|
||||||
|
}
|
1
vendor/github.com/lib/pq/notice.go
generated
vendored
1
vendor/github.com/lib/pq/notice.go
generated
vendored
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build go1.10
|
||||||
// +build go1.10
|
// +build go1.10
|
||||||
|
|
||||||
package pq
|
package pq
|
||||||
|
|
24
vendor/github.com/lib/pq/ssl.go
generated
vendored
24
vendor/github.com/lib/pq/ssl.go
generated
vendored
|
@ -83,6 +83,16 @@ func ssl(o values) (func(net.Conn) (net.Conn, error), error) {
|
||||||
// in the user's home directory. The configured files must exist and have
|
// in the user's home directory. The configured files must exist and have
|
||||||
// the correct permissions.
|
// the correct permissions.
|
||||||
func sslClientCertificates(tlsConf *tls.Config, o values) error {
|
func sslClientCertificates(tlsConf *tls.Config, o values) error {
|
||||||
|
sslinline := o["sslinline"]
|
||||||
|
if sslinline == "true" {
|
||||||
|
cert, err := tls.X509KeyPair([]byte(o["sslcert"]), []byte(o["sslkey"]))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
tlsConf.Certificates = []tls.Certificate{cert}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// user.Current() might fail when cross-compiling. We have to ignore the
|
// user.Current() might fail when cross-compiling. We have to ignore the
|
||||||
// error and continue without home directory defaults, since we wouldn't
|
// error and continue without home directory defaults, since we wouldn't
|
||||||
// know from where to load them.
|
// know from where to load them.
|
||||||
|
@ -137,9 +147,17 @@ func sslCertificateAuthority(tlsConf *tls.Config, o values) error {
|
||||||
if sslrootcert := o["sslrootcert"]; len(sslrootcert) > 0 {
|
if sslrootcert := o["sslrootcert"]; len(sslrootcert) > 0 {
|
||||||
tlsConf.RootCAs = x509.NewCertPool()
|
tlsConf.RootCAs = x509.NewCertPool()
|
||||||
|
|
||||||
cert, err := ioutil.ReadFile(sslrootcert)
|
sslinline := o["sslinline"]
|
||||||
if err != nil {
|
|
||||||
return err
|
var cert []byte
|
||||||
|
if sslinline == "true" {
|
||||||
|
cert = []byte(sslrootcert)
|
||||||
|
} else {
|
||||||
|
var err error
|
||||||
|
cert, err = ioutil.ReadFile(sslrootcert)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !tlsConf.RootCAs.AppendCertsFromPEM(cert) {
|
if !tlsConf.RootCAs.AppendCertsFromPEM(cert) {
|
||||||
|
|
1
vendor/github.com/lib/pq/ssl_permissions.go
generated
vendored
1
vendor/github.com/lib/pq/ssl_permissions.go
generated
vendored
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build !windows
|
||||||
// +build !windows
|
// +build !windows
|
||||||
|
|
||||||
package pq
|
package pq
|
||||||
|
|
1
vendor/github.com/lib/pq/ssl_windows.go
generated
vendored
1
vendor/github.com/lib/pq/ssl_windows.go
generated
vendored
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build windows
|
||||||
// +build windows
|
// +build windows
|
||||||
|
|
||||||
package pq
|
package pq
|
||||||
|
|
4
vendor/github.com/lib/pq/url.go
generated
vendored
4
vendor/github.com/lib/pq/url.go
generated
vendored
|
@ -40,10 +40,10 @@ func ParseURL(url string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var kvs []string
|
var kvs []string
|
||||||
escaper := strings.NewReplacer(` `, `\ `, `'`, `\'`, `\`, `\\`)
|
escaper := strings.NewReplacer(`'`, `\'`, `\`, `\\`)
|
||||||
accrue := func(k, v string) {
|
accrue := func(k, v string) {
|
||||||
if v != "" {
|
if v != "" {
|
||||||
kvs = append(kvs, k+"="+escaper.Replace(v))
|
kvs = append(kvs, k+"='"+escaper.Replace(v)+"'")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
vendor/github.com/lib/pq/user_other.go
generated
vendored
Normal file
10
vendor/github.com/lib/pq/user_other.go
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
// Package pq is a pure Go Postgres driver for the database/sql package.
|
||||||
|
|
||||||
|
//go:build js || android || hurd || zos
|
||||||
|
// +build js android hurd zos
|
||||||
|
|
||||||
|
package pq
|
||||||
|
|
||||||
|
func userCurrent() (string, error) {
|
||||||
|
return "", ErrCouldNotDetectUsername
|
||||||
|
}
|
3
vendor/github.com/lib/pq/user_posix.go
generated
vendored
3
vendor/github.com/lib/pq/user_posix.go
generated
vendored
|
@ -1,6 +1,7 @@
|
||||||
// Package pq is a pure Go Postgres driver for the database/sql package.
|
// Package pq is a pure Go Postgres driver for the database/sql package.
|
||||||
|
|
||||||
// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris rumprun
|
//go:build aix || darwin || dragonfly || freebsd || linux || nacl || netbsd || openbsd || plan9 || solaris || rumprun || illumos
|
||||||
|
// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris rumprun illumos
|
||||||
|
|
||||||
package pq
|
package pq
|
||||||
|
|
||||||
|
|
4
vendor/github.com/mattn/go-sqlite3/.codecov.yml
generated
vendored
Normal file
4
vendor/github.com/mattn/go-sqlite3/.codecov.yml
generated
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
coverage:
|
||||||
|
status:
|
||||||
|
project: off
|
||||||
|
patch: off
|
33
vendor/github.com/mattn/go-sqlite3/.travis.yml
generated
vendored
33
vendor/github.com/mattn/go-sqlite3/.travis.yml
generated
vendored
|
@ -1,33 +0,0 @@
|
||||||
language: go
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- osx
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
update: true
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.9.x
|
|
||||||
- 1.10.x
|
|
||||||
- 1.11.x
|
|
||||||
- 1.12.x
|
|
||||||
- 1.13.x
|
|
||||||
- master
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- |
|
|
||||||
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
|
||||||
brew update
|
|
||||||
fi
|
|
||||||
- go get github.com/smartystreets/goconvey
|
|
||||||
- go get github.com/mattn/goveralls
|
|
||||||
- go get golang.org/x/tools/cmd/cover
|
|
||||||
|
|
||||||
script:
|
|
||||||
- $HOME/gopath/bin/goveralls -repotoken 3qJVUE0iQwqnCbmNcDsjYu1nh4J4KIFXx
|
|
||||||
- go test -race -v . -tags ""
|
|
||||||
- go test -race -v . -tags "libsqlite3"
|
|
||||||
- go test -race -v . -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_preupdate_hook sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_userauth sqlite_vacuum_incr sqlite_vtable sqlite_unlock_notify"
|
|
||||||
- go test -race -v . -tags "sqlite_vacuum_full"
|
|
34
vendor/github.com/mattn/go-sqlite3/README.md
generated
vendored
34
vendor/github.com/mattn/go-sqlite3/README.md
generated
vendored
|
@ -2,18 +2,20 @@ go-sqlite3
|
||||||
==========
|
==========
|
||||||
|
|
||||||
[](http://godoc.org/github.com/mattn/go-sqlite3)
|
[](http://godoc.org/github.com/mattn/go-sqlite3)
|
||||||
[](https://travis-ci.org/mattn/go-sqlite3)
|
[](https://github.com/mattn/go-sqlite3/actions?query=workflow%3AGo)
|
||||||
[](https://opencollective.com/mattn-go-sqlite3)
|
[](https://opencollective.com/mattn-go-sqlite3)
|
||||||
[](https://coveralls.io/r/mattn/go-sqlite3?branch=master)
|
[](https://codecov.io/gh/mattn/go-sqlite3)
|
||||||
[](https://goreportcard.com/report/github.com/mattn/go-sqlite3)
|
[](https://goreportcard.com/report/github.com/mattn/go-sqlite3)
|
||||||
|
|
||||||
NOTE: v2.0.1 or higher is unfortunatal release. So there are no big changes. And does not provide v2 feature.
|
Latest stable version is v1.14 or later not v2.
|
||||||
|
|
||||||
|
~~**NOTE:** The increase to v2 was an accident. There were no major changes or features.~~
|
||||||
|
|
||||||
# Description
|
# Description
|
||||||
|
|
||||||
sqlite3 driver conforming to the built-in database/sql interface
|
sqlite3 driver conforming to the built-in database/sql interface
|
||||||
|
|
||||||
Supported Golang version: See .travis.yml
|
Supported Golang version: See [.github/workflows/go.yaml](./.github/workflows/go.yaml)
|
||||||
|
|
||||||
[This package follows the official Golang Release Policy.](https://golang.org/doc/devel/release.html#policy)
|
[This package follows the official Golang Release Policy.](https://golang.org/doc/devel/release.html#policy)
|
||||||
|
|
||||||
|
@ -123,6 +125,8 @@ Boolean values can be one of:
|
||||||
| Time Zone Location | `_loc` | auto | Specify location of time format. |
|
| Time Zone Location | `_loc` | auto | Specify location of time format. |
|
||||||
| Transaction Lock | `_txlock` | <ul><li>immediate</li><li>deferred</li><li>exclusive</li></ul> | Specify locking behavior for transactions. |
|
| Transaction Lock | `_txlock` | <ul><li>immediate</li><li>deferred</li><li>exclusive</li></ul> | Specify locking behavior for transactions. |
|
||||||
| Writable Schema | `_writable_schema` | `Boolean` | When this pragma is on, the SQLITE_MASTER tables in which database can be changed using ordinary UPDATE, INSERT, and DELETE statements. Warning: misuse of this pragma can easily result in a corrupt database file. |
|
| Writable Schema | `_writable_schema` | `Boolean` | When this pragma is on, the SQLITE_MASTER tables in which database can be changed using ordinary UPDATE, INSERT, and DELETE statements. Warning: misuse of this pragma can easily result in a corrupt database file. |
|
||||||
|
| Cache Size | `_cache_size` | `int` | Maximum cache size; default is 2000K (2M). See [PRAGMA cache_size](https://sqlite.org/pragma.html#pragma_cache_size) |
|
||||||
|
|
||||||
|
|
||||||
## DSN Examples
|
## DSN Examples
|
||||||
|
|
||||||
|
@ -212,9 +216,15 @@ This library can be cross-compiled.
|
||||||
|
|
||||||
In some cases you are required to the `CC` environment variable with the cross compiler.
|
In some cases you are required to the `CC` environment variable with the cross compiler.
|
||||||
|
|
||||||
Additional information:
|
## Cross Compiling from MAC OSX
|
||||||
- [#491](https://github.com/mattn/go-sqlite3/issues/491)
|
The simplest way to cross compile from OSX is to use [xgo](https://github.com/karalabe/xgo).
|
||||||
- [#560](https://github.com/mattn/go-sqlite3/issues/560)
|
|
||||||
|
Steps:
|
||||||
|
- Install [xgo](https://github.com/karalabe/xgo) (`go get github.com/karalabe/xgo`).
|
||||||
|
- Ensure that your project is within your `GOPATH`.
|
||||||
|
- Run `xgo local/path/to/project`.
|
||||||
|
|
||||||
|
Please refer to the project's [README](https://github.com/karalabe/xgo/blob/master/README.md) for further information.
|
||||||
|
|
||||||
# Google Cloud Platform
|
# Google Cloud Platform
|
||||||
|
|
||||||
|
@ -453,6 +463,16 @@ If you want your own extension to be listed here or you want to add a reference
|
||||||
Spatialite is available as an extension to SQLite, and can be used in combination with this repository.
|
Spatialite is available as an extension to SQLite, and can be used in combination with this repository.
|
||||||
For an example see [shaxbee/go-spatialite](https://github.com/shaxbee/go-spatialite).
|
For an example see [shaxbee/go-spatialite](https://github.com/shaxbee/go-spatialite).
|
||||||
|
|
||||||
|
## extension-functions.c from SQLite3 Contrib
|
||||||
|
|
||||||
|
extension-functions.c is available as an extension to SQLite, and provides the following functions:
|
||||||
|
|
||||||
|
- Math: acos, asin, atan, atn2, atan2, acosh, asinh, atanh, difference, degrees, radians, cos, sin, tan, cot, cosh, sinh, tanh, coth, exp, log, log10, power, sign, sqrt, square, ceil, floor, pi.
|
||||||
|
- String: replicate, charindex, leftstr, rightstr, ltrim, rtrim, trim, replace, reverse, proper, padl, padr, padc, strfilter.
|
||||||
|
- Aggregate: stdev, variance, mode, median, lower_quartile, upper_quartile
|
||||||
|
|
||||||
|
For an example see [dinedal/go-sqlite3-extension-functions](https://github.com/dinedal/go-sqlite3-extension-functions).
|
||||||
|
|
||||||
# FAQ
|
# FAQ
|
||||||
|
|
||||||
- Getting insert error while query is opened.
|
- Getting insert error while query is opened.
|
||||||
|
|
56
vendor/github.com/mattn/go-sqlite3/callback.go
generated
vendored
56
vendor/github.com/mattn/go-sqlite3/callback.go
generated
vendored
|
@ -35,56 +35,55 @@ import (
|
||||||
//export callbackTrampoline
|
//export callbackTrampoline
|
||||||
func callbackTrampoline(ctx *C.sqlite3_context, argc int, argv **C.sqlite3_value) {
|
func callbackTrampoline(ctx *C.sqlite3_context, argc int, argv **C.sqlite3_value) {
|
||||||
args := (*[(math.MaxInt32 - 1) / unsafe.Sizeof((*C.sqlite3_value)(nil))]*C.sqlite3_value)(unsafe.Pointer(argv))[:argc:argc]
|
args := (*[(math.MaxInt32 - 1) / unsafe.Sizeof((*C.sqlite3_value)(nil))]*C.sqlite3_value)(unsafe.Pointer(argv))[:argc:argc]
|
||||||
fi := lookupHandle(uintptr(C.sqlite3_user_data(ctx))).(*functionInfo)
|
fi := lookupHandle(C.sqlite3_user_data(ctx)).(*functionInfo)
|
||||||
fi.Call(ctx, args)
|
fi.Call(ctx, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
//export stepTrampoline
|
//export stepTrampoline
|
||||||
func stepTrampoline(ctx *C.sqlite3_context, argc C.int, argv **C.sqlite3_value) {
|
func stepTrampoline(ctx *C.sqlite3_context, argc C.int, argv **C.sqlite3_value) {
|
||||||
args := (*[(math.MaxInt32 - 1) / unsafe.Sizeof((*C.sqlite3_value)(nil))]*C.sqlite3_value)(unsafe.Pointer(argv))[:int(argc):int(argc)]
|
args := (*[(math.MaxInt32 - 1) / unsafe.Sizeof((*C.sqlite3_value)(nil))]*C.sqlite3_value)(unsafe.Pointer(argv))[:int(argc):int(argc)]
|
||||||
ai := lookupHandle(uintptr(C.sqlite3_user_data(ctx))).(*aggInfo)
|
ai := lookupHandle(C.sqlite3_user_data(ctx)).(*aggInfo)
|
||||||
ai.Step(ctx, args)
|
ai.Step(ctx, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
//export doneTrampoline
|
//export doneTrampoline
|
||||||
func doneTrampoline(ctx *C.sqlite3_context) {
|
func doneTrampoline(ctx *C.sqlite3_context) {
|
||||||
handle := uintptr(C.sqlite3_user_data(ctx))
|
ai := lookupHandle(C.sqlite3_user_data(ctx)).(*aggInfo)
|
||||||
ai := lookupHandle(handle).(*aggInfo)
|
|
||||||
ai.Done(ctx)
|
ai.Done(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
//export compareTrampoline
|
//export compareTrampoline
|
||||||
func compareTrampoline(handlePtr uintptr, la C.int, a *C.char, lb C.int, b *C.char) C.int {
|
func compareTrampoline(handlePtr unsafe.Pointer, la C.int, a *C.char, lb C.int, b *C.char) C.int {
|
||||||
cmp := lookupHandle(handlePtr).(func(string, string) int)
|
cmp := lookupHandle(handlePtr).(func(string, string) int)
|
||||||
return C.int(cmp(C.GoStringN(a, la), C.GoStringN(b, lb)))
|
return C.int(cmp(C.GoStringN(a, la), C.GoStringN(b, lb)))
|
||||||
}
|
}
|
||||||
|
|
||||||
//export commitHookTrampoline
|
//export commitHookTrampoline
|
||||||
func commitHookTrampoline(handle uintptr) int {
|
func commitHookTrampoline(handle unsafe.Pointer) int {
|
||||||
callback := lookupHandle(handle).(func() int)
|
callback := lookupHandle(handle).(func() int)
|
||||||
return callback()
|
return callback()
|
||||||
}
|
}
|
||||||
|
|
||||||
//export rollbackHookTrampoline
|
//export rollbackHookTrampoline
|
||||||
func rollbackHookTrampoline(handle uintptr) {
|
func rollbackHookTrampoline(handle unsafe.Pointer) {
|
||||||
callback := lookupHandle(handle).(func())
|
callback := lookupHandle(handle).(func())
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
|
|
||||||
//export updateHookTrampoline
|
//export updateHookTrampoline
|
||||||
func updateHookTrampoline(handle uintptr, op int, db *C.char, table *C.char, rowid int64) {
|
func updateHookTrampoline(handle unsafe.Pointer, op int, db *C.char, table *C.char, rowid int64) {
|
||||||
callback := lookupHandle(handle).(func(int, string, string, int64))
|
callback := lookupHandle(handle).(func(int, string, string, int64))
|
||||||
callback(op, C.GoString(db), C.GoString(table), rowid)
|
callback(op, C.GoString(db), C.GoString(table), rowid)
|
||||||
}
|
}
|
||||||
|
|
||||||
//export authorizerTrampoline
|
//export authorizerTrampoline
|
||||||
func authorizerTrampoline(handle uintptr, op int, arg1 *C.char, arg2 *C.char, arg3 *C.char) int {
|
func authorizerTrampoline(handle unsafe.Pointer, op int, arg1 *C.char, arg2 *C.char, arg3 *C.char) int {
|
||||||
callback := lookupHandle(handle).(func(int, string, string, string) int)
|
callback := lookupHandle(handle).(func(int, string, string, string) int)
|
||||||
return callback(op, C.GoString(arg1), C.GoString(arg2), C.GoString(arg3))
|
return callback(op, C.GoString(arg1), C.GoString(arg2), C.GoString(arg3))
|
||||||
}
|
}
|
||||||
|
|
||||||
//export preUpdateHookTrampoline
|
//export preUpdateHookTrampoline
|
||||||
func preUpdateHookTrampoline(handle uintptr, dbHandle uintptr, op int, db *C.char, table *C.char, oldrowid int64, newrowid int64) {
|
func preUpdateHookTrampoline(handle unsafe.Pointer, dbHandle uintptr, op int, db *C.char, table *C.char, oldrowid int64, newrowid int64) {
|
||||||
hval := lookupHandleVal(handle)
|
hval := lookupHandleVal(handle)
|
||||||
data := SQLitePreUpdateData{
|
data := SQLitePreUpdateData{
|
||||||
Conn: hval.db,
|
Conn: hval.db,
|
||||||
|
@ -105,33 +104,27 @@ type handleVal struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var handleLock sync.Mutex
|
var handleLock sync.Mutex
|
||||||
var handleVals = make(map[uintptr]handleVal)
|
var handleVals = make(map[unsafe.Pointer]handleVal)
|
||||||
var handleIndex uintptr = 100
|
|
||||||
|
|
||||||
func newHandle(db *SQLiteConn, v interface{}) uintptr {
|
func newHandle(db *SQLiteConn, v interface{}) unsafe.Pointer {
|
||||||
handleLock.Lock()
|
handleLock.Lock()
|
||||||
defer handleLock.Unlock()
|
defer handleLock.Unlock()
|
||||||
i := handleIndex
|
val := handleVal{db: db, val: v}
|
||||||
handleIndex++
|
var p unsafe.Pointer = C.malloc(C.size_t(1))
|
||||||
handleVals[i] = handleVal{db, v}
|
if p == nil {
|
||||||
return i
|
panic("can't allocate 'cgo-pointer hack index pointer': ptr == nil")
|
||||||
}
|
|
||||||
|
|
||||||
func lookupHandleVal(handle uintptr) handleVal {
|
|
||||||
handleLock.Lock()
|
|
||||||
defer handleLock.Unlock()
|
|
||||||
r, ok := handleVals[handle]
|
|
||||||
if !ok {
|
|
||||||
if handle >= 100 && handle < handleIndex {
|
|
||||||
panic("deleted handle")
|
|
||||||
} else {
|
|
||||||
panic("invalid handle")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return r
|
handleVals[p] = val
|
||||||
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func lookupHandle(handle uintptr) interface{} {
|
func lookupHandleVal(handle unsafe.Pointer) handleVal {
|
||||||
|
handleLock.Lock()
|
||||||
|
defer handleLock.Unlock()
|
||||||
|
return handleVals[handle]
|
||||||
|
}
|
||||||
|
|
||||||
|
func lookupHandle(handle unsafe.Pointer) interface{} {
|
||||||
return lookupHandleVal(handle).val
|
return lookupHandleVal(handle).val
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,6 +134,7 @@ func deleteHandles(db *SQLiteConn) {
|
||||||
for handle, val := range handleVals {
|
for handle, val := range handleVals {
|
||||||
if val.db == db {
|
if val.db == db {
|
||||||
delete(handleVals, handle)
|
delete(handleVals, handle)
|
||||||
|
C.free(handle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
35
vendor/github.com/mattn/go-sqlite3/doc.go
generated
vendored
35
vendor/github.com/mattn/go-sqlite3/doc.go
generated
vendored
|
@ -79,9 +79,8 @@ Then, you can use this extension.
|
||||||
|
|
||||||
Connection Hook
|
Connection Hook
|
||||||
|
|
||||||
You can hook and inject your code when the connection is established. database/sql
|
You can hook and inject your code when the connection is established by setting
|
||||||
doesn't provide a way to get native go-sqlite3 interfaces. So if you want,
|
ConnectHook to get the SQLiteConn.
|
||||||
you need to set ConnectHook and get the SQLiteConn.
|
|
||||||
|
|
||||||
sql.Register("sqlite3_with_hook_example",
|
sql.Register("sqlite3_with_hook_example",
|
||||||
&sqlite3.SQLiteDriver{
|
&sqlite3.SQLiteDriver{
|
||||||
|
@ -91,21 +90,45 @@ you need to set ConnectHook and get the SQLiteConn.
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
You can also use database/sql.Conn.Raw (Go >= 1.13):
|
||||||
|
|
||||||
|
conn, err := db.Conn(context.Background())
|
||||||
|
// if err != nil { ... }
|
||||||
|
defer conn.Close()
|
||||||
|
err = conn.Raw(func (driverConn interface{}) error {
|
||||||
|
sqliteConn := driverConn.(*sqlite3.SQLiteConn)
|
||||||
|
// ... use sqliteConn
|
||||||
|
})
|
||||||
|
// if err != nil { ... }
|
||||||
|
|
||||||
Go SQlite3 Extensions
|
Go SQlite3 Extensions
|
||||||
|
|
||||||
If you want to register Go functions as SQLite extension functions,
|
If you want to register Go functions as SQLite extension functions
|
||||||
call RegisterFunction from ConnectHook.
|
you can make a custom driver by calling RegisterFunction from
|
||||||
|
ConnectHook.
|
||||||
|
|
||||||
regex = func(re, s string) (bool, error) {
|
regex = func(re, s string) (bool, error) {
|
||||||
return regexp.MatchString(re, s)
|
return regexp.MatchString(re, s)
|
||||||
}
|
}
|
||||||
sql.Register("sqlite3_with_go_func",
|
sql.Register("sqlite3_extended",
|
||||||
&sqlite3.SQLiteDriver{
|
&sqlite3.SQLiteDriver{
|
||||||
ConnectHook: func(conn *sqlite3.SQLiteConn) error {
|
ConnectHook: func(conn *sqlite3.SQLiteConn) error {
|
||||||
return conn.RegisterFunc("regexp", regex, true)
|
return conn.RegisterFunc("regexp", regex, true)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
You can then use the custom driver by passing its name to sql.Open.
|
||||||
|
|
||||||
|
var i int
|
||||||
|
conn, err := sql.Open("sqlite3_extended", "./foo.db")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
err = db.QueryRow(`SELECT regexp("foo.*", "seafood")`).Scan(&i)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
See the documentation of RegisterFunc for more details.
|
See the documentation of RegisterFunc for more details.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
3
vendor/github.com/mattn/go-sqlite3/go.mod
generated
vendored
Normal file
3
vendor/github.com/mattn/go-sqlite3/go.mod
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module github.com/mattn/go-sqlite3
|
||||||
|
|
||||||
|
go 1.12
|
0
vendor/github.com/mattn/go-sqlite3/go.sum
generated
vendored
Normal file
0
vendor/github.com/mattn/go-sqlite3/go.sum
generated
vendored
Normal file
39872
vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c
generated
vendored
39872
vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c
generated
vendored
File diff suppressed because it is too large
Load diff
1837
vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h
generated
vendored
1837
vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h
generated
vendored
File diff suppressed because it is too large
Load diff
211
vendor/github.com/mattn/go-sqlite3/sqlite3.go
generated
vendored
211
vendor/github.com/mattn/go-sqlite3/sqlite3.go
generated
vendored
|
@ -15,10 +15,8 @@ package sqlite3
|
||||||
#cgo CFLAGS: -DHAVE_USLEEP=1
|
#cgo CFLAGS: -DHAVE_USLEEP=1
|
||||||
#cgo CFLAGS: -DSQLITE_ENABLE_FTS3
|
#cgo CFLAGS: -DSQLITE_ENABLE_FTS3
|
||||||
#cgo CFLAGS: -DSQLITE_ENABLE_FTS3_PARENTHESIS
|
#cgo CFLAGS: -DSQLITE_ENABLE_FTS3_PARENTHESIS
|
||||||
#cgo CFLAGS: -DSQLITE_ENABLE_FTS4_UNICODE61
|
|
||||||
#cgo CFLAGS: -DSQLITE_TRACE_SIZE_LIMIT=15
|
#cgo CFLAGS: -DSQLITE_TRACE_SIZE_LIMIT=15
|
||||||
#cgo CFLAGS: -DSQLITE_OMIT_DEPRECATED
|
#cgo CFLAGS: -DSQLITE_OMIT_DEPRECATED
|
||||||
#cgo CFLAGS: -DSQLITE_DISABLE_INTRINSIC
|
|
||||||
#cgo CFLAGS: -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1
|
#cgo CFLAGS: -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1
|
||||||
#cgo CFLAGS: -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT
|
#cgo CFLAGS: -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT
|
||||||
#cgo CFLAGS: -Wno-deprecated-declarations
|
#cgo CFLAGS: -Wno-deprecated-declarations
|
||||||
|
@ -473,7 +471,7 @@ func (c *SQLiteConn) RegisterCollation(name string, cmp func(string, string) int
|
||||||
handle := newHandle(c, cmp)
|
handle := newHandle(c, cmp)
|
||||||
cname := C.CString(name)
|
cname := C.CString(name)
|
||||||
defer C.free(unsafe.Pointer(cname))
|
defer C.free(unsafe.Pointer(cname))
|
||||||
rv := C.sqlite3_create_collation(c.db, cname, C.SQLITE_UTF8, unsafe.Pointer(handle), (*[0]byte)(unsafe.Pointer(C.compareTrampoline)))
|
rv := C.sqlite3_create_collation(c.db, cname, C.SQLITE_UTF8, handle, (*[0]byte)(unsafe.Pointer(C.compareTrampoline)))
|
||||||
if rv != C.SQLITE_OK {
|
if rv != C.SQLITE_OK {
|
||||||
return c.lastError()
|
return c.lastError()
|
||||||
}
|
}
|
||||||
|
@ -491,7 +489,7 @@ func (c *SQLiteConn) RegisterCommitHook(callback func() int) {
|
||||||
if callback == nil {
|
if callback == nil {
|
||||||
C.sqlite3_commit_hook(c.db, nil, nil)
|
C.sqlite3_commit_hook(c.db, nil, nil)
|
||||||
} else {
|
} else {
|
||||||
C.sqlite3_commit_hook(c.db, (*[0]byte)(C.commitHookTrampoline), unsafe.Pointer(newHandle(c, callback)))
|
C.sqlite3_commit_hook(c.db, (*[0]byte)(C.commitHookTrampoline), newHandle(c, callback))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -504,7 +502,7 @@ func (c *SQLiteConn) RegisterRollbackHook(callback func()) {
|
||||||
if callback == nil {
|
if callback == nil {
|
||||||
C.sqlite3_rollback_hook(c.db, nil, nil)
|
C.sqlite3_rollback_hook(c.db, nil, nil)
|
||||||
} else {
|
} else {
|
||||||
C.sqlite3_rollback_hook(c.db, (*[0]byte)(C.rollbackHookTrampoline), unsafe.Pointer(newHandle(c, callback)))
|
C.sqlite3_rollback_hook(c.db, (*[0]byte)(C.rollbackHookTrampoline), newHandle(c, callback))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,7 +519,7 @@ func (c *SQLiteConn) RegisterUpdateHook(callback func(int, string, string, int64
|
||||||
if callback == nil {
|
if callback == nil {
|
||||||
C.sqlite3_update_hook(c.db, nil, nil)
|
C.sqlite3_update_hook(c.db, nil, nil)
|
||||||
} else {
|
} else {
|
||||||
C.sqlite3_update_hook(c.db, (*[0]byte)(C.updateHookTrampoline), unsafe.Pointer(newHandle(c, callback)))
|
C.sqlite3_update_hook(c.db, (*[0]byte)(C.updateHookTrampoline), newHandle(c, callback))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -535,7 +533,7 @@ func (c *SQLiteConn) RegisterAuthorizer(callback func(int, string, string, strin
|
||||||
if callback == nil {
|
if callback == nil {
|
||||||
C.sqlite3_set_authorizer(c.db, nil, nil)
|
C.sqlite3_set_authorizer(c.db, nil, nil)
|
||||||
} else {
|
} else {
|
||||||
C.sqlite3_set_authorizer(c.db, (*[0]byte)(C.authorizerTrampoline), unsafe.Pointer(newHandle(c, callback)))
|
C.sqlite3_set_authorizer(c.db, (*[0]byte)(C.authorizerTrampoline), newHandle(c, callback))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -616,8 +614,8 @@ func (c *SQLiteConn) RegisterFunc(name string, impl interface{}, pure bool) erro
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func sqlite3CreateFunction(db *C.sqlite3, zFunctionName *C.char, nArg C.int, eTextRep C.int, pApp uintptr, xFunc unsafe.Pointer, xStep unsafe.Pointer, xFinal unsafe.Pointer) C.int {
|
func sqlite3CreateFunction(db *C.sqlite3, zFunctionName *C.char, nArg C.int, eTextRep C.int, pApp unsafe.Pointer, xFunc unsafe.Pointer, xStep unsafe.Pointer, xFinal unsafe.Pointer) C.int {
|
||||||
return C._sqlite3_create_function(db, zFunctionName, nArg, eTextRep, C.uintptr_t(pApp), (*[0]byte)(xFunc), (*[0]byte)(xStep), (*[0]byte)(xFinal))
|
return C._sqlite3_create_function(db, zFunctionName, nArg, eTextRep, C.uintptr_t(uintptr(pApp)), (*[0]byte)(xFunc), (*[0]byte)(xStep), (*[0]byte)(xFinal))
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterAggregator makes a Go type available as a SQLite aggregation function.
|
// RegisterAggregator makes a Go type available as a SQLite aggregation function.
|
||||||
|
@ -802,20 +800,29 @@ func (c *SQLiteConn) exec(ctx context.Context, query string, args []namedValue)
|
||||||
}
|
}
|
||||||
var res driver.Result
|
var res driver.Result
|
||||||
if s.(*SQLiteStmt).s != nil {
|
if s.(*SQLiteStmt).s != nil {
|
||||||
|
stmtArgs := make([]namedValue, 0, len(args))
|
||||||
na := s.NumInput()
|
na := s.NumInput()
|
||||||
if len(args) < na {
|
if len(args)-start < na {
|
||||||
s.Close()
|
s.Close()
|
||||||
return nil, fmt.Errorf("not enough args to execute query: want %d got %d", na, len(args))
|
return nil, fmt.Errorf("not enough args to execute query: want %d got %d", na, len(args))
|
||||||
}
|
}
|
||||||
for i := 0; i < na; i++ {
|
// consume the number of arguments used in the current
|
||||||
args[i].Ordinal -= start
|
// statement and append all named arguments not
|
||||||
|
// contained therein
|
||||||
|
stmtArgs = append(stmtArgs, args[start:start+na]...)
|
||||||
|
for i := range args {
|
||||||
|
if (i < start || i >= na) && args[i].Name != "" {
|
||||||
|
stmtArgs = append(stmtArgs, args[i])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res, err = s.(*SQLiteStmt).exec(ctx, args[:na])
|
for i := range stmtArgs {
|
||||||
|
stmtArgs[i].Ordinal = i + 1
|
||||||
|
}
|
||||||
|
res, err = s.(*SQLiteStmt).exec(ctx, stmtArgs)
|
||||||
if err != nil && err != driver.ErrSkip {
|
if err != nil && err != driver.ErrSkip {
|
||||||
s.Close()
|
s.Close()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
args = args[na:]
|
|
||||||
start += na
|
start += na
|
||||||
}
|
}
|
||||||
tail := s.(*SQLiteStmt).t
|
tail := s.(*SQLiteStmt).t
|
||||||
|
@ -848,24 +855,33 @@ func (c *SQLiteConn) Query(query string, args []driver.Value) (driver.Rows, erro
|
||||||
func (c *SQLiteConn) query(ctx context.Context, query string, args []namedValue) (driver.Rows, error) {
|
func (c *SQLiteConn) query(ctx context.Context, query string, args []namedValue) (driver.Rows, error) {
|
||||||
start := 0
|
start := 0
|
||||||
for {
|
for {
|
||||||
|
stmtArgs := make([]namedValue, 0, len(args))
|
||||||
s, err := c.prepare(ctx, query)
|
s, err := c.prepare(ctx, query)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
s.(*SQLiteStmt).cls = true
|
s.(*SQLiteStmt).cls = true
|
||||||
na := s.NumInput()
|
na := s.NumInput()
|
||||||
if len(args) < na {
|
if len(args)-start < na {
|
||||||
return nil, fmt.Errorf("not enough args to execute query: want %d got %d", na, len(args))
|
return nil, fmt.Errorf("not enough args to execute query: want %d got %d", na, len(args)-start)
|
||||||
}
|
}
|
||||||
for i := 0; i < na; i++ {
|
// consume the number of arguments used in the current
|
||||||
args[i].Ordinal -= start
|
// statement and append all named arguments not contained
|
||||||
|
// therein
|
||||||
|
stmtArgs = append(stmtArgs, args[start:start+na]...)
|
||||||
|
for i := range args {
|
||||||
|
if (i < start || i >= na) && args[i].Name != "" {
|
||||||
|
stmtArgs = append(stmtArgs, args[i])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rows, err := s.(*SQLiteStmt).query(ctx, args[:na])
|
for i := range stmtArgs {
|
||||||
|
stmtArgs[i].Ordinal = i + 1
|
||||||
|
}
|
||||||
|
rows, err := s.(*SQLiteStmt).query(ctx, stmtArgs)
|
||||||
if err != nil && err != driver.ErrSkip {
|
if err != nil && err != driver.ErrSkip {
|
||||||
s.Close()
|
s.Close()
|
||||||
return rows, err
|
return rows, err
|
||||||
}
|
}
|
||||||
args = args[na:]
|
|
||||||
start += na
|
start += na
|
||||||
tail := s.(*SQLiteStmt).t
|
tail := s.(*SQLiteStmt).t
|
||||||
if tail == "" {
|
if tail == "" {
|
||||||
|
@ -1023,6 +1039,8 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
||||||
secureDelete := "DEFAULT"
|
secureDelete := "DEFAULT"
|
||||||
synchronousMode := "NORMAL"
|
synchronousMode := "NORMAL"
|
||||||
writableSchema := -1
|
writableSchema := -1
|
||||||
|
vfsName := ""
|
||||||
|
var cacheSize *int64
|
||||||
|
|
||||||
pos := strings.IndexRune(dsn, '?')
|
pos := strings.IndexRune(dsn, '?')
|
||||||
if pos >= 1 {
|
if pos >= 1 {
|
||||||
|
@ -1346,6 +1364,22 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cache size (_cache_size)
|
||||||
|
//
|
||||||
|
// https://sqlite.org/pragma.html#pragma_cache_size
|
||||||
|
//
|
||||||
|
if val := params.Get("_cache_size"); val != "" {
|
||||||
|
iv, err := strconv.ParseInt(val, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Invalid _cache_size: %v: %v", val, err)
|
||||||
|
}
|
||||||
|
cacheSize = &iv
|
||||||
|
}
|
||||||
|
|
||||||
|
if val := params.Get("vfs"); val != "" {
|
||||||
|
vfsName = val
|
||||||
|
}
|
||||||
|
|
||||||
if !strings.HasPrefix(dsn, "file:") {
|
if !strings.HasPrefix(dsn, "file:") {
|
||||||
dsn = dsn[:pos]
|
dsn = dsn[:pos]
|
||||||
}
|
}
|
||||||
|
@ -1354,9 +1388,14 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
||||||
var db *C.sqlite3
|
var db *C.sqlite3
|
||||||
name := C.CString(dsn)
|
name := C.CString(dsn)
|
||||||
defer C.free(unsafe.Pointer(name))
|
defer C.free(unsafe.Pointer(name))
|
||||||
|
var vfs *C.char
|
||||||
|
if vfsName != "" {
|
||||||
|
vfs = C.CString(vfsName)
|
||||||
|
defer C.free(unsafe.Pointer(vfs))
|
||||||
|
}
|
||||||
rv := C._sqlite3_open_v2(name, &db,
|
rv := C._sqlite3_open_v2(name, &db,
|
||||||
mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
|
mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
|
||||||
nil)
|
vfs)
|
||||||
if rv != 0 {
|
if rv != 0 {
|
||||||
// Save off the error _before_ closing the database.
|
// Save off the error _before_ closing the database.
|
||||||
// This is safe even if db is nil.
|
// This is safe even if db is nil.
|
||||||
|
@ -1637,7 +1676,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
||||||
//
|
//
|
||||||
// Because default is NORMAL this statement is always executed
|
// Because default is NORMAL this statement is always executed
|
||||||
if err := exec(fmt.Sprintf("PRAGMA synchronous = %s;", synchronousMode)); err != nil {
|
if err := exec(fmt.Sprintf("PRAGMA synchronous = %s;", synchronousMode)); err != nil {
|
||||||
C.sqlite3_close_v2(db)
|
conn.Close()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1649,6 +1688,14 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cache Size
|
||||||
|
if cacheSize != nil {
|
||||||
|
if err := exec(fmt.Sprintf("PRAGMA cache_size = %d;", *cacheSize)); err != nil {
|
||||||
|
C.sqlite3_close_v2(db)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(d.Extensions) > 0 {
|
if len(d.Extensions) > 0 {
|
||||||
if err := conn.loadExtensions(d.Extensions); err != nil {
|
if err := conn.loadExtensions(d.Extensions); err != nil {
|
||||||
conn.Close()
|
conn.Close()
|
||||||
|
@ -1778,11 +1825,6 @@ func (s *SQLiteStmt) NumInput() int {
|
||||||
return int(C.sqlite3_bind_parameter_count(s.s))
|
return int(C.sqlite3_bind_parameter_count(s.s))
|
||||||
}
|
}
|
||||||
|
|
||||||
type bindArg struct {
|
|
||||||
n int
|
|
||||||
v driver.Value
|
|
||||||
}
|
|
||||||
|
|
||||||
var placeHolder = []byte{0}
|
var placeHolder = []byte{0}
|
||||||
|
|
||||||
func (s *SQLiteStmt) bind(args []namedValue) error {
|
func (s *SQLiteStmt) bind(args []namedValue) error {
|
||||||
|
@ -1791,52 +1833,63 @@ func (s *SQLiteStmt) bind(args []namedValue) error {
|
||||||
return s.c.lastError()
|
return s.c.lastError()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bindIndices := make([][3]int, len(args))
|
||||||
|
prefixes := []string{":", "@", "$"}
|
||||||
for i, v := range args {
|
for i, v := range args {
|
||||||
|
bindIndices[i][0] = args[i].Ordinal
|
||||||
if v.Name != "" {
|
if v.Name != "" {
|
||||||
cname := C.CString(":" + v.Name)
|
for j := range prefixes {
|
||||||
args[i].Ordinal = int(C.sqlite3_bind_parameter_index(s.s, cname))
|
cname := C.CString(prefixes[j] + v.Name)
|
||||||
C.free(unsafe.Pointer(cname))
|
bindIndices[i][j] = int(C.sqlite3_bind_parameter_index(s.s, cname))
|
||||||
|
C.free(unsafe.Pointer(cname))
|
||||||
|
}
|
||||||
|
args[i].Ordinal = bindIndices[i][0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, arg := range args {
|
for i, arg := range args {
|
||||||
n := C.int(arg.Ordinal)
|
for j := range bindIndices[i] {
|
||||||
switch v := arg.Value.(type) {
|
if bindIndices[i][j] == 0 {
|
||||||
case nil:
|
continue
|
||||||
rv = C.sqlite3_bind_null(s.s, n)
|
}
|
||||||
case string:
|
n := C.int(bindIndices[i][j])
|
||||||
if len(v) == 0 {
|
switch v := arg.Value.(type) {
|
||||||
rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&placeHolder[0])), C.int(0))
|
case nil:
|
||||||
} else {
|
rv = C.sqlite3_bind_null(s.s, n)
|
||||||
b := []byte(v)
|
case string:
|
||||||
|
if len(v) == 0 {
|
||||||
|
rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&placeHolder[0])), C.int(0))
|
||||||
|
} else {
|
||||||
|
b := []byte(v)
|
||||||
|
rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)))
|
||||||
|
}
|
||||||
|
case int64:
|
||||||
|
rv = C.sqlite3_bind_int64(s.s, n, C.sqlite3_int64(v))
|
||||||
|
case bool:
|
||||||
|
if v {
|
||||||
|
rv = C.sqlite3_bind_int(s.s, n, 1)
|
||||||
|
} else {
|
||||||
|
rv = C.sqlite3_bind_int(s.s, n, 0)
|
||||||
|
}
|
||||||
|
case float64:
|
||||||
|
rv = C.sqlite3_bind_double(s.s, n, C.double(v))
|
||||||
|
case []byte:
|
||||||
|
if v == nil {
|
||||||
|
rv = C.sqlite3_bind_null(s.s, n)
|
||||||
|
} else {
|
||||||
|
ln := len(v)
|
||||||
|
if ln == 0 {
|
||||||
|
v = placeHolder
|
||||||
|
}
|
||||||
|
rv = C._sqlite3_bind_blob(s.s, n, unsafe.Pointer(&v[0]), C.int(ln))
|
||||||
|
}
|
||||||
|
case time.Time:
|
||||||
|
b := []byte(v.Format(SQLiteTimestampFormats[0]))
|
||||||
rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)))
|
rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)))
|
||||||
}
|
}
|
||||||
case int64:
|
if rv != C.SQLITE_OK {
|
||||||
rv = C.sqlite3_bind_int64(s.s, n, C.sqlite3_int64(v))
|
return s.c.lastError()
|
||||||
case bool:
|
|
||||||
if v {
|
|
||||||
rv = C.sqlite3_bind_int(s.s, n, 1)
|
|
||||||
} else {
|
|
||||||
rv = C.sqlite3_bind_int(s.s, n, 0)
|
|
||||||
}
|
}
|
||||||
case float64:
|
|
||||||
rv = C.sqlite3_bind_double(s.s, n, C.double(v))
|
|
||||||
case []byte:
|
|
||||||
if v == nil {
|
|
||||||
rv = C.sqlite3_bind_null(s.s, n)
|
|
||||||
} else {
|
|
||||||
ln := len(v)
|
|
||||||
if ln == 0 {
|
|
||||||
v = placeHolder
|
|
||||||
}
|
|
||||||
rv = C._sqlite3_bind_blob(s.s, n, unsafe.Pointer(&v[0]), C.int(ln))
|
|
||||||
}
|
|
||||||
case time.Time:
|
|
||||||
b := []byte(v.Format(SQLiteTimestampFormats[0]))
|
|
||||||
rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)))
|
|
||||||
}
|
|
||||||
if rv != C.SQLITE_OK {
|
|
||||||
return s.c.lastError()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -1894,6 +1947,14 @@ func (s *SQLiteStmt) Exec(args []driver.Value) (driver.Result, error) {
|
||||||
return s.exec(context.Background(), list)
|
return s.exec(context.Background(), list)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isInterruptErr(err error) bool {
|
||||||
|
sqliteErr, ok := err.(Error)
|
||||||
|
if ok {
|
||||||
|
return sqliteErr.Code == ErrInterrupt
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// exec executes a query that doesn't return rows. Attempts to honor context timeout.
|
// exec executes a query that doesn't return rows. Attempts to honor context timeout.
|
||||||
func (s *SQLiteStmt) exec(ctx context.Context, args []namedValue) (driver.Result, error) {
|
func (s *SQLiteStmt) exec(ctx context.Context, args []namedValue) (driver.Result, error) {
|
||||||
if ctx.Done() == nil {
|
if ctx.Done() == nil {
|
||||||
|
@ -1909,19 +1970,22 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []namedValue) (driver.Result
|
||||||
r, err := s.execSync(args)
|
r, err := s.execSync(args)
|
||||||
resultCh <- result{r, err}
|
resultCh <- result{r, err}
|
||||||
}()
|
}()
|
||||||
|
var rv result
|
||||||
select {
|
select {
|
||||||
case rv := <-resultCh:
|
case rv = <-resultCh:
|
||||||
return rv.r, rv.err
|
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
select {
|
select {
|
||||||
case <-resultCh: // no need to interrupt
|
case rv = <-resultCh: // no need to interrupt, operation completed in db
|
||||||
default:
|
default:
|
||||||
// this is still racy and can be no-op if executed between sqlite3_* calls in execSync.
|
// this is still racy and can be no-op if executed between sqlite3_* calls in execSync.
|
||||||
C.sqlite3_interrupt(s.c.db)
|
C.sqlite3_interrupt(s.c.db)
|
||||||
<-resultCh // ensure goroutine completed
|
rv = <-resultCh // wait for goroutine completed
|
||||||
|
if isInterruptErr(rv.err) {
|
||||||
|
return nil, ctx.Err()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil, ctx.Err()
|
|
||||||
}
|
}
|
||||||
|
return rv.r, rv.err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SQLiteStmt) execSync(args []namedValue) (driver.Result, error) {
|
func (s *SQLiteStmt) execSync(args []namedValue) (driver.Result, error) {
|
||||||
|
@ -1943,6 +2007,13 @@ func (s *SQLiteStmt) execSync(args []namedValue) (driver.Result, error) {
|
||||||
return &SQLiteResult{id: int64(rowid), changes: int64(changes)}, nil
|
return &SQLiteResult{id: int64(rowid), changes: int64(changes)}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Readonly reports if this statement is considered readonly by SQLite.
|
||||||
|
//
|
||||||
|
// See: https://sqlite.org/c3ref/stmt_readonly.html
|
||||||
|
func (s *SQLiteStmt) Readonly() bool {
|
||||||
|
return C.sqlite3_stmt_readonly(s.s) == 1
|
||||||
|
}
|
||||||
|
|
||||||
// Close the rows.
|
// Close the rows.
|
||||||
func (rc *SQLiteRows) Close() error {
|
func (rc *SQLiteRows) Close() error {
|
||||||
rc.s.mu.Lock()
|
rc.s.mu.Lock()
|
||||||
|
|
1
vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go
generated
vendored
1
vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go
generated
vendored
|
@ -14,5 +14,6 @@ package sqlite3
|
||||||
#cgo darwin CFLAGS: -I/usr/local/opt/sqlite/include
|
#cgo darwin CFLAGS: -I/usr/local/opt/sqlite/include
|
||||||
#cgo openbsd LDFLAGS: -lsqlite3
|
#cgo openbsd LDFLAGS: -lsqlite3
|
||||||
#cgo solaris LDFLAGS: -lsqlite3
|
#cgo solaris LDFLAGS: -lsqlite3
|
||||||
|
#cgo windows LDFLAGS: -lsqlite3
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
|
|
40
vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension.go
generated
vendored
40
vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension.go
generated
vendored
|
@ -28,12 +28,9 @@ func (c *SQLiteConn) loadExtensions(extensions []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, extension := range extensions {
|
for _, extension := range extensions {
|
||||||
cext := C.CString(extension)
|
if err := c.loadExtension(extension, nil); err != nil {
|
||||||
defer C.free(unsafe.Pointer(cext))
|
|
||||||
rv = C.sqlite3_load_extension(c.db, cext, nil, nil)
|
|
||||||
if rv != C.SQLITE_OK {
|
|
||||||
C.sqlite3_enable_load_extension(c.db, 0)
|
C.sqlite3_enable_load_extension(c.db, 0)
|
||||||
return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +38,7 @@ func (c *SQLiteConn) loadExtensions(extensions []string) error {
|
||||||
if rv != C.SQLITE_OK {
|
if rv != C.SQLITE_OK {
|
||||||
return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
|
return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,14 +49,9 @@ func (c *SQLiteConn) LoadExtension(lib string, entry string) error {
|
||||||
return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
|
return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
|
||||||
}
|
}
|
||||||
|
|
||||||
clib := C.CString(lib)
|
if err := c.loadExtension(lib, &entry); err != nil {
|
||||||
defer C.free(unsafe.Pointer(clib))
|
C.sqlite3_enable_load_extension(c.db, 0)
|
||||||
centry := C.CString(entry)
|
return err
|
||||||
defer C.free(unsafe.Pointer(centry))
|
|
||||||
|
|
||||||
rv = C.sqlite3_load_extension(c.db, clib, centry, nil)
|
|
||||||
if rv != C.SQLITE_OK {
|
|
||||||
return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = C.sqlite3_enable_load_extension(c.db, 0)
|
rv = C.sqlite3_enable_load_extension(c.db, 0)
|
||||||
|
@ -68,3 +61,24 @@ func (c *SQLiteConn) LoadExtension(lib string, entry string) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *SQLiteConn) loadExtension(lib string, entry *string) error {
|
||||||
|
clib := C.CString(lib)
|
||||||
|
defer C.free(unsafe.Pointer(clib))
|
||||||
|
|
||||||
|
var centry *C.char
|
||||||
|
if entry != nil {
|
||||||
|
centry = C.CString(*entry)
|
||||||
|
defer C.free(unsafe.Pointer(centry))
|
||||||
|
}
|
||||||
|
|
||||||
|
var errMsg *C.char
|
||||||
|
defer C.sqlite3_free(unsafe.Pointer(errMsg))
|
||||||
|
|
||||||
|
rv := C.sqlite3_load_extension(c.db, clib, centry, &errMsg)
|
||||||
|
if rv != C.SQLITE_OK {
|
||||||
|
return errors.New(C.GoString(errMsg))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
21
vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go
generated
vendored
Normal file
21
vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
// +build sqlite_column_metadata
|
||||||
|
|
||||||
|
package sqlite3
|
||||||
|
|
||||||
|
/*
|
||||||
|
#ifndef USE_LIBSQLITE3
|
||||||
|
#cgo CFLAGS: -DSQLITE_ENABLE_COLUMN_METADATA
|
||||||
|
#include <sqlite3-binding.h>
|
||||||
|
#else
|
||||||
|
#include <sqlite3.h>
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
// ColumnTableName returns the table that is the origin of a particular result
|
||||||
|
// column in a SELECT statement.
|
||||||
|
//
|
||||||
|
// See https://www.sqlite.org/c3ref/column_database_name.html
|
||||||
|
func (s *SQLiteStmt) ColumnTableName(n int) string {
|
||||||
|
return C.GoString(C.sqlite3_column_table_name(s.s, C.int(n)))
|
||||||
|
}
|
115
vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vtable.go
generated
vendored
115
vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vtable.go
generated
vendored
|
@ -226,11 +226,43 @@ static sqlite3_module goModule = {
|
||||||
0 // xRollbackTo
|
0 // xRollbackTo
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// See https://sqlite.org/vtab.html#eponymous_only_virtual_tables
|
||||||
|
static sqlite3_module goModuleEponymousOnly = {
|
||||||
|
0, // iVersion
|
||||||
|
0, // xCreate - create a table, which here is null
|
||||||
|
cXConnect, // xConnect - connect to an existing table
|
||||||
|
cXBestIndex, // xBestIndex - Determine search strategy
|
||||||
|
cXDisconnect, // xDisconnect - Disconnect from a table
|
||||||
|
cXDestroy, // xDestroy - Drop a table
|
||||||
|
cXOpen, // xOpen - open a cursor
|
||||||
|
cXClose, // xClose - close a cursor
|
||||||
|
cXFilter, // xFilter - configure scan constraints
|
||||||
|
cXNext, // xNext - advance a cursor
|
||||||
|
cXEof, // xEof
|
||||||
|
cXColumn, // xColumn - read data
|
||||||
|
cXRowid, // xRowid - read data
|
||||||
|
cXUpdate, // xUpdate - write data
|
||||||
|
// Not implemented
|
||||||
|
0, // xBegin - begin transaction
|
||||||
|
0, // xSync - sync transaction
|
||||||
|
0, // xCommit - commit transaction
|
||||||
|
0, // xRollback - rollback transaction
|
||||||
|
0, // xFindFunction - function overloading
|
||||||
|
0, // xRename - rename the table
|
||||||
|
0, // xSavepoint
|
||||||
|
0, // xRelease
|
||||||
|
0 // xRollbackTo
|
||||||
|
};
|
||||||
|
|
||||||
void goMDestroy(void*);
|
void goMDestroy(void*);
|
||||||
|
|
||||||
static int _sqlite3_create_module(sqlite3 *db, const char *zName, uintptr_t pClientData) {
|
static int _sqlite3_create_module(sqlite3 *db, const char *zName, uintptr_t pClientData) {
|
||||||
return sqlite3_create_module_v2(db, zName, &goModule, (void*) pClientData, goMDestroy);
|
return sqlite3_create_module_v2(db, zName, &goModule, (void*) pClientData, goMDestroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _sqlite3_create_module_eponymous_only(sqlite3 *db, const char *zName, uintptr_t pClientData) {
|
||||||
|
return sqlite3_create_module_v2(db, zName, &goModuleEponymousOnly, (void*) pClientData, goMDestroy);
|
||||||
|
}
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
|
@ -288,10 +320,13 @@ type InfoOrderBy struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func constraints(info *C.sqlite3_index_info) []InfoConstraint {
|
func constraints(info *C.sqlite3_index_info) []InfoConstraint {
|
||||||
l := info.nConstraint
|
slice := *(*[]C.struct_sqlite3_index_constraint)(unsafe.Pointer(&reflect.SliceHeader{
|
||||||
slice := (*[1 << 30]C.struct_sqlite3_index_constraint)(unsafe.Pointer(info.aConstraint))[:l:l]
|
Data: uintptr(unsafe.Pointer(info.aConstraint)),
|
||||||
|
Len: int(info.nConstraint),
|
||||||
|
Cap: int(info.nConstraint),
|
||||||
|
}))
|
||||||
|
|
||||||
cst := make([]InfoConstraint, 0, l)
|
cst := make([]InfoConstraint, 0, len(slice))
|
||||||
for _, c := range slice {
|
for _, c := range slice {
|
||||||
var usable bool
|
var usable bool
|
||||||
if c.usable > 0 {
|
if c.usable > 0 {
|
||||||
|
@ -307,10 +342,13 @@ func constraints(info *C.sqlite3_index_info) []InfoConstraint {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orderBys(info *C.sqlite3_index_info) []InfoOrderBy {
|
func orderBys(info *C.sqlite3_index_info) []InfoOrderBy {
|
||||||
l := info.nOrderBy
|
slice := *(*[]C.struct_sqlite3_index_orderby)(unsafe.Pointer(&reflect.SliceHeader{
|
||||||
slice := (*[1 << 30]C.struct_sqlite3_index_orderby)(unsafe.Pointer(info.aOrderBy))[:l:l]
|
Data: uintptr(unsafe.Pointer(info.aOrderBy)),
|
||||||
|
Len: int(info.nOrderBy),
|
||||||
|
Cap: int(info.nOrderBy),
|
||||||
|
}))
|
||||||
|
|
||||||
ob := make([]InfoOrderBy, 0, l)
|
ob := make([]InfoOrderBy, 0, len(slice))
|
||||||
for _, c := range slice {
|
for _, c := range slice {
|
||||||
var desc bool
|
var desc bool
|
||||||
if c.desc > 0 {
|
if c.desc > 0 {
|
||||||
|
@ -347,7 +385,7 @@ func mPrintf(format, arg string) *C.char {
|
||||||
|
|
||||||
//export goMInit
|
//export goMInit
|
||||||
func goMInit(db, pClientData unsafe.Pointer, argc C.int, argv **C.char, pzErr **C.char, isCreate C.int) C.uintptr_t {
|
func goMInit(db, pClientData unsafe.Pointer, argc C.int, argv **C.char, pzErr **C.char, isCreate C.int) C.uintptr_t {
|
||||||
m := lookupHandle(uintptr(pClientData)).(*sqliteModule)
|
m := lookupHandle(pClientData).(*sqliteModule)
|
||||||
if m.c.db != (*C.sqlite3)(db) {
|
if m.c.db != (*C.sqlite3)(db) {
|
||||||
*pzErr = mPrintf("%s", "Inconsistent db handles")
|
*pzErr = mPrintf("%s", "Inconsistent db handles")
|
||||||
return 0
|
return 0
|
||||||
|
@ -373,12 +411,12 @@ func goMInit(db, pClientData unsafe.Pointer, argc C.int, argv **C.char, pzErr **
|
||||||
}
|
}
|
||||||
vt := sqliteVTab{m, vTab}
|
vt := sqliteVTab{m, vTab}
|
||||||
*pzErr = nil
|
*pzErr = nil
|
||||||
return C.uintptr_t(newHandle(m.c, &vt))
|
return C.uintptr_t(uintptr(newHandle(m.c, &vt)))
|
||||||
}
|
}
|
||||||
|
|
||||||
//export goVRelease
|
//export goVRelease
|
||||||
func goVRelease(pVTab unsafe.Pointer, isDestroy C.int) *C.char {
|
func goVRelease(pVTab unsafe.Pointer, isDestroy C.int) *C.char {
|
||||||
vt := lookupHandle(uintptr(pVTab)).(*sqliteVTab)
|
vt := lookupHandle(pVTab).(*sqliteVTab)
|
||||||
var err error
|
var err error
|
||||||
if isDestroy == 1 {
|
if isDestroy == 1 {
|
||||||
err = vt.vTab.Destroy()
|
err = vt.vTab.Destroy()
|
||||||
|
@ -393,7 +431,7 @@ func goVRelease(pVTab unsafe.Pointer, isDestroy C.int) *C.char {
|
||||||
|
|
||||||
//export goVOpen
|
//export goVOpen
|
||||||
func goVOpen(pVTab unsafe.Pointer, pzErr **C.char) C.uintptr_t {
|
func goVOpen(pVTab unsafe.Pointer, pzErr **C.char) C.uintptr_t {
|
||||||
vt := lookupHandle(uintptr(pVTab)).(*sqliteVTab)
|
vt := lookupHandle(pVTab).(*sqliteVTab)
|
||||||
vTabCursor, err := vt.vTab.Open()
|
vTabCursor, err := vt.vTab.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
*pzErr = mPrintf("%s", err.Error())
|
*pzErr = mPrintf("%s", err.Error())
|
||||||
|
@ -401,12 +439,12 @@ func goVOpen(pVTab unsafe.Pointer, pzErr **C.char) C.uintptr_t {
|
||||||
}
|
}
|
||||||
vtc := sqliteVTabCursor{vt, vTabCursor}
|
vtc := sqliteVTabCursor{vt, vTabCursor}
|
||||||
*pzErr = nil
|
*pzErr = nil
|
||||||
return C.uintptr_t(newHandle(vt.module.c, &vtc))
|
return C.uintptr_t(uintptr(newHandle(vt.module.c, &vtc)))
|
||||||
}
|
}
|
||||||
|
|
||||||
//export goVBestIndex
|
//export goVBestIndex
|
||||||
func goVBestIndex(pVTab unsafe.Pointer, icp unsafe.Pointer) *C.char {
|
func goVBestIndex(pVTab unsafe.Pointer, icp unsafe.Pointer) *C.char {
|
||||||
vt := lookupHandle(uintptr(pVTab)).(*sqliteVTab)
|
vt := lookupHandle(pVTab).(*sqliteVTab)
|
||||||
info := (*C.sqlite3_index_info)(icp)
|
info := (*C.sqlite3_index_info)(icp)
|
||||||
csts := constraints(info)
|
csts := constraints(info)
|
||||||
res, err := vt.vTab.BestIndex(csts, orderBys(info))
|
res, err := vt.vTab.BestIndex(csts, orderBys(info))
|
||||||
|
@ -418,13 +456,17 @@ func goVBestIndex(pVTab unsafe.Pointer, icp unsafe.Pointer) *C.char {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a pointer to constraint_usage struct so we can update in place.
|
// Get a pointer to constraint_usage struct so we can update in place.
|
||||||
l := info.nConstraint
|
|
||||||
s := (*[1 << 30]C.struct_sqlite3_index_constraint_usage)(unsafe.Pointer(info.aConstraintUsage))[:l:l]
|
slice := *(*[]C.struct_sqlite3_index_constraint_usage)(unsafe.Pointer(&reflect.SliceHeader{
|
||||||
|
Data: uintptr(unsafe.Pointer(info.aConstraintUsage)),
|
||||||
|
Len: int(info.nConstraint),
|
||||||
|
Cap: int(info.nConstraint),
|
||||||
|
}))
|
||||||
index := 1
|
index := 1
|
||||||
for i := C.int(0); i < info.nConstraint; i++ {
|
for i := range slice {
|
||||||
if res.Used[i] {
|
if res.Used[i] {
|
||||||
s[i].argvIndex = C.int(index)
|
slice[i].argvIndex = C.int(index)
|
||||||
s[i].omit = C.uchar(1)
|
slice[i].omit = C.uchar(1)
|
||||||
index++
|
index++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -445,7 +487,7 @@ func goVBestIndex(pVTab unsafe.Pointer, icp unsafe.Pointer) *C.char {
|
||||||
|
|
||||||
//export goVClose
|
//export goVClose
|
||||||
func goVClose(pCursor unsafe.Pointer) *C.char {
|
func goVClose(pCursor unsafe.Pointer) *C.char {
|
||||||
vtc := lookupHandle(uintptr(pCursor)).(*sqliteVTabCursor)
|
vtc := lookupHandle(pCursor).(*sqliteVTabCursor)
|
||||||
err := vtc.vTabCursor.Close()
|
err := vtc.vTabCursor.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mPrintf("%s", err.Error())
|
return mPrintf("%s", err.Error())
|
||||||
|
@ -455,13 +497,13 @@ func goVClose(pCursor unsafe.Pointer) *C.char {
|
||||||
|
|
||||||
//export goMDestroy
|
//export goMDestroy
|
||||||
func goMDestroy(pClientData unsafe.Pointer) {
|
func goMDestroy(pClientData unsafe.Pointer) {
|
||||||
m := lookupHandle(uintptr(pClientData)).(*sqliteModule)
|
m := lookupHandle(pClientData).(*sqliteModule)
|
||||||
m.module.DestroyModule()
|
m.module.DestroyModule()
|
||||||
}
|
}
|
||||||
|
|
||||||
//export goVFilter
|
//export goVFilter
|
||||||
func goVFilter(pCursor unsafe.Pointer, idxNum C.int, idxName *C.char, argc C.int, argv **C.sqlite3_value) *C.char {
|
func goVFilter(pCursor unsafe.Pointer, idxNum C.int, idxName *C.char, argc C.int, argv **C.sqlite3_value) *C.char {
|
||||||
vtc := lookupHandle(uintptr(pCursor)).(*sqliteVTabCursor)
|
vtc := lookupHandle(pCursor).(*sqliteVTabCursor)
|
||||||
args := (*[(math.MaxInt32 - 1) / unsafe.Sizeof((*C.sqlite3_value)(nil))]*C.sqlite3_value)(unsafe.Pointer(argv))[:argc:argc]
|
args := (*[(math.MaxInt32 - 1) / unsafe.Sizeof((*C.sqlite3_value)(nil))]*C.sqlite3_value)(unsafe.Pointer(argv))[:argc:argc]
|
||||||
vals := make([]interface{}, 0, argc)
|
vals := make([]interface{}, 0, argc)
|
||||||
for _, v := range args {
|
for _, v := range args {
|
||||||
|
@ -480,7 +522,7 @@ func goVFilter(pCursor unsafe.Pointer, idxNum C.int, idxName *C.char, argc C.int
|
||||||
|
|
||||||
//export goVNext
|
//export goVNext
|
||||||
func goVNext(pCursor unsafe.Pointer) *C.char {
|
func goVNext(pCursor unsafe.Pointer) *C.char {
|
||||||
vtc := lookupHandle(uintptr(pCursor)).(*sqliteVTabCursor)
|
vtc := lookupHandle(pCursor).(*sqliteVTabCursor)
|
||||||
err := vtc.vTabCursor.Next()
|
err := vtc.vTabCursor.Next()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mPrintf("%s", err.Error())
|
return mPrintf("%s", err.Error())
|
||||||
|
@ -490,7 +532,7 @@ func goVNext(pCursor unsafe.Pointer) *C.char {
|
||||||
|
|
||||||
//export goVEof
|
//export goVEof
|
||||||
func goVEof(pCursor unsafe.Pointer) C.int {
|
func goVEof(pCursor unsafe.Pointer) C.int {
|
||||||
vtc := lookupHandle(uintptr(pCursor)).(*sqliteVTabCursor)
|
vtc := lookupHandle(pCursor).(*sqliteVTabCursor)
|
||||||
err := vtc.vTabCursor.EOF()
|
err := vtc.vTabCursor.EOF()
|
||||||
if err {
|
if err {
|
||||||
return 1
|
return 1
|
||||||
|
@ -500,7 +542,7 @@ func goVEof(pCursor unsafe.Pointer) C.int {
|
||||||
|
|
||||||
//export goVColumn
|
//export goVColumn
|
||||||
func goVColumn(pCursor, cp unsafe.Pointer, col C.int) *C.char {
|
func goVColumn(pCursor, cp unsafe.Pointer, col C.int) *C.char {
|
||||||
vtc := lookupHandle(uintptr(pCursor)).(*sqliteVTabCursor)
|
vtc := lookupHandle(pCursor).(*sqliteVTabCursor)
|
||||||
c := (*SQLiteContext)(cp)
|
c := (*SQLiteContext)(cp)
|
||||||
err := vtc.vTabCursor.Column(c, int(col))
|
err := vtc.vTabCursor.Column(c, int(col))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -511,7 +553,7 @@ func goVColumn(pCursor, cp unsafe.Pointer, col C.int) *C.char {
|
||||||
|
|
||||||
//export goVRowid
|
//export goVRowid
|
||||||
func goVRowid(pCursor unsafe.Pointer, pRowid *C.sqlite3_int64) *C.char {
|
func goVRowid(pCursor unsafe.Pointer, pRowid *C.sqlite3_int64) *C.char {
|
||||||
vtc := lookupHandle(uintptr(pCursor)).(*sqliteVTabCursor)
|
vtc := lookupHandle(pCursor).(*sqliteVTabCursor)
|
||||||
rowid, err := vtc.vTabCursor.Rowid()
|
rowid, err := vtc.vTabCursor.Rowid()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mPrintf("%s", err.Error())
|
return mPrintf("%s", err.Error())
|
||||||
|
@ -522,7 +564,7 @@ func goVRowid(pCursor unsafe.Pointer, pRowid *C.sqlite3_int64) *C.char {
|
||||||
|
|
||||||
//export goVUpdate
|
//export goVUpdate
|
||||||
func goVUpdate(pVTab unsafe.Pointer, argc C.int, argv **C.sqlite3_value, pRowid *C.sqlite3_int64) *C.char {
|
func goVUpdate(pVTab unsafe.Pointer, argc C.int, argv **C.sqlite3_value, pRowid *C.sqlite3_int64) *C.char {
|
||||||
vt := lookupHandle(uintptr(pVTab)).(*sqliteVTab)
|
vt := lookupHandle(pVTab).(*sqliteVTab)
|
||||||
|
|
||||||
var tname string
|
var tname string
|
||||||
if n, ok := vt.vTab.(interface {
|
if n, ok := vt.vTab.(interface {
|
||||||
|
@ -585,6 +627,13 @@ type Module interface {
|
||||||
DestroyModule()
|
DestroyModule()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EponymousOnlyModule is a "virtual table module" (as above), but
|
||||||
|
// for defining "eponymous only" virtual tables See: https://sqlite.org/vtab.html#eponymous_only_virtual_tables
|
||||||
|
type EponymousOnlyModule interface {
|
||||||
|
Module
|
||||||
|
EponymousOnlyModule()
|
||||||
|
}
|
||||||
|
|
||||||
// VTab describes a particular instance of the virtual table.
|
// VTab describes a particular instance of the virtual table.
|
||||||
// See: http://sqlite.org/c3ref/vtab.html
|
// See: http://sqlite.org/c3ref/vtab.html
|
||||||
type VTab interface {
|
type VTab interface {
|
||||||
|
@ -642,9 +691,19 @@ func (c *SQLiteConn) CreateModule(moduleName string, module Module) error {
|
||||||
mname := C.CString(moduleName)
|
mname := C.CString(moduleName)
|
||||||
defer C.free(unsafe.Pointer(mname))
|
defer C.free(unsafe.Pointer(mname))
|
||||||
udm := sqliteModule{c, moduleName, module}
|
udm := sqliteModule{c, moduleName, module}
|
||||||
rv := C._sqlite3_create_module(c.db, mname, C.uintptr_t(newHandle(c, &udm)))
|
switch module.(type) {
|
||||||
if rv != C.SQLITE_OK {
|
case EponymousOnlyModule:
|
||||||
return c.lastError()
|
rv := C._sqlite3_create_module_eponymous_only(c.db, mname, C.uintptr_t(uintptr(newHandle(c, &udm))))
|
||||||
|
if rv != C.SQLITE_OK {
|
||||||
|
return c.lastError()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
case Module:
|
||||||
|
rv := C._sqlite3_create_module(c.db, mname, C.uintptr_t(uintptr(newHandle(c, &udm))))
|
||||||
|
if rv != C.SQLITE_OK {
|
||||||
|
return c.lastError()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
2
vendor/github.com/mattn/go-sqlite3/sqlite3_trace.go
generated
vendored
2
vendor/github.com/mattn/go-sqlite3/sqlite3_trace.go
generated
vendored
|
@ -215,7 +215,6 @@ func addTraceMapping(connHandle uintptr, traceConf TraceConfig) {
|
||||||
traceConf, connHandle, oldEntryCopy.config))
|
traceConf, connHandle, oldEntryCopy.config))
|
||||||
}
|
}
|
||||||
traceMap[connHandle] = traceMapEntry{config: traceConf}
|
traceMap[connHandle] = traceMapEntry{config: traceConf}
|
||||||
fmt.Printf("Added trace config %v: handle 0x%x.\n", traceConf, connHandle)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func lookupTraceMapping(connHandle uintptr) (TraceConfig, bool) {
|
func lookupTraceMapping(connHandle uintptr) (TraceConfig, bool) {
|
||||||
|
@ -234,7 +233,6 @@ func popTraceMapping(connHandle uintptr) (TraceConfig, bool) {
|
||||||
entryCopy, found := traceMap[connHandle]
|
entryCopy, found := traceMap[connHandle]
|
||||||
if found {
|
if found {
|
||||||
delete(traceMap, connHandle)
|
delete(traceMap, connHandle)
|
||||||
fmt.Printf("Pop handle 0x%x: deleted trace config %v.\n", connHandle, entryCopy.config)
|
|
||||||
}
|
}
|
||||||
return entryCopy.config, found
|
return entryCopy.config, found
|
||||||
}
|
}
|
||||||
|
|
4
vendor/github.com/mattn/go-sqlite3/sqlite3_type.go
generated
vendored
4
vendor/github.com/mattn/go-sqlite3/sqlite3_type.go
generated
vendored
|
@ -31,12 +31,12 @@ func (rc *SQLiteRows) ColumnTypeLength(index int) (length int64, ok bool) {
|
||||||
func (rc *SQLiteRows) ColumnTypePrecisionScale(index int) (precision, scale int64, ok bool) {
|
func (rc *SQLiteRows) ColumnTypePrecisionScale(index int) (precision, scale int64, ok bool) {
|
||||||
return 0, 0, false
|
return 0, 0, false
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
// ColumnTypeNullable implement RowsColumnTypeNullable.
|
// ColumnTypeNullable implement RowsColumnTypeNullable.
|
||||||
func (rc *SQLiteRows) ColumnTypeNullable(i int) (nullable, ok bool) {
|
func (rc *SQLiteRows) ColumnTypeNullable(i int) (nullable, ok bool) {
|
||||||
return true, true
|
return false, false
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// ColumnTypeScanType implement RowsColumnTypeScanType.
|
// ColumnTypeScanType implement RowsColumnTypeScanType.
|
||||||
func (rc *SQLiteRows) ColumnTypeScanType(i int) reflect.Type {
|
func (rc *SQLiteRows) ColumnTypeScanType(i int) reflect.Type {
|
||||||
|
|
4
vendor/github.com/mattn/go-sqlite3/sqlite3_usleep_windows.go
generated
vendored
4
vendor/github.com/mattn/go-sqlite3/sqlite3_usleep_windows.go
generated
vendored
|
@ -15,7 +15,9 @@ package sqlite3
|
||||||
// This code should improve performance on windows because
|
// This code should improve performance on windows because
|
||||||
// without the presence of usleep SQLite waits 1 second.
|
// without the presence of usleep SQLite waits 1 second.
|
||||||
//
|
//
|
||||||
// Source: https://stackoverflow.com/questions/5801813/c-usleep-is-obsolete-workarounds-for-windows-mingw?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
|
// Source: https://github.com/php/php-src/blob/PHP-5.0/win32/time.c
|
||||||
|
// License: https://github.com/php/php-src/blob/PHP-5.0/LICENSE
|
||||||
|
// Details: https://stackoverflow.com/questions/5801813/c-usleep-is-obsolete-workarounds-for-windows-mingw?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
17
vendor/github.com/mattn/go-sqlite3/sqlite3ext.h
generated
vendored
17
vendor/github.com/mattn/go-sqlite3/sqlite3ext.h
generated
vendored
|
@ -19,6 +19,10 @@
|
||||||
#ifndef SQLITE3EXT_H
|
#ifndef SQLITE3EXT_H
|
||||||
#define SQLITE3EXT_H
|
#define SQLITE3EXT_H
|
||||||
#include "sqlite3-binding.h"
|
#include "sqlite3-binding.h"
|
||||||
|
#ifdef __clang__
|
||||||
|
#define assert(condition) ((void)0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** The following structure holds pointers to all of the SQLite API
|
** The following structure holds pointers to all of the SQLite API
|
||||||
|
@ -331,6 +335,13 @@ struct sqlite3_api_routines {
|
||||||
const char *(*filename_database)(const char*);
|
const char *(*filename_database)(const char*);
|
||||||
const char *(*filename_journal)(const char*);
|
const char *(*filename_journal)(const char*);
|
||||||
const char *(*filename_wal)(const char*);
|
const char *(*filename_wal)(const char*);
|
||||||
|
/* Version 3.32.0 and later */
|
||||||
|
char *(*create_filename)(const char*,const char*,const char*,
|
||||||
|
int,const char**);
|
||||||
|
void (*free_filename)(char*);
|
||||||
|
sqlite3_file *(*database_file_object)(const char*);
|
||||||
|
/* Version 3.34.0 and later */
|
||||||
|
int (*txn_state)(sqlite3*,const char*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -631,6 +642,12 @@ typedef int (*sqlite3_loadext_entry)(
|
||||||
#define sqlite3_filename_database sqlite3_api->filename_database
|
#define sqlite3_filename_database sqlite3_api->filename_database
|
||||||
#define sqlite3_filename_journal sqlite3_api->filename_journal
|
#define sqlite3_filename_journal sqlite3_api->filename_journal
|
||||||
#define sqlite3_filename_wal sqlite3_api->filename_wal
|
#define sqlite3_filename_wal sqlite3_api->filename_wal
|
||||||
|
/* Version 3.32.0 and later */
|
||||||
|
#define sqlite3_create_filename sqlite3_api->create_filename
|
||||||
|
#define sqlite3_free_filename sqlite3_api->free_filename
|
||||||
|
#define sqlite3_database_file_object sqlite3_api->database_file_object
|
||||||
|
/* Version 3.34.0 and later */
|
||||||
|
#define sqlite3_txn_state sqlite3_api->txn_state
|
||||||
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
|
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
|
||||||
|
|
||||||
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
|
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
|
||||||
|
|
27
vendor/github.com/mattn/go-sqlite3/static_mock.go
generated
vendored
27
vendor/github.com/mattn/go-sqlite3/static_mock.go
generated
vendored
|
@ -13,14 +13,25 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
|
||||||
sql.Register("sqlite3", &SQLiteDriverMock{})
|
|
||||||
}
|
|
||||||
|
|
||||||
type SQLiteDriverMock struct{}
|
|
||||||
|
|
||||||
var errorMsg = errors.New("Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub")
|
var errorMsg = errors.New("Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub")
|
||||||
|
|
||||||
func (SQLiteDriverMock) Open(s string) (driver.Conn, error) {
|
func init() {
|
||||||
return nil, errorMsg
|
sql.Register("sqlite3", &SQLiteDriver{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
SQLiteDriver struct {
|
||||||
|
Extensions []string
|
||||||
|
ConnectHook func(*SQLiteConn) error
|
||||||
|
}
|
||||||
|
SQLiteConn struct{}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (SQLiteDriver) Open(s string) (driver.Conn, error) { return nil, errorMsg }
|
||||||
|
func (c *SQLiteConn) RegisterAggregator(string, interface{}, bool) error { return errorMsg }
|
||||||
|
func (c *SQLiteConn) RegisterAuthorizer(func(int, string, string, string) int) {}
|
||||||
|
func (c *SQLiteConn) RegisterCollation(string, func(string, string) int) error { return errorMsg }
|
||||||
|
func (c *SQLiteConn) RegisterCommitHook(func() int) {}
|
||||||
|
func (c *SQLiteConn) RegisterFunc(string, interface{}, bool) error { return errorMsg }
|
||||||
|
func (c *SQLiteConn) RegisterRollbackHook(func()) {}
|
||||||
|
func (c *SQLiteConn) RegisterUpdateHook(func(int, string, string, int64)) {}
|
||||||
|
|
29
vendor/github.com/prometheus/client_golang/prometheus/build_info.go
generated
vendored
29
vendor/github.com/prometheus/client_golang/prometheus/build_info.go
generated
vendored
|
@ -1,29 +0,0 @@
|
||||||
// Copyright 2019 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.
|
|
||||||
|
|
||||||
// +build go1.12
|
|
||||||
|
|
||||||
package prometheus
|
|
||||||
|
|
||||||
import "runtime/debug"
|
|
||||||
|
|
||||||
// readBuildInfo is a wrapper around debug.ReadBuildInfo for Go 1.12+.
|
|
||||||
func readBuildInfo() (path, version, sum string) {
|
|
||||||
path, version, sum = "unknown", "unknown", "unknown"
|
|
||||||
if bi, ok := debug.ReadBuildInfo(); ok {
|
|
||||||
path = bi.Main.Path
|
|
||||||
version = bi.Main.Version
|
|
||||||
sum = bi.Main.Sum
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
22
vendor/github.com/prometheus/client_golang/prometheus/build_info_pre_1.12.go
generated
vendored
22
vendor/github.com/prometheus/client_golang/prometheus/build_info_pre_1.12.go
generated
vendored
|
@ -1,22 +0,0 @@
|
||||||
// Copyright 2019 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.
|
|
||||||
|
|
||||||
// +build !go1.12
|
|
||||||
|
|
||||||
package prometheus
|
|
||||||
|
|
||||||
// readBuildInfo is a wrapper around debug.ReadBuildInfo for Go versions before
|
|
||||||
// 1.12. Remove this whole file once the minimum supported Go version is 1.12.
|
|
||||||
func readBuildInfo() (path, version, sum string) {
|
|
||||||
return "unknown", "unknown", "unknown"
|
|
||||||
}
|
|
20
vendor/github.com/prometheus/client_golang/prometheus/counter.go
generated
vendored
20
vendor/github.com/prometheus/client_golang/prometheus/counter.go
generated
vendored
|
@ -163,7 +163,7 @@ func (c *counter) updateExemplar(v float64, l Labels) {
|
||||||
// (e.g. number of HTTP requests, partitioned by response code and
|
// (e.g. number of HTTP requests, partitioned by response code and
|
||||||
// method). Create instances with NewCounterVec.
|
// method). Create instances with NewCounterVec.
|
||||||
type CounterVec struct {
|
type CounterVec struct {
|
||||||
*metricVec
|
*MetricVec
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCounterVec creates a new CounterVec based on the provided CounterOpts and
|
// NewCounterVec creates a new CounterVec based on the provided CounterOpts and
|
||||||
|
@ -176,11 +176,11 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec {
|
||||||
opts.ConstLabels,
|
opts.ConstLabels,
|
||||||
)
|
)
|
||||||
return &CounterVec{
|
return &CounterVec{
|
||||||
metricVec: newMetricVec(desc, func(lvs ...string) Metric {
|
MetricVec: NewMetricVec(desc, func(lvs ...string) Metric {
|
||||||
if len(lvs) != len(desc.variableLabels) {
|
if len(lvs) != len(desc.variableLabels) {
|
||||||
panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs))
|
panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs))
|
||||||
}
|
}
|
||||||
result := &counter{desc: desc, labelPairs: makeLabelPairs(desc, lvs), now: time.Now}
|
result := &counter{desc: desc, labelPairs: MakeLabelPairs(desc, lvs), now: time.Now}
|
||||||
result.init(result) // Init self-collection.
|
result.init(result) // Init self-collection.
|
||||||
return result
|
return result
|
||||||
}),
|
}),
|
||||||
|
@ -188,7 +188,7 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMetricWithLabelValues returns the Counter for the given slice of label
|
// GetMetricWithLabelValues returns the Counter for the given slice of label
|
||||||
// values (same order as the VariableLabels in Desc). If that combination of
|
// values (same order as the variable labels in Desc). If that combination of
|
||||||
// label values is accessed for the first time, a new Counter is created.
|
// label values is accessed for the first time, a new Counter is created.
|
||||||
//
|
//
|
||||||
// It is possible to call this method without using the returned Counter to only
|
// It is possible to call this method without using the returned Counter to only
|
||||||
|
@ -202,7 +202,7 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec {
|
||||||
// Counter with the same label values is created later.
|
// Counter with the same label values is created later.
|
||||||
//
|
//
|
||||||
// An error is returned if the number of label values is not the same as the
|
// An error is returned if the number of label values is not the same as the
|
||||||
// number of VariableLabels in Desc (minus any curried labels).
|
// number of variable labels in Desc (minus any curried labels).
|
||||||
//
|
//
|
||||||
// Note that for more than one label value, this method is prone to mistakes
|
// Note that for more than one label value, this method is prone to mistakes
|
||||||
// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as
|
// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as
|
||||||
|
@ -211,7 +211,7 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec {
|
||||||
// with a performance overhead (for creating and processing the Labels map).
|
// with a performance overhead (for creating and processing the Labels map).
|
||||||
// See also the GaugeVec example.
|
// See also the GaugeVec example.
|
||||||
func (v *CounterVec) GetMetricWithLabelValues(lvs ...string) (Counter, error) {
|
func (v *CounterVec) GetMetricWithLabelValues(lvs ...string) (Counter, error) {
|
||||||
metric, err := v.metricVec.getMetricWithLabelValues(lvs...)
|
metric, err := v.MetricVec.GetMetricWithLabelValues(lvs...)
|
||||||
if metric != nil {
|
if metric != nil {
|
||||||
return metric.(Counter), err
|
return metric.(Counter), err
|
||||||
}
|
}
|
||||||
|
@ -219,19 +219,19 @@ func (v *CounterVec) GetMetricWithLabelValues(lvs ...string) (Counter, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMetricWith returns the Counter for the given Labels map (the label names
|
// GetMetricWith returns the Counter for the given Labels map (the label names
|
||||||
// must match those of the VariableLabels in Desc). If that label map is
|
// must match those of the variable labels in Desc). If that label map is
|
||||||
// accessed for the first time, a new Counter is created. Implications of
|
// accessed for the first time, a new Counter is created. Implications of
|
||||||
// creating a Counter without using it and keeping the Counter for later use are
|
// creating a Counter without using it and keeping the Counter for later use are
|
||||||
// the same as for GetMetricWithLabelValues.
|
// the same as for GetMetricWithLabelValues.
|
||||||
//
|
//
|
||||||
// An error is returned if the number and names of the Labels are inconsistent
|
// An error is returned if the number and names of the Labels are inconsistent
|
||||||
// with those of the VariableLabels in Desc (minus any curried labels).
|
// with those of the variable labels in Desc (minus any curried labels).
|
||||||
//
|
//
|
||||||
// This method is used for the same purpose as
|
// This method is used for the same purpose as
|
||||||
// GetMetricWithLabelValues(...string). See there for pros and cons of the two
|
// GetMetricWithLabelValues(...string). See there for pros and cons of the two
|
||||||
// methods.
|
// methods.
|
||||||
func (v *CounterVec) GetMetricWith(labels Labels) (Counter, error) {
|
func (v *CounterVec) GetMetricWith(labels Labels) (Counter, error) {
|
||||||
metric, err := v.metricVec.getMetricWith(labels)
|
metric, err := v.MetricVec.GetMetricWith(labels)
|
||||||
if metric != nil {
|
if metric != nil {
|
||||||
return metric.(Counter), err
|
return metric.(Counter), err
|
||||||
}
|
}
|
||||||
|
@ -275,7 +275,7 @@ func (v *CounterVec) With(labels Labels) Counter {
|
||||||
// registered with a given registry (usually the uncurried version). The Reset
|
// registered with a given registry (usually the uncurried version). The Reset
|
||||||
// method deletes all metrics, even if called on a curried vector.
|
// method deletes all metrics, even if called on a curried vector.
|
||||||
func (v *CounterVec) CurryWith(labels Labels) (*CounterVec, error) {
|
func (v *CounterVec) CurryWith(labels Labels) (*CounterVec, error) {
|
||||||
vec, err := v.curryWith(labels)
|
vec, err := v.MetricVec.CurryWith(labels)
|
||||||
if vec != nil {
|
if vec != nil {
|
||||||
return &CounterVec{vec}, err
|
return &CounterVec{vec}, err
|
||||||
}
|
}
|
||||||
|
|
4
vendor/github.com/prometheus/client_golang/prometheus/desc.go
generated
vendored
4
vendor/github.com/prometheus/client_golang/prometheus/desc.go
generated
vendored
|
@ -20,7 +20,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/cespare/xxhash/v2"
|
"github.com/cespare/xxhash/v2"
|
||||||
//lint:ignore SA1019 Need to keep deprecated package for compatibility.
|
//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
"github.com/prometheus/common/model"
|
"github.com/prometheus/common/model"
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ type Desc struct {
|
||||||
// constLabelPairs contains precalculated DTO label pairs based on
|
// constLabelPairs contains precalculated DTO label pairs based on
|
||||||
// the constant labels.
|
// the constant labels.
|
||||||
constLabelPairs []*dto.LabelPair
|
constLabelPairs []*dto.LabelPair
|
||||||
// VariableLabels contains names of labels for which the metric
|
// variableLabels contains names of labels for which the metric
|
||||||
// maintains variable values.
|
// maintains variable values.
|
||||||
variableLabels []string
|
variableLabels []string
|
||||||
// id is a hash of the values of the ConstLabels and fqName. This
|
// id is a hash of the values of the ConstLabels and fqName. This
|
||||||
|
|
39
vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go
generated
vendored
39
vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go
generated
vendored
|
@ -22,43 +22,10 @@ type expvarCollector struct {
|
||||||
exports map[string]*Desc
|
exports map[string]*Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewExpvarCollector returns a newly allocated expvar Collector that still has
|
// NewExpvarCollector is the obsolete version of collectors.NewExpvarCollector.
|
||||||
// to be registered with a Prometheus registry.
|
// See there for documentation.
|
||||||
//
|
//
|
||||||
// An expvar Collector collects metrics from the expvar interface. It provides a
|
// Deprecated: Use collectors.NewExpvarCollector instead.
|
||||||
// quick way to expose numeric values that are already exported via expvar as
|
|
||||||
// Prometheus metrics. Note that the data models of expvar and Prometheus are
|
|
||||||
// fundamentally different, and that the expvar Collector is inherently slower
|
|
||||||
// than native Prometheus metrics. Thus, the expvar Collector is probably great
|
|
||||||
// for experiments and prototying, but you should seriously consider a more
|
|
||||||
// direct implementation of Prometheus metrics for monitoring production
|
|
||||||
// systems.
|
|
||||||
//
|
|
||||||
// The exports map has the following meaning:
|
|
||||||
//
|
|
||||||
// The keys in the map correspond to expvar keys, i.e. for every expvar key you
|
|
||||||
// want to export as Prometheus metric, you need an entry in the exports
|
|
||||||
// map. The descriptor mapped to each key describes how to export the expvar
|
|
||||||
// value. It defines the name and the help string of the Prometheus metric
|
|
||||||
// proxying the expvar value. The type will always be Untyped.
|
|
||||||
//
|
|
||||||
// For descriptors without variable labels, the expvar value must be a number or
|
|
||||||
// a bool. The number is then directly exported as the Prometheus sample
|
|
||||||
// value. (For a bool, 'false' translates to 0 and 'true' to 1). Expvar values
|
|
||||||
// that are not numbers or bools are silently ignored.
|
|
||||||
//
|
|
||||||
// If the descriptor has one variable label, the expvar value must be an expvar
|
|
||||||
// map. The keys in the expvar map become the various values of the one
|
|
||||||
// Prometheus label. The values in the expvar map must be numbers or bools again
|
|
||||||
// as above.
|
|
||||||
//
|
|
||||||
// For descriptors with more than one variable label, the expvar must be a
|
|
||||||
// nested expvar map, i.e. where the values of the topmost map are maps again
|
|
||||||
// etc. until a depth is reached that corresponds to the number of labels. The
|
|
||||||
// leaves of that structure must be numbers or bools as above to serve as the
|
|
||||||
// sample values.
|
|
||||||
//
|
|
||||||
// Anything that does not fit into the scheme above is silently ignored.
|
|
||||||
func NewExpvarCollector(exports map[string]*Desc) Collector {
|
func NewExpvarCollector(exports map[string]*Desc) Collector {
|
||||||
return &expvarCollector{
|
return &expvarCollector{
|
||||||
exports: exports,
|
exports: exports,
|
||||||
|
|
20
vendor/github.com/prometheus/client_golang/prometheus/gauge.go
generated
vendored
20
vendor/github.com/prometheus/client_golang/prometheus/gauge.go
generated
vendored
|
@ -132,7 +132,7 @@ func (g *gauge) Write(out *dto.Metric) error {
|
||||||
// (e.g. number of operations queued, partitioned by user and operation
|
// (e.g. number of operations queued, partitioned by user and operation
|
||||||
// type). Create instances with NewGaugeVec.
|
// type). Create instances with NewGaugeVec.
|
||||||
type GaugeVec struct {
|
type GaugeVec struct {
|
||||||
*metricVec
|
*MetricVec
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewGaugeVec creates a new GaugeVec based on the provided GaugeOpts and
|
// NewGaugeVec creates a new GaugeVec based on the provided GaugeOpts and
|
||||||
|
@ -145,11 +145,11 @@ func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec {
|
||||||
opts.ConstLabels,
|
opts.ConstLabels,
|
||||||
)
|
)
|
||||||
return &GaugeVec{
|
return &GaugeVec{
|
||||||
metricVec: newMetricVec(desc, func(lvs ...string) Metric {
|
MetricVec: NewMetricVec(desc, func(lvs ...string) Metric {
|
||||||
if len(lvs) != len(desc.variableLabels) {
|
if len(lvs) != len(desc.variableLabels) {
|
||||||
panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs))
|
panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs))
|
||||||
}
|
}
|
||||||
result := &gauge{desc: desc, labelPairs: makeLabelPairs(desc, lvs)}
|
result := &gauge{desc: desc, labelPairs: MakeLabelPairs(desc, lvs)}
|
||||||
result.init(result) // Init self-collection.
|
result.init(result) // Init self-collection.
|
||||||
return result
|
return result
|
||||||
}),
|
}),
|
||||||
|
@ -157,7 +157,7 @@ func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMetricWithLabelValues returns the Gauge for the given slice of label
|
// GetMetricWithLabelValues returns the Gauge for the given slice of label
|
||||||
// values (same order as the VariableLabels in Desc). If that combination of
|
// values (same order as the variable labels in Desc). If that combination of
|
||||||
// label values is accessed for the first time, a new Gauge is created.
|
// label values is accessed for the first time, a new Gauge is created.
|
||||||
//
|
//
|
||||||
// It is possible to call this method without using the returned Gauge to only
|
// It is possible to call this method without using the returned Gauge to only
|
||||||
|
@ -172,7 +172,7 @@ func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec {
|
||||||
// example.
|
// example.
|
||||||
//
|
//
|
||||||
// An error is returned if the number of label values is not the same as the
|
// An error is returned if the number of label values is not the same as the
|
||||||
// number of VariableLabels in Desc (minus any curried labels).
|
// number of variable labels in Desc (minus any curried labels).
|
||||||
//
|
//
|
||||||
// Note that for more than one label value, this method is prone to mistakes
|
// Note that for more than one label value, this method is prone to mistakes
|
||||||
// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as
|
// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as
|
||||||
|
@ -180,7 +180,7 @@ func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec {
|
||||||
// latter has a much more readable (albeit more verbose) syntax, but it comes
|
// latter has a much more readable (albeit more verbose) syntax, but it comes
|
||||||
// with a performance overhead (for creating and processing the Labels map).
|
// with a performance overhead (for creating and processing the Labels map).
|
||||||
func (v *GaugeVec) GetMetricWithLabelValues(lvs ...string) (Gauge, error) {
|
func (v *GaugeVec) GetMetricWithLabelValues(lvs ...string) (Gauge, error) {
|
||||||
metric, err := v.metricVec.getMetricWithLabelValues(lvs...)
|
metric, err := v.MetricVec.GetMetricWithLabelValues(lvs...)
|
||||||
if metric != nil {
|
if metric != nil {
|
||||||
return metric.(Gauge), err
|
return metric.(Gauge), err
|
||||||
}
|
}
|
||||||
|
@ -188,19 +188,19 @@ func (v *GaugeVec) GetMetricWithLabelValues(lvs ...string) (Gauge, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMetricWith returns the Gauge for the given Labels map (the label names
|
// GetMetricWith returns the Gauge for the given Labels map (the label names
|
||||||
// must match those of the VariableLabels in Desc). If that label map is
|
// must match those of the variable labels in Desc). If that label map is
|
||||||
// accessed for the first time, a new Gauge is created. Implications of
|
// accessed for the first time, a new Gauge is created. Implications of
|
||||||
// creating a Gauge without using it and keeping the Gauge for later use are
|
// creating a Gauge without using it and keeping the Gauge for later use are
|
||||||
// the same as for GetMetricWithLabelValues.
|
// the same as for GetMetricWithLabelValues.
|
||||||
//
|
//
|
||||||
// An error is returned if the number and names of the Labels are inconsistent
|
// An error is returned if the number and names of the Labels are inconsistent
|
||||||
// with those of the VariableLabels in Desc (minus any curried labels).
|
// with those of the variable labels in Desc (minus any curried labels).
|
||||||
//
|
//
|
||||||
// This method is used for the same purpose as
|
// This method is used for the same purpose as
|
||||||
// GetMetricWithLabelValues(...string). See there for pros and cons of the two
|
// GetMetricWithLabelValues(...string). See there for pros and cons of the two
|
||||||
// methods.
|
// methods.
|
||||||
func (v *GaugeVec) GetMetricWith(labels Labels) (Gauge, error) {
|
func (v *GaugeVec) GetMetricWith(labels Labels) (Gauge, error) {
|
||||||
metric, err := v.metricVec.getMetricWith(labels)
|
metric, err := v.MetricVec.GetMetricWith(labels)
|
||||||
if metric != nil {
|
if metric != nil {
|
||||||
return metric.(Gauge), err
|
return metric.(Gauge), err
|
||||||
}
|
}
|
||||||
|
@ -244,7 +244,7 @@ func (v *GaugeVec) With(labels Labels) Gauge {
|
||||||
// registered with a given registry (usually the uncurried version). The Reset
|
// registered with a given registry (usually the uncurried version). The Reset
|
||||||
// method deletes all metrics, even if called on a curried vector.
|
// method deletes all metrics, even if called on a curried vector.
|
||||||
func (v *GaugeVec) CurryWith(labels Labels) (*GaugeVec, error) {
|
func (v *GaugeVec) CurryWith(labels Labels) (*GaugeVec, error) {
|
||||||
vec, err := v.curryWith(labels)
|
vec, err := v.MetricVec.CurryWith(labels)
|
||||||
if vec != nil {
|
if vec != nil {
|
||||||
return &GaugeVec{vec}, err
|
return &GaugeVec{vec}, err
|
||||||
}
|
}
|
||||||
|
|
53
vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
generated
vendored
53
vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
generated
vendored
|
@ -36,31 +36,10 @@ type goCollector struct {
|
||||||
msMaxAge time.Duration // Maximum allowed age of old memstats.
|
msMaxAge time.Duration // Maximum allowed age of old memstats.
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewGoCollector returns a collector that exports metrics about the current Go
|
// NewGoCollector is the obsolete version of collectors.NewGoCollector.
|
||||||
// process. This includes memory stats. To collect those, runtime.ReadMemStats
|
// See there for documentation.
|
||||||
// is called. This requires to “stop the world”, which usually only happens for
|
|
||||||
// garbage collection (GC). Take the following implications into account when
|
|
||||||
// deciding whether to use the Go collector:
|
|
||||||
//
|
//
|
||||||
// 1. The performance impact of stopping the world is the more relevant the more
|
// Deprecated: Use collectors.NewGoCollector instead.
|
||||||
// frequently metrics are collected. However, with Go1.9 or later the
|
|
||||||
// stop-the-world time per metrics collection is very short (~25µs) so that the
|
|
||||||
// performance impact will only matter in rare cases. However, with older Go
|
|
||||||
// versions, the stop-the-world duration depends on the heap size and can be
|
|
||||||
// quite significant (~1.7 ms/GiB as per
|
|
||||||
// https://go-review.googlesource.com/c/go/+/34937).
|
|
||||||
//
|
|
||||||
// 2. During an ongoing GC, nothing else can stop the world. Therefore, if the
|
|
||||||
// metrics collection happens to coincide with GC, it will only complete after
|
|
||||||
// GC has finished. Usually, GC is fast enough to not cause problems. However,
|
|
||||||
// with a very large heap, GC might take multiple seconds, which is enough to
|
|
||||||
// cause scrape timeouts in common setups. To avoid this problem, the Go
|
|
||||||
// collector will use the memstats from a previous collection if
|
|
||||||
// runtime.ReadMemStats takes more than 1s. However, if there are no previously
|
|
||||||
// collected memstats, or their collection is more than 5m ago, the collection
|
|
||||||
// will block until runtime.ReadMemStats succeeds. (The problem might be solved
|
|
||||||
// in Go1.13, see https://github.com/golang/go/issues/19812 for the related Go
|
|
||||||
// issue.)
|
|
||||||
func NewGoCollector() Collector {
|
func NewGoCollector() Collector {
|
||||||
return &goCollector{
|
return &goCollector{
|
||||||
goroutinesDesc: NewDesc(
|
goroutinesDesc: NewDesc(
|
||||||
|
@ -365,25 +344,17 @@ type memStatsMetrics []struct {
|
||||||
valType ValueType
|
valType ValueType
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBuildInfoCollector returns a collector collecting a single metric
|
// NewBuildInfoCollector is the obsolete version of collectors.NewBuildInfoCollector.
|
||||||
// "go_build_info" with the constant value 1 and three labels "path", "version",
|
// See there for documentation.
|
||||||
// and "checksum". Their label values contain the main module path, version, and
|
|
||||||
// checksum, respectively. The labels will only have meaningful values if the
|
|
||||||
// binary is built with Go module support and from source code retrieved from
|
|
||||||
// the source repository (rather than the local file system). This is usually
|
|
||||||
// accomplished by building from outside of GOPATH, specifying the full address
|
|
||||||
// of the main package, e.g. "GO111MODULE=on go run
|
|
||||||
// github.com/prometheus/client_golang/examples/random". If built without Go
|
|
||||||
// module support, all label values will be "unknown". If built with Go module
|
|
||||||
// support but using the source code from the local file system, the "path" will
|
|
||||||
// be set appropriately, but "checksum" will be empty and "version" will be
|
|
||||||
// "(devel)".
|
|
||||||
//
|
//
|
||||||
// This collector uses only the build information for the main module. See
|
// Deprecated: Use collectors.NewBuildInfoCollector instead.
|
||||||
// https://github.com/povilasv/prommod for an example of a collector for the
|
|
||||||
// module dependencies.
|
|
||||||
func NewBuildInfoCollector() Collector {
|
func NewBuildInfoCollector() Collector {
|
||||||
path, version, sum := readBuildInfo()
|
path, version, sum := "unknown", "unknown", "unknown"
|
||||||
|
if bi, ok := debug.ReadBuildInfo(); ok {
|
||||||
|
path = bi.Main.Path
|
||||||
|
version = bi.Main.Version
|
||||||
|
sum = bi.Main.Sum
|
||||||
|
}
|
||||||
c := &selfCollector{MustNewConstMetric(
|
c := &selfCollector{MustNewConstMetric(
|
||||||
NewDesc(
|
NewDesc(
|
||||||
"go_build_info",
|
"go_build_info",
|
||||||
|
|
31
vendor/github.com/prometheus/client_golang/prometheus/histogram.go
generated
vendored
31
vendor/github.com/prometheus/client_golang/prometheus/histogram.go
generated
vendored
|
@ -22,7 +22,7 @@ import (
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
//lint:ignore SA1019 Need to keep deprecated package for compatibility.
|
//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
|
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
|
@ -47,7 +47,12 @@ type Histogram interface {
|
||||||
Metric
|
Metric
|
||||||
Collector
|
Collector
|
||||||
|
|
||||||
// Observe adds a single observation to the histogram.
|
// Observe adds a single observation to the histogram. Observations are
|
||||||
|
// usually positive or zero. Negative observations are accepted but
|
||||||
|
// prevent current versions of Prometheus from properly detecting
|
||||||
|
// counter resets in the sum of observations. See
|
||||||
|
// https://prometheus.io/docs/practices/histograms/#count-and-sum-of-observations
|
||||||
|
// for details.
|
||||||
Observe(float64)
|
Observe(float64)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +197,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr
|
||||||
h := &histogram{
|
h := &histogram{
|
||||||
desc: desc,
|
desc: desc,
|
||||||
upperBounds: opts.Buckets,
|
upperBounds: opts.Buckets,
|
||||||
labelPairs: makeLabelPairs(desc, labelValues),
|
labelPairs: MakeLabelPairs(desc, labelValues),
|
||||||
counts: [2]*histogramCounts{{}, {}},
|
counts: [2]*histogramCounts{{}, {}},
|
||||||
now: time.Now,
|
now: time.Now,
|
||||||
}
|
}
|
||||||
|
@ -409,7 +414,7 @@ func (h *histogram) updateExemplar(v float64, bucket int, l Labels) {
|
||||||
// (e.g. HTTP request latencies, partitioned by status code and method). Create
|
// (e.g. HTTP request latencies, partitioned by status code and method). Create
|
||||||
// instances with NewHistogramVec.
|
// instances with NewHistogramVec.
|
||||||
type HistogramVec struct {
|
type HistogramVec struct {
|
||||||
*metricVec
|
*MetricVec
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewHistogramVec creates a new HistogramVec based on the provided HistogramOpts and
|
// NewHistogramVec creates a new HistogramVec based on the provided HistogramOpts and
|
||||||
|
@ -422,14 +427,14 @@ func NewHistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec {
|
||||||
opts.ConstLabels,
|
opts.ConstLabels,
|
||||||
)
|
)
|
||||||
return &HistogramVec{
|
return &HistogramVec{
|
||||||
metricVec: newMetricVec(desc, func(lvs ...string) Metric {
|
MetricVec: NewMetricVec(desc, func(lvs ...string) Metric {
|
||||||
return newHistogram(desc, opts, lvs...)
|
return newHistogram(desc, opts, lvs...)
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMetricWithLabelValues returns the Histogram for the given slice of label
|
// GetMetricWithLabelValues returns the Histogram for the given slice of label
|
||||||
// values (same order as the VariableLabels in Desc). If that combination of
|
// values (same order as the variable labels in Desc). If that combination of
|
||||||
// label values is accessed for the first time, a new Histogram is created.
|
// label values is accessed for the first time, a new Histogram is created.
|
||||||
//
|
//
|
||||||
// It is possible to call this method without using the returned Histogram to only
|
// It is possible to call this method without using the returned Histogram to only
|
||||||
|
@ -444,7 +449,7 @@ func NewHistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec {
|
||||||
// example.
|
// example.
|
||||||
//
|
//
|
||||||
// An error is returned if the number of label values is not the same as the
|
// An error is returned if the number of label values is not the same as the
|
||||||
// number of VariableLabels in Desc (minus any curried labels).
|
// number of variable labels in Desc (minus any curried labels).
|
||||||
//
|
//
|
||||||
// Note that for more than one label value, this method is prone to mistakes
|
// Note that for more than one label value, this method is prone to mistakes
|
||||||
// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as
|
// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as
|
||||||
|
@ -453,7 +458,7 @@ func NewHistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec {
|
||||||
// with a performance overhead (for creating and processing the Labels map).
|
// with a performance overhead (for creating and processing the Labels map).
|
||||||
// See also the GaugeVec example.
|
// See also the GaugeVec example.
|
||||||
func (v *HistogramVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) {
|
func (v *HistogramVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) {
|
||||||
metric, err := v.metricVec.getMetricWithLabelValues(lvs...)
|
metric, err := v.MetricVec.GetMetricWithLabelValues(lvs...)
|
||||||
if metric != nil {
|
if metric != nil {
|
||||||
return metric.(Observer), err
|
return metric.(Observer), err
|
||||||
}
|
}
|
||||||
|
@ -461,19 +466,19 @@ func (v *HistogramVec) GetMetricWithLabelValues(lvs ...string) (Observer, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMetricWith returns the Histogram for the given Labels map (the label names
|
// GetMetricWith returns the Histogram for the given Labels map (the label names
|
||||||
// must match those of the VariableLabels in Desc). If that label map is
|
// must match those of the variable labels in Desc). If that label map is
|
||||||
// accessed for the first time, a new Histogram is created. Implications of
|
// accessed for the first time, a new Histogram is created. Implications of
|
||||||
// creating a Histogram without using it and keeping the Histogram for later use
|
// creating a Histogram without using it and keeping the Histogram for later use
|
||||||
// are the same as for GetMetricWithLabelValues.
|
// are the same as for GetMetricWithLabelValues.
|
||||||
//
|
//
|
||||||
// An error is returned if the number and names of the Labels are inconsistent
|
// An error is returned if the number and names of the Labels are inconsistent
|
||||||
// with those of the VariableLabels in Desc (minus any curried labels).
|
// with those of the variable labels in Desc (minus any curried labels).
|
||||||
//
|
//
|
||||||
// This method is used for the same purpose as
|
// This method is used for the same purpose as
|
||||||
// GetMetricWithLabelValues(...string). See there for pros and cons of the two
|
// GetMetricWithLabelValues(...string). See there for pros and cons of the two
|
||||||
// methods.
|
// methods.
|
||||||
func (v *HistogramVec) GetMetricWith(labels Labels) (Observer, error) {
|
func (v *HistogramVec) GetMetricWith(labels Labels) (Observer, error) {
|
||||||
metric, err := v.metricVec.getMetricWith(labels)
|
metric, err := v.MetricVec.GetMetricWith(labels)
|
||||||
if metric != nil {
|
if metric != nil {
|
||||||
return metric.(Observer), err
|
return metric.(Observer), err
|
||||||
}
|
}
|
||||||
|
@ -517,7 +522,7 @@ func (v *HistogramVec) With(labels Labels) Observer {
|
||||||
// registered with a given registry (usually the uncurried version). The Reset
|
// registered with a given registry (usually the uncurried version). The Reset
|
||||||
// method deletes all metrics, even if called on a curried vector.
|
// method deletes all metrics, even if called on a curried vector.
|
||||||
func (v *HistogramVec) CurryWith(labels Labels) (ObserverVec, error) {
|
func (v *HistogramVec) CurryWith(labels Labels) (ObserverVec, error) {
|
||||||
vec, err := v.curryWith(labels)
|
vec, err := v.MetricVec.CurryWith(labels)
|
||||||
if vec != nil {
|
if vec != nil {
|
||||||
return &HistogramVec{vec}, err
|
return &HistogramVec{vec}, err
|
||||||
}
|
}
|
||||||
|
@ -602,7 +607,7 @@ func NewConstHistogram(
|
||||||
count: count,
|
count: count,
|
||||||
sum: sum,
|
sum: sum,
|
||||||
buckets: buckets,
|
buckets: buckets,
|
||||||
labelPairs: makeLabelPairs(desc, labelValues),
|
labelPairs: MakeLabelPairs(desc, labelValues),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
6
vendor/github.com/prometheus/client_golang/prometheus/metric.go
generated
vendored
6
vendor/github.com/prometheus/client_golang/prometheus/metric.go
generated
vendored
|
@ -17,7 +17,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
//lint:ignore SA1019 Need to keep deprecated package for compatibility.
|
//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
"github.com/prometheus/common/model"
|
"github.com/prometheus/common/model"
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ type Metric interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Opts bundles the options for creating most Metric types. Each metric
|
// Opts bundles the options for creating most Metric types. Each metric
|
||||||
// implementation XXX has its own XXXOpts type, but in most cases, it is just be
|
// implementation XXX has its own XXXOpts type, but in most cases, it is just
|
||||||
// an alias of this type (which might change when the requirement arises.)
|
// an alias of this type (which might change when the requirement arises.)
|
||||||
//
|
//
|
||||||
// It is mandatory to set Name to a non-empty string. All other fields are
|
// It is mandatory to set Name to a non-empty string. All other fields are
|
||||||
|
@ -89,7 +89,7 @@ type Opts struct {
|
||||||
// better covered by target labels set by the scraping Prometheus
|
// better covered by target labels set by the scraping Prometheus
|
||||||
// server, or by one specific metric (e.g. a build_info or a
|
// server, or by one specific metric (e.g. a build_info or a
|
||||||
// machine_role metric). See also
|
// machine_role metric). See also
|
||||||
// https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels,-not-static-scraped-labels
|
// https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels
|
||||||
ConstLabels Labels
|
ConstLabels Labels
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
33
vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
generated
vendored
33
vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
generated
vendored
|
@ -15,7 +15,11 @@ package prometheus
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type processCollector struct {
|
type processCollector struct {
|
||||||
|
@ -50,16 +54,10 @@ type ProcessCollectorOpts struct {
|
||||||
ReportErrors bool
|
ReportErrors bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewProcessCollector returns a collector which exports the current state of
|
// NewProcessCollector is the obsolete version of collectors.NewProcessCollector.
|
||||||
// process metrics including CPU, memory and file descriptor usage as well as
|
// See there for documentation.
|
||||||
// the process start time. The detailed behavior is defined by the provided
|
|
||||||
// ProcessCollectorOpts. The zero value of ProcessCollectorOpts creates a
|
|
||||||
// collector for the current process with an empty namespace string and no error
|
|
||||||
// reporting.
|
|
||||||
//
|
//
|
||||||
// The collector only works on operating systems with a Linux-style proc
|
// Deprecated: Use collectors.NewProcessCollector instead.
|
||||||
// filesystem and on Microsoft Windows. On other operating systems, it will not
|
|
||||||
// collect any metrics.
|
|
||||||
func NewProcessCollector(opts ProcessCollectorOpts) Collector {
|
func NewProcessCollector(opts ProcessCollectorOpts) Collector {
|
||||||
ns := ""
|
ns := ""
|
||||||
if len(opts.Namespace) > 0 {
|
if len(opts.Namespace) > 0 {
|
||||||
|
@ -149,3 +147,20 @@ func (c *processCollector) reportError(ch chan<- Metric, desc *Desc, err error)
|
||||||
}
|
}
|
||||||
ch <- NewInvalidMetric(desc, err)
|
ch <- NewInvalidMetric(desc, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewPidFileFn returns a function that retrieves a pid from the specified file.
|
||||||
|
// It is meant to be used for the PidFn field in ProcessCollectorOpts.
|
||||||
|
func NewPidFileFn(pidFilePath string) func() (int, error) {
|
||||||
|
return func() (int, error) {
|
||||||
|
content, err := ioutil.ReadFile(pidFilePath)
|
||||||
|
if err != nil {
|
||||||
|
return 0, fmt.Errorf("can't read pid file %q: %+v", pidFilePath, err)
|
||||||
|
}
|
||||||
|
pid, err := strconv.Atoi(strings.TrimSpace(string(content)))
|
||||||
|
if err != nil {
|
||||||
|
return 0, fmt.Errorf("can't parse pid file %q: %+v", pidFilePath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return pid, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
6
vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
generated
vendored
6
vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
generated
vendored
|
@ -83,8 +83,7 @@ type readerFromDelegator struct{ *responseWriterDelegator }
|
||||||
type pusherDelegator struct{ *responseWriterDelegator }
|
type pusherDelegator struct{ *responseWriterDelegator }
|
||||||
|
|
||||||
func (d closeNotifierDelegator) CloseNotify() <-chan bool {
|
func (d closeNotifierDelegator) CloseNotify() <-chan bool {
|
||||||
//lint:ignore SA1019 http.CloseNotifier is deprecated but we don't want to
|
//nolint:staticcheck // Ignore SA1019. http.CloseNotifier is deprecated but we keep it here to not break existing users.
|
||||||
//remove support from client_golang yet.
|
|
||||||
return d.ResponseWriter.(http.CloseNotifier).CloseNotify()
|
return d.ResponseWriter.(http.CloseNotifier).CloseNotify()
|
||||||
}
|
}
|
||||||
func (d flusherDelegator) Flush() {
|
func (d flusherDelegator) Flush() {
|
||||||
|
@ -348,8 +347,7 @@ func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) deleg
|
||||||
}
|
}
|
||||||
|
|
||||||
id := 0
|
id := 0
|
||||||
//lint:ignore SA1019 http.CloseNotifier is deprecated but we don't want to
|
//nolint:staticcheck // Ignore SA1019. http.CloseNotifier is deprecated but we keep it here to not break existing users.
|
||||||
//remove support from client_golang yet.
|
|
||||||
if _, ok := w.(http.CloseNotifier); ok {
|
if _, ok := w.(http.CloseNotifier); ok {
|
||||||
id += closeNotifier
|
id += closeNotifier
|
||||||
}
|
}
|
||||||
|
|
10
vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go
generated
vendored
10
vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go
generated
vendored
|
@ -99,7 +99,7 @@ func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler {
|
||||||
inFlightSem = make(chan struct{}, opts.MaxRequestsInFlight)
|
inFlightSem = make(chan struct{}, opts.MaxRequestsInFlight)
|
||||||
}
|
}
|
||||||
if opts.Registry != nil {
|
if opts.Registry != nil {
|
||||||
// Initialize all possibilites that can occur below.
|
// Initialize all possibilities that can occur below.
|
||||||
errCnt.WithLabelValues("gathering")
|
errCnt.WithLabelValues("gathering")
|
||||||
errCnt.WithLabelValues("encoding")
|
errCnt.WithLabelValues("encoding")
|
||||||
if err := opts.Registry.Register(errCnt); err != nil {
|
if err := opts.Registry.Register(errCnt); err != nil {
|
||||||
|
@ -303,8 +303,12 @@ type Logger interface {
|
||||||
// HandlerOpts specifies options how to serve metrics via an http.Handler. The
|
// HandlerOpts specifies options how to serve metrics via an http.Handler. The
|
||||||
// zero value of HandlerOpts is a reasonable default.
|
// zero value of HandlerOpts is a reasonable default.
|
||||||
type HandlerOpts struct {
|
type HandlerOpts struct {
|
||||||
// ErrorLog specifies an optional logger for errors collecting and
|
// ErrorLog specifies an optional Logger for errors collecting and
|
||||||
// serving metrics. If nil, errors are not logged at all.
|
// serving metrics. If nil, errors are not logged at all. Note that the
|
||||||
|
// type of a reported error is often prometheus.MultiError, which
|
||||||
|
// formats into a multi-line error string. If you want to avoid the
|
||||||
|
// latter, create a Logger implementation that detects a
|
||||||
|
// prometheus.MultiError and formats the contained errors into one line.
|
||||||
ErrorLog Logger
|
ErrorLog Logger
|
||||||
// ErrorHandling defines how errors are handled. Note that errors are
|
// ErrorHandling defines how errors are handled. Note that errors are
|
||||||
// logged regardless of the configured ErrorHandling provided ErrorLog
|
// logged regardless of the configured ErrorHandling provided ErrorLog
|
||||||
|
|
91
vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go
generated
vendored
91
vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go
generated
vendored
|
@ -43,14 +43,14 @@ func InstrumentHandlerInFlight(g prometheus.Gauge, next http.Handler) http.Handl
|
||||||
|
|
||||||
// InstrumentHandlerDuration is a middleware that wraps the provided
|
// InstrumentHandlerDuration is a middleware that wraps the provided
|
||||||
// http.Handler to observe the request duration with the provided ObserverVec.
|
// http.Handler to observe the request duration with the provided ObserverVec.
|
||||||
// The ObserverVec must have zero, one, or two non-const non-curried labels. For
|
// The ObserverVec must have valid metric and label names and must have zero,
|
||||||
// those, the only allowed label names are "code" and "method". The function
|
// one, or two non-const non-curried labels. For those, the only allowed label
|
||||||
// panics otherwise. The Observe method of the Observer in the ObserverVec is
|
// names are "code" and "method". The function panics otherwise. The Observe
|
||||||
// called with the request duration in seconds. Partitioning happens by HTTP
|
// method of the Observer in the ObserverVec is called with the request duration
|
||||||
// status code and/or HTTP method if the respective instance label names are
|
// in seconds. Partitioning happens by HTTP status code and/or HTTP method if
|
||||||
// present in the ObserverVec. For unpartitioned observations, use an
|
// the respective instance label names are present in the ObserverVec. For
|
||||||
// ObserverVec with zero labels. Note that partitioning of Histograms is
|
// unpartitioned observations, use an ObserverVec with zero labels. Note that
|
||||||
// expensive and should be used judiciously.
|
// partitioning of Histograms is expensive and should be used judiciously.
|
||||||
//
|
//
|
||||||
// If the wrapped Handler does not set a status code, a status code of 200 is assumed.
|
// If the wrapped Handler does not set a status code, a status code of 200 is assumed.
|
||||||
//
|
//
|
||||||
|
@ -79,12 +79,13 @@ func InstrumentHandlerDuration(obs prometheus.ObserverVec, next http.Handler) ht
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstrumentHandlerCounter is a middleware that wraps the provided http.Handler
|
// InstrumentHandlerCounter is a middleware that wraps the provided http.Handler
|
||||||
// to observe the request result with the provided CounterVec. The CounterVec
|
// to observe the request result with the provided CounterVec. The CounterVec
|
||||||
// must have zero, one, or two non-const non-curried labels. For those, the only
|
// must have valid metric and label names and must have zero, one, or two
|
||||||
// allowed label names are "code" and "method". The function panics
|
// non-const non-curried labels. For those, the only allowed label names are
|
||||||
// otherwise. Partitioning of the CounterVec happens by HTTP status code and/or
|
// "code" and "method". The function panics otherwise. Partitioning of the
|
||||||
// HTTP method if the respective instance label names are present in the
|
// CounterVec happens by HTTP status code and/or HTTP method if the respective
|
||||||
// CounterVec. For unpartitioned counting, use a CounterVec with zero labels.
|
// instance label names are present in the CounterVec. For unpartitioned
|
||||||
|
// counting, use a CounterVec with zero labels.
|
||||||
//
|
//
|
||||||
// If the wrapped Handler does not set a status code, a status code of 200 is assumed.
|
// If the wrapped Handler does not set a status code, a status code of 200 is assumed.
|
||||||
//
|
//
|
||||||
|
@ -110,14 +111,15 @@ func InstrumentHandlerCounter(counter *prometheus.CounterVec, next http.Handler)
|
||||||
|
|
||||||
// InstrumentHandlerTimeToWriteHeader is a middleware that wraps the provided
|
// InstrumentHandlerTimeToWriteHeader is a middleware that wraps the provided
|
||||||
// http.Handler to observe with the provided ObserverVec the request duration
|
// http.Handler to observe with the provided ObserverVec the request duration
|
||||||
// until the response headers are written. The ObserverVec must have zero, one,
|
// until the response headers are written. The ObserverVec must have valid
|
||||||
// or two non-const non-curried labels. For those, the only allowed label names
|
// metric and label names and must have zero, one, or two non-const non-curried
|
||||||
// are "code" and "method". The function panics otherwise. The Observe method of
|
// labels. For those, the only allowed label names are "code" and "method". The
|
||||||
// the Observer in the ObserverVec is called with the request duration in
|
// function panics otherwise. The Observe method of the Observer in the
|
||||||
// seconds. Partitioning happens by HTTP status code and/or HTTP method if the
|
// ObserverVec is called with the request duration in seconds. Partitioning
|
||||||
// respective instance label names are present in the ObserverVec. For
|
// happens by HTTP status code and/or HTTP method if the respective instance
|
||||||
// unpartitioned observations, use an ObserverVec with zero labels. Note that
|
// label names are present in the ObserverVec. For unpartitioned observations,
|
||||||
// partitioning of Histograms is expensive and should be used judiciously.
|
// use an ObserverVec with zero labels. Note that partitioning of Histograms is
|
||||||
|
// expensive and should be used judiciously.
|
||||||
//
|
//
|
||||||
// If the wrapped Handler panics before calling WriteHeader, no value is
|
// If the wrapped Handler panics before calling WriteHeader, no value is
|
||||||
// reported.
|
// reported.
|
||||||
|
@ -139,15 +141,15 @@ func InstrumentHandlerTimeToWriteHeader(obs prometheus.ObserverVec, next http.Ha
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstrumentHandlerRequestSize is a middleware that wraps the provided
|
// InstrumentHandlerRequestSize is a middleware that wraps the provided
|
||||||
// http.Handler to observe the request size with the provided ObserverVec. The
|
// http.Handler to observe the request size with the provided ObserverVec. The
|
||||||
// ObserverVec must have zero, one, or two non-const non-curried labels. For
|
// ObserverVec must have valid metric and label names and must have zero, one,
|
||||||
// those, the only allowed label names are "code" and "method". The function
|
// or two non-const non-curried labels. For those, the only allowed label names
|
||||||
// panics otherwise. The Observe method of the Observer in the ObserverVec is
|
// are "code" and "method". The function panics otherwise. The Observe method of
|
||||||
// called with the request size in bytes. Partitioning happens by HTTP status
|
// the Observer in the ObserverVec is called with the request size in
|
||||||
// code and/or HTTP method if the respective instance label names are present in
|
// bytes. Partitioning happens by HTTP status code and/or HTTP method if the
|
||||||
// the ObserverVec. For unpartitioned observations, use an ObserverVec with zero
|
// respective instance label names are present in the ObserverVec. For
|
||||||
// labels. Note that partitioning of Histograms is expensive and should be used
|
// unpartitioned observations, use an ObserverVec with zero labels. Note that
|
||||||
// judiciously.
|
// partitioning of Histograms is expensive and should be used judiciously.
|
||||||
//
|
//
|
||||||
// If the wrapped Handler does not set a status code, a status code of 200 is assumed.
|
// If the wrapped Handler does not set a status code, a status code of 200 is assumed.
|
||||||
//
|
//
|
||||||
|
@ -174,15 +176,15 @@ func InstrumentHandlerRequestSize(obs prometheus.ObserverVec, next http.Handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstrumentHandlerResponseSize is a middleware that wraps the provided
|
// InstrumentHandlerResponseSize is a middleware that wraps the provided
|
||||||
// http.Handler to observe the response size with the provided ObserverVec. The
|
// http.Handler to observe the response size with the provided ObserverVec. The
|
||||||
// ObserverVec must have zero, one, or two non-const non-curried labels. For
|
// ObserverVec must have valid metric and label names and must have zero, one,
|
||||||
// those, the only allowed label names are "code" and "method". The function
|
// or two non-const non-curried labels. For those, the only allowed label names
|
||||||
// panics otherwise. The Observe method of the Observer in the ObserverVec is
|
// are "code" and "method". The function panics otherwise. The Observe method of
|
||||||
// called with the response size in bytes. Partitioning happens by HTTP status
|
// the Observer in the ObserverVec is called with the response size in
|
||||||
// code and/or HTTP method if the respective instance label names are present in
|
// bytes. Partitioning happens by HTTP status code and/or HTTP method if the
|
||||||
// the ObserverVec. For unpartitioned observations, use an ObserverVec with zero
|
// respective instance label names are present in the ObserverVec. For
|
||||||
// labels. Note that partitioning of Histograms is expensive and should be used
|
// unpartitioned observations, use an ObserverVec with zero labels. Note that
|
||||||
// judiciously.
|
// partitioning of Histograms is expensive and should be used judiciously.
|
||||||
//
|
//
|
||||||
// If the wrapped Handler does not set a status code, a status code of 200 is assumed.
|
// If the wrapped Handler does not set a status code, a status code of 200 is assumed.
|
||||||
//
|
//
|
||||||
|
@ -198,6 +200,11 @@ func InstrumentHandlerResponseSize(obs prometheus.ObserverVec, next http.Handler
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// checkLabels returns whether the provided Collector has a non-const,
|
||||||
|
// non-curried label named "code" and/or "method". It panics if the provided
|
||||||
|
// Collector does not have a Desc or has more than one Desc or its Desc is
|
||||||
|
// invalid. It also panics if the Collector has any non-const, non-curried
|
||||||
|
// labels that are not named "code" or "method".
|
||||||
func checkLabels(c prometheus.Collector) (code bool, method bool) {
|
func checkLabels(c prometheus.Collector) (code bool, method bool) {
|
||||||
// TODO(beorn7): Remove this hacky way to check for instance labels
|
// TODO(beorn7): Remove this hacky way to check for instance labels
|
||||||
// once Descriptors can have their dimensionality queried.
|
// once Descriptors can have their dimensionality queried.
|
||||||
|
@ -225,6 +232,10 @@ func checkLabels(c prometheus.Collector) (code bool, method bool) {
|
||||||
|
|
||||||
close(descc)
|
close(descc)
|
||||||
|
|
||||||
|
// Make sure the Collector has a valid Desc by registering it with a
|
||||||
|
// temporary registry.
|
||||||
|
prometheus.NewRegistry().MustRegister(c)
|
||||||
|
|
||||||
// Create a ConstMetric with the Desc. Since we don't know how many
|
// Create a ConstMetric with the Desc. Since we don't know how many
|
||||||
// variable labels there are, try for as long as it needs.
|
// variable labels there are, try for as long as it needs.
|
||||||
for err := errors.New("dummy"); err != nil; lvs = append(lvs, magicString) {
|
for err := errors.New("dummy"); err != nil; lvs = append(lvs, magicString) {
|
||||||
|
|
4
vendor/github.com/prometheus/client_golang/prometheus/registry.go
generated
vendored
4
vendor/github.com/prometheus/client_golang/prometheus/registry.go
generated
vendored
|
@ -26,7 +26,7 @@ import (
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
"github.com/cespare/xxhash/v2"
|
"github.com/cespare/xxhash/v2"
|
||||||
//lint:ignore SA1019 Need to keep deprecated package for compatibility.
|
//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
"github.com/prometheus/common/expfmt"
|
"github.com/prometheus/common/expfmt"
|
||||||
|
|
||||||
|
@ -215,6 +215,8 @@ func (err AlreadyRegisteredError) Error() string {
|
||||||
// by a Gatherer to report multiple errors during MetricFamily gathering.
|
// by a Gatherer to report multiple errors during MetricFamily gathering.
|
||||||
type MultiError []error
|
type MultiError []error
|
||||||
|
|
||||||
|
// Error formats the contained errors as a bullet point list, preceded by the
|
||||||
|
// total number of errors. Note that this results in a multi-line string.
|
||||||
func (errs MultiError) Error() string {
|
func (errs MultiError) Error() string {
|
||||||
if len(errs) == 0 {
|
if len(errs) == 0 {
|
||||||
return ""
|
return ""
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue