mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-01-18 02:39:30 +00:00
rebase: bump github.com/hashicorp/go-retryablehttp from 0.7.1 to 0.7.7
Bumps [github.com/hashicorp/go-retryablehttp](https://github.com/hashicorp/go-retryablehttp) from 0.7.1 to 0.7.7.
- [Changelog](https://github.com/hashicorp/go-retryablehttp/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/go-retryablehttp/compare/v0.7.1...v0.7.7)
---
updated-dependencies:
- dependency-name: github.com/hashicorp/go-retryablehttp
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit 2131a84a53
)
This commit is contained in:
parent
27a450f889
commit
4115eec7a0
10
go.mod
10
go.mod
@ -29,7 +29,7 @@ require (
|
|||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.8.4
|
||||||
golang.org/x/crypto v0.12.0
|
golang.org/x/crypto v0.12.0
|
||||||
golang.org/x/net v0.14.0
|
golang.org/x/net v0.14.0
|
||||||
golang.org/x/sys v0.11.0
|
golang.org/x/sys v0.20.0
|
||||||
google.golang.org/grpc v1.56.1
|
google.golang.org/grpc v1.56.1
|
||||||
google.golang.org/protobuf v1.31.0
|
google.golang.org/protobuf v1.31.0
|
||||||
//
|
//
|
||||||
@ -71,7 +71,7 @@ require (
|
|||||||
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
|
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
|
||||||
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
|
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
|
||||||
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
|
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
|
||||||
github.com/fatih/color v1.13.0 // indirect
|
github.com/fatih/color v1.16.0 // indirect
|
||||||
github.com/felixge/httpsnoop v1.0.3 // indirect
|
github.com/felixge/httpsnoop v1.0.3 // indirect
|
||||||
github.com/frankban/quicktest v1.13.0 // indirect
|
github.com/frankban/quicktest v1.13.0 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||||
@ -95,10 +95,10 @@ require (
|
|||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
github.com/hashicorp/go-hclog v1.2.2 // indirect
|
github.com/hashicorp/go-hclog v1.6.3 // indirect
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.0 // indirect
|
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
|
||||||
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
||||||
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 // indirect
|
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 // indirect
|
||||||
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
|
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
|
||||||
@ -114,7 +114,7 @@ require (
|
|||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.16 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
||||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
|
17
go.sum
17
go.sum
@ -315,8 +315,9 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ
|
|||||||
github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
|
github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||||
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
|
|
||||||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||||
|
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
|
||||||
|
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
|
||||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||||
github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
|
github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
|
||||||
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||||
@ -574,8 +575,8 @@ github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrj
|
|||||||
github.com/hashicorp/go-hclog v0.10.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
github.com/hashicorp/go-hclog v0.10.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||||
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||||
github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||||
github.com/hashicorp/go-hclog v1.2.2 h1:ihRI7YFwcZdiSD7SIenIhHfQH3OuDvWerAUBZbeQS3M=
|
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
|
||||||
github.com/hashicorp/go-hclog v1.2.2/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
||||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
|
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
|
||||||
@ -603,8 +604,9 @@ github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es
|
|||||||
github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||||
github.com/hashicorp/go-retryablehttp v0.6.2/go.mod h1:gEx6HMUGxYYhJScX7W1Il64m6cc2C1mDaW3NQ9sY1FY=
|
github.com/hashicorp/go-retryablehttp v0.6.2/go.mod h1:gEx6HMUGxYYhJScX7W1Il64m6cc2C1mDaW3NQ9sY1FY=
|
||||||
github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
github.com/hashicorp/go-retryablehttp v0.6.6/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-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
|
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
|
||||||
@ -825,8 +827,9 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA
|
|||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||||
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
|
||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
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.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
|
github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
|
||||||
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=
|
||||||
@ -1515,8 +1518,8 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|||||||
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
|
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
|
||||||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
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/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
12
vendor/github.com/fatih/color/README.md
generated
vendored
12
vendor/github.com/fatih/color/README.md
generated
vendored
@ -7,7 +7,6 @@ suits you.
|
|||||||
|
|
||||||
![Color](https://user-images.githubusercontent.com/438920/96832689-03b3e000-13f4-11eb-9803-46f4c4de3406.jpg)
|
![Color](https://user-images.githubusercontent.com/438920/96832689-03b3e000-13f4-11eb-9803-46f4c4de3406.jpg)
|
||||||
|
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -130,11 +129,11 @@ There might be a case where you want to explicitly disable/enable color output.
|
|||||||
(for example if the output were piped directly to `less`).
|
(for example if the output were piped directly to `less`).
|
||||||
|
|
||||||
The `color` package also disables color output if the [`NO_COLOR`](https://no-color.org) environment
|
The `color` package also disables color output if the [`NO_COLOR`](https://no-color.org) environment
|
||||||
variable is set (regardless of its value).
|
variable is set to a non-empty string.
|
||||||
|
|
||||||
`Color` has support to disable/enable colors programatically both globally and
|
`Color` has support to disable/enable colors programmatically both globally and
|
||||||
for single color definitions. For example suppose you have a CLI app and a
|
for single color definitions. For example suppose you have a CLI app and a
|
||||||
`--no-color` bool flag. You can easily disable the color output with:
|
`-no-color` bool flag. You can easily disable the color output with:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
|
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
|
||||||
@ -167,11 +166,10 @@ To output color in GitHub Actions (or other CI systems that support ANSI colors)
|
|||||||
* Save/Return previous values
|
* Save/Return previous values
|
||||||
* Evaluate fmt.Formatter interface
|
* Evaluate fmt.Formatter interface
|
||||||
|
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
* [Fatih Arslan](https://github.com/fatih)
|
* [Fatih Arslan](https://github.com/fatih)
|
||||||
* Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable)
|
* Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
98
vendor/github.com/fatih/color/color.go
generated
vendored
98
vendor/github.com/fatih/color/color.go
generated
vendored
@ -19,10 +19,10 @@ var (
|
|||||||
// set (regardless of its value). This is a global option and affects all
|
// set (regardless of its value). This is a global option and affects all
|
||||||
// colors. For more control over each color block use the methods
|
// colors. For more control over each color block use the methods
|
||||||
// DisableColor() individually.
|
// DisableColor() individually.
|
||||||
NoColor = noColorExists() || os.Getenv("TERM") == "dumb" ||
|
NoColor = noColorIsSet() || os.Getenv("TERM") == "dumb" ||
|
||||||
(!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd()))
|
(!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd()))
|
||||||
|
|
||||||
// Output defines the standard output of the print functions. By default
|
// Output defines the standard output of the print functions. By default,
|
||||||
// os.Stdout is used.
|
// os.Stdout is used.
|
||||||
Output = colorable.NewColorableStdout()
|
Output = colorable.NewColorableStdout()
|
||||||
|
|
||||||
@ -35,10 +35,9 @@ var (
|
|||||||
colorsCacheMu sync.Mutex // protects colorsCache
|
colorsCacheMu sync.Mutex // protects colorsCache
|
||||||
)
|
)
|
||||||
|
|
||||||
// noColorExists returns true if the environment variable NO_COLOR exists.
|
// noColorIsSet returns true if the environment variable NO_COLOR is set to a non-empty string.
|
||||||
func noColorExists() bool {
|
func noColorIsSet() bool {
|
||||||
_, exists := os.LookupEnv("NO_COLOR")
|
return os.Getenv("NO_COLOR") != ""
|
||||||
return exists
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Color defines a custom color object which is defined by SGR parameters.
|
// Color defines a custom color object which is defined by SGR parameters.
|
||||||
@ -66,6 +65,29 @@ const (
|
|||||||
CrossedOut
|
CrossedOut
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ResetBold Attribute = iota + 22
|
||||||
|
ResetItalic
|
||||||
|
ResetUnderline
|
||||||
|
ResetBlinking
|
||||||
|
_
|
||||||
|
ResetReversed
|
||||||
|
ResetConcealed
|
||||||
|
ResetCrossedOut
|
||||||
|
)
|
||||||
|
|
||||||
|
var mapResetAttributes map[Attribute]Attribute = map[Attribute]Attribute{
|
||||||
|
Bold: ResetBold,
|
||||||
|
Faint: ResetBold,
|
||||||
|
Italic: ResetItalic,
|
||||||
|
Underline: ResetUnderline,
|
||||||
|
BlinkSlow: ResetBlinking,
|
||||||
|
BlinkRapid: ResetBlinking,
|
||||||
|
ReverseVideo: ResetReversed,
|
||||||
|
Concealed: ResetConcealed,
|
||||||
|
CrossedOut: ResetCrossedOut,
|
||||||
|
}
|
||||||
|
|
||||||
// Foreground text colors
|
// Foreground text colors
|
||||||
const (
|
const (
|
||||||
FgBlack Attribute = iota + 30
|
FgBlack Attribute = iota + 30
|
||||||
@ -120,7 +142,7 @@ func New(value ...Attribute) *Color {
|
|||||||
params: make([]Attribute, 0),
|
params: make([]Attribute, 0),
|
||||||
}
|
}
|
||||||
|
|
||||||
if noColorExists() {
|
if noColorIsSet() {
|
||||||
c.noColor = boolPtr(true)
|
c.noColor = boolPtr(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +174,7 @@ func (c *Color) Set() *Color {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(Output, c.format())
|
fmt.Fprint(Output, c.format())
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,16 +186,21 @@ func (c *Color) unset() {
|
|||||||
Unset()
|
Unset()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Color) setWriter(w io.Writer) *Color {
|
// SetWriter is used to set the SGR sequence with the given io.Writer. This is
|
||||||
|
// a low-level function, and users should use the higher-level functions, such
|
||||||
|
// as color.Fprint, color.Print, etc.
|
||||||
|
func (c *Color) SetWriter(w io.Writer) *Color {
|
||||||
if c.isNoColorSet() {
|
if c.isNoColorSet() {
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(w, c.format())
|
fmt.Fprint(w, c.format())
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Color) unsetWriter(w io.Writer) {
|
// UnsetWriter resets all escape attributes and clears the output with the give
|
||||||
|
// io.Writer. Usually should be called after SetWriter().
|
||||||
|
func (c *Color) UnsetWriter(w io.Writer) {
|
||||||
if c.isNoColorSet() {
|
if c.isNoColorSet() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -192,20 +219,14 @@ func (c *Color) Add(value ...Attribute) *Color {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Color) prepend(value Attribute) {
|
|
||||||
c.params = append(c.params, 0)
|
|
||||||
copy(c.params[1:], c.params[0:])
|
|
||||||
c.params[0] = value
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fprint formats using the default formats for its operands and writes to w.
|
// Fprint formats using the default formats for its operands and writes to w.
|
||||||
// Spaces are added between operands when neither is a string.
|
// Spaces are added between operands when neither is a string.
|
||||||
// It returns the number of bytes written and any write error encountered.
|
// It returns the number of bytes written and any write error encountered.
|
||||||
// On Windows, users should wrap w with colorable.NewColorable() if w is of
|
// On Windows, users should wrap w with colorable.NewColorable() if w is of
|
||||||
// type *os.File.
|
// type *os.File.
|
||||||
func (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err error) {
|
func (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err error) {
|
||||||
c.setWriter(w)
|
c.SetWriter(w)
|
||||||
defer c.unsetWriter(w)
|
defer c.UnsetWriter(w)
|
||||||
|
|
||||||
return fmt.Fprint(w, a...)
|
return fmt.Fprint(w, a...)
|
||||||
}
|
}
|
||||||
@ -227,8 +248,8 @@ func (c *Color) Print(a ...interface{}) (n int, err error) {
|
|||||||
// On Windows, users should wrap w with colorable.NewColorable() if w is of
|
// On Windows, users should wrap w with colorable.NewColorable() if w is of
|
||||||
// type *os.File.
|
// type *os.File.
|
||||||
func (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {
|
func (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {
|
||||||
c.setWriter(w)
|
c.SetWriter(w)
|
||||||
defer c.unsetWriter(w)
|
defer c.UnsetWriter(w)
|
||||||
|
|
||||||
return fmt.Fprintf(w, format, a...)
|
return fmt.Fprintf(w, format, a...)
|
||||||
}
|
}
|
||||||
@ -248,10 +269,7 @@ func (c *Color) Printf(format string, a ...interface{}) (n int, err error) {
|
|||||||
// On Windows, users should wrap w with colorable.NewColorable() if w is of
|
// On Windows, users should wrap w with colorable.NewColorable() if w is of
|
||||||
// type *os.File.
|
// type *os.File.
|
||||||
func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
|
func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
|
||||||
c.setWriter(w)
|
return fmt.Fprintln(w, c.wrap(fmt.Sprint(a...)))
|
||||||
defer c.unsetWriter(w)
|
|
||||||
|
|
||||||
return fmt.Fprintln(w, a...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Println formats using the default formats for its operands and writes to
|
// Println formats using the default formats for its operands and writes to
|
||||||
@ -260,10 +278,7 @@ func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
|
|||||||
// encountered. This is the standard fmt.Print() method wrapped with the given
|
// encountered. This is the standard fmt.Print() method wrapped with the given
|
||||||
// color.
|
// color.
|
||||||
func (c *Color) Println(a ...interface{}) (n int, err error) {
|
func (c *Color) Println(a ...interface{}) (n int, err error) {
|
||||||
c.Set()
|
return fmt.Fprintln(Output, c.wrap(fmt.Sprint(a...)))
|
||||||
defer c.unset()
|
|
||||||
|
|
||||||
return fmt.Fprintln(Output, a...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sprint is just like Print, but returns a string instead of printing it.
|
// Sprint is just like Print, but returns a string instead of printing it.
|
||||||
@ -273,7 +288,7 @@ func (c *Color) Sprint(a ...interface{}) string {
|
|||||||
|
|
||||||
// Sprintln is just like Println, but returns a string instead of printing it.
|
// Sprintln is just like Println, but returns a string instead of printing it.
|
||||||
func (c *Color) Sprintln(a ...interface{}) string {
|
func (c *Color) Sprintln(a ...interface{}) string {
|
||||||
return c.wrap(fmt.Sprintln(a...))
|
return fmt.Sprintln(c.Sprint(a...))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sprintf is just like Printf, but returns a string instead of printing it.
|
// Sprintf is just like Printf, but returns a string instead of printing it.
|
||||||
@ -355,7 +370,7 @@ func (c *Color) SprintfFunc() func(format string, a ...interface{}) string {
|
|||||||
// string. Windows users should use this in conjunction with color.Output.
|
// string. Windows users should use this in conjunction with color.Output.
|
||||||
func (c *Color) SprintlnFunc() func(a ...interface{}) string {
|
func (c *Color) SprintlnFunc() func(a ...interface{}) string {
|
||||||
return func(a ...interface{}) string {
|
return func(a ...interface{}) string {
|
||||||
return c.wrap(fmt.Sprintln(a...))
|
return fmt.Sprintln(c.Sprint(a...))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,7 +400,18 @@ func (c *Color) format() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Color) unformat() string {
|
func (c *Color) unformat() string {
|
||||||
return fmt.Sprintf("%s[%dm", escape, Reset)
|
//return fmt.Sprintf("%s[%dm", escape, Reset)
|
||||||
|
//for each element in sequence let's use the speficic reset escape, ou the generic one if not found
|
||||||
|
format := make([]string, len(c.params))
|
||||||
|
for i, v := range c.params {
|
||||||
|
format[i] = strconv.Itoa(int(Reset))
|
||||||
|
ra, ok := mapResetAttributes[v]
|
||||||
|
if ok {
|
||||||
|
format[i] = strconv.Itoa(int(ra))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf("%s[%sm", escape, strings.Join(format, ";"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// DisableColor disables the color output. Useful to not change any existing
|
// DisableColor disables the color output. Useful to not change any existing
|
||||||
@ -396,7 +422,7 @@ func (c *Color) DisableColor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EnableColor enables the color output. Use it in conjunction with
|
// EnableColor enables the color output. Use it in conjunction with
|
||||||
// DisableColor(). Otherwise this method has no side effects.
|
// DisableColor(). Otherwise, this method has no side effects.
|
||||||
func (c *Color) EnableColor() {
|
func (c *Color) EnableColor() {
|
||||||
c.noColor = boolPtr(false)
|
c.noColor = boolPtr(false)
|
||||||
}
|
}
|
||||||
@ -413,6 +439,12 @@ func (c *Color) isNoColorSet() bool {
|
|||||||
|
|
||||||
// Equals returns a boolean value indicating whether two colors are equal.
|
// Equals returns a boolean value indicating whether two colors are equal.
|
||||||
func (c *Color) Equals(c2 *Color) bool {
|
func (c *Color) Equals(c2 *Color) bool {
|
||||||
|
if c == nil && c2 == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if c == nil || c2 == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
if len(c.params) != len(c2.params) {
|
if len(c.params) != len(c2.params) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
19
vendor/github.com/fatih/color/color_windows.go
generated
vendored
Normal file
19
vendor/github.com/fatih/color/color_windows.go
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package color
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"golang.org/x/sys/windows"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Opt-in for ansi color support for current process.
|
||||||
|
// https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#output-sequences
|
||||||
|
var outMode uint32
|
||||||
|
out := windows.Handle(os.Stdout.Fd())
|
||||||
|
if err := windows.GetConsoleMode(out, &outMode); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
outMode |= windows.ENABLE_PROCESSED_OUTPUT | windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING
|
||||||
|
_ = windows.SetConsoleMode(out, outMode)
|
||||||
|
}
|
137
vendor/github.com/fatih/color/doc.go
generated
vendored
137
vendor/github.com/fatih/color/doc.go
generated
vendored
@ -5,106 +5,105 @@ that suits you.
|
|||||||
|
|
||||||
Use simple and default helper functions with predefined foreground colors:
|
Use simple and default helper functions with predefined foreground colors:
|
||||||
|
|
||||||
color.Cyan("Prints text in cyan.")
|
color.Cyan("Prints text in cyan.")
|
||||||
|
|
||||||
// a newline will be appended automatically
|
// a newline will be appended automatically
|
||||||
color.Blue("Prints %s in blue.", "text")
|
color.Blue("Prints %s in blue.", "text")
|
||||||
|
|
||||||
// More default foreground colors..
|
// More default foreground colors..
|
||||||
color.Red("We have red")
|
color.Red("We have red")
|
||||||
color.Yellow("Yellow color too!")
|
color.Yellow("Yellow color too!")
|
||||||
color.Magenta("And many others ..")
|
color.Magenta("And many others ..")
|
||||||
|
|
||||||
// Hi-intensity colors
|
// Hi-intensity colors
|
||||||
color.HiGreen("Bright green color.")
|
color.HiGreen("Bright green color.")
|
||||||
color.HiBlack("Bright black means gray..")
|
color.HiBlack("Bright black means gray..")
|
||||||
color.HiWhite("Shiny white color!")
|
color.HiWhite("Shiny white color!")
|
||||||
|
|
||||||
However there are times where custom color mixes are required. Below are some
|
However, there are times when custom color mixes are required. Below are some
|
||||||
examples to create custom color objects and use the print functions of each
|
examples to create custom color objects and use the print functions of each
|
||||||
separate color object.
|
separate color object.
|
||||||
|
|
||||||
// Create a new color object
|
// Create a new color object
|
||||||
c := color.New(color.FgCyan).Add(color.Underline)
|
c := color.New(color.FgCyan).Add(color.Underline)
|
||||||
c.Println("Prints cyan text with an underline.")
|
c.Println("Prints cyan text with an underline.")
|
||||||
|
|
||||||
// Or just add them to New()
|
// Or just add them to New()
|
||||||
d := color.New(color.FgCyan, color.Bold)
|
d := color.New(color.FgCyan, color.Bold)
|
||||||
d.Printf("This prints bold cyan %s\n", "too!.")
|
d.Printf("This prints bold cyan %s\n", "too!.")
|
||||||
|
|
||||||
|
|
||||||
// Mix up foreground and background colors, create new mixes!
|
// Mix up foreground and background colors, create new mixes!
|
||||||
red := color.New(color.FgRed)
|
red := color.New(color.FgRed)
|
||||||
|
|
||||||
boldRed := red.Add(color.Bold)
|
boldRed := red.Add(color.Bold)
|
||||||
boldRed.Println("This will print text in bold red.")
|
boldRed.Println("This will print text in bold red.")
|
||||||
|
|
||||||
whiteBackground := red.Add(color.BgWhite)
|
whiteBackground := red.Add(color.BgWhite)
|
||||||
whiteBackground.Println("Red text with White background.")
|
whiteBackground.Println("Red text with White background.")
|
||||||
|
|
||||||
// Use your own io.Writer output
|
// Use your own io.Writer output
|
||||||
color.New(color.FgBlue).Fprintln(myWriter, "blue color!")
|
color.New(color.FgBlue).Fprintln(myWriter, "blue color!")
|
||||||
|
|
||||||
blue := color.New(color.FgBlue)
|
blue := color.New(color.FgBlue)
|
||||||
blue.Fprint(myWriter, "This will print text in blue.")
|
blue.Fprint(myWriter, "This will print text in blue.")
|
||||||
|
|
||||||
You can create PrintXxx functions to simplify even more:
|
You can create PrintXxx functions to simplify even more:
|
||||||
|
|
||||||
// Create a custom print function for convenient
|
// Create a custom print function for convenient
|
||||||
red := color.New(color.FgRed).PrintfFunc()
|
red := color.New(color.FgRed).PrintfFunc()
|
||||||
red("warning")
|
red("warning")
|
||||||
red("error: %s", err)
|
red("error: %s", err)
|
||||||
|
|
||||||
// Mix up multiple attributes
|
// Mix up multiple attributes
|
||||||
notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
|
notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
|
||||||
notice("don't forget this...")
|
notice("don't forget this...")
|
||||||
|
|
||||||
You can also FprintXxx functions to pass your own io.Writer:
|
You can also FprintXxx functions to pass your own io.Writer:
|
||||||
|
|
||||||
blue := color.New(FgBlue).FprintfFunc()
|
blue := color.New(FgBlue).FprintfFunc()
|
||||||
blue(myWriter, "important notice: %s", stars)
|
blue(myWriter, "important notice: %s", stars)
|
||||||
|
|
||||||
// Mix up with multiple attributes
|
|
||||||
success := color.New(color.Bold, color.FgGreen).FprintlnFunc()
|
|
||||||
success(myWriter, don't forget this...")
|
|
||||||
|
|
||||||
|
// Mix up with multiple attributes
|
||||||
|
success := color.New(color.Bold, color.FgGreen).FprintlnFunc()
|
||||||
|
success(myWriter, don't forget this...")
|
||||||
|
|
||||||
Or create SprintXxx functions to mix strings with other non-colorized strings:
|
Or create SprintXxx functions to mix strings with other non-colorized strings:
|
||||||
|
|
||||||
yellow := New(FgYellow).SprintFunc()
|
yellow := New(FgYellow).SprintFunc()
|
||||||
red := New(FgRed).SprintFunc()
|
red := New(FgRed).SprintFunc()
|
||||||
|
|
||||||
fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error"))
|
fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error"))
|
||||||
|
|
||||||
info := New(FgWhite, BgGreen).SprintFunc()
|
info := New(FgWhite, BgGreen).SprintFunc()
|
||||||
fmt.Printf("this %s rocks!\n", info("package"))
|
fmt.Printf("this %s rocks!\n", info("package"))
|
||||||
|
|
||||||
Windows support is enabled by default. All Print functions work as intended.
|
Windows support is enabled by default. All Print functions work as intended.
|
||||||
However only for color.SprintXXX functions, user should use fmt.FprintXXX and
|
However, only for color.SprintXXX functions, user should use fmt.FprintXXX and
|
||||||
set the output to color.Output:
|
set the output to color.Output:
|
||||||
|
|
||||||
fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
|
fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
|
||||||
|
|
||||||
info := New(FgWhite, BgGreen).SprintFunc()
|
info := New(FgWhite, BgGreen).SprintFunc()
|
||||||
fmt.Fprintf(color.Output, "this %s rocks!\n", info("package"))
|
fmt.Fprintf(color.Output, "this %s rocks!\n", info("package"))
|
||||||
|
|
||||||
Using with existing code is possible. Just use the Set() method to set the
|
Using with existing code is possible. Just use the Set() method to set the
|
||||||
standard output to the given parameters. That way a rewrite of an existing
|
standard output to the given parameters. That way a rewrite of an existing
|
||||||
code is not required.
|
code is not required.
|
||||||
|
|
||||||
// Use handy standard colors.
|
// Use handy standard colors.
|
||||||
color.Set(color.FgYellow)
|
color.Set(color.FgYellow)
|
||||||
|
|
||||||
fmt.Println("Existing text will be now in Yellow")
|
fmt.Println("Existing text will be now in Yellow")
|
||||||
fmt.Printf("This one %s\n", "too")
|
fmt.Printf("This one %s\n", "too")
|
||||||
|
|
||||||
color.Unset() // don't forget to unset
|
color.Unset() // don't forget to unset
|
||||||
|
|
||||||
// You can mix up parameters
|
// You can mix up parameters
|
||||||
color.Set(color.FgMagenta, color.Bold)
|
color.Set(color.FgMagenta, color.Bold)
|
||||||
defer color.Unset() // use it in your function
|
defer color.Unset() // use it in your function
|
||||||
|
|
||||||
fmt.Println("All text will be now bold magenta.")
|
fmt.Println("All text will be now bold magenta.")
|
||||||
|
|
||||||
There might be a case where you want to disable color output (for example to
|
There might be a case where you want to disable color output (for example to
|
||||||
pipe the standard output of your app to somewhere else). `Color` has support to
|
pipe the standard output of your app to somewhere else). `Color` has support to
|
||||||
@ -112,24 +111,24 @@ disable colors both globally and for single color definition. For example
|
|||||||
suppose you have a CLI app and a `--no-color` bool flag. You can easily disable
|
suppose you have a CLI app and a `--no-color` bool flag. You can easily disable
|
||||||
the color output with:
|
the color output with:
|
||||||
|
|
||||||
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
|
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
|
||||||
|
|
||||||
if *flagNoColor {
|
if *flagNoColor {
|
||||||
color.NoColor = true // disables colorized output
|
color.NoColor = true // disables colorized output
|
||||||
}
|
}
|
||||||
|
|
||||||
You can also disable the color by setting the NO_COLOR environment variable to any value.
|
You can also disable the color by setting the NO_COLOR environment variable to any value.
|
||||||
|
|
||||||
It also has support for single color definitions (local). You can
|
It also has support for single color definitions (local). You can
|
||||||
disable/enable color output on the fly:
|
disable/enable color output on the fly:
|
||||||
|
|
||||||
c := color.New(color.FgCyan)
|
c := color.New(color.FgCyan)
|
||||||
c.Println("Prints cyan text")
|
c.Println("Prints cyan text")
|
||||||
|
|
||||||
c.DisableColor()
|
c.DisableColor()
|
||||||
c.Println("This is printed without any color")
|
c.Println("This is printed without any color")
|
||||||
|
|
||||||
c.EnableColor()
|
c.EnableColor()
|
||||||
c.Println("This prints again cyan...")
|
c.Println("This prints again cyan...")
|
||||||
*/
|
*/
|
||||||
package color
|
package color
|
||||||
|
4
vendor/github.com/hashicorp/go-hclog/LICENSE
generated
vendored
4
vendor/github.com/hashicorp/go-hclog/LICENSE
generated
vendored
@ -1,6 +1,4 @@
|
|||||||
MIT License
|
Copyright (c) 2017 HashiCorp, Inc.
|
||||||
|
|
||||||
Copyright (c) 2017 HashiCorp
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
5
vendor/github.com/hashicorp/go-hclog/README.md
generated
vendored
5
vendor/github.com/hashicorp/go-hclog/README.md
generated
vendored
@ -140,9 +140,10 @@ log.Printf("[DEBUG] %d", 42)
|
|||||||
... [DEBUG] my-app: 42
|
... [DEBUG] my-app: 42
|
||||||
```
|
```
|
||||||
|
|
||||||
Notice that if `appLogger` is initialized with the `INFO` log level _and_ you
|
Notice that if `appLogger` is initialized with the `INFO` log level, _and_ you
|
||||||
specify `InferLevels: true`, you will not see any output here. You must change
|
specify `InferLevels: true`, you will not see any output here. You must change
|
||||||
`appLogger` to `DEBUG` to see output. See the docs for more information.
|
`appLogger` to `DEBUG` to see output. See the docs for more information.
|
||||||
|
|
||||||
If the log lines start with a timestamp you can use the
|
If the log lines start with a timestamp you can use the
|
||||||
`InferLevelsWithTimestamp` option to try and ignore them.
|
`InferLevelsWithTimestamp` option to try and ignore them. Please note that in order
|
||||||
|
for `InferLevelsWithTimestamp` to be relevant, `InferLevels` must be set to `true`.
|
||||||
|
35
vendor/github.com/hashicorp/go-hclog/colorize_unix.go
generated
vendored
35
vendor/github.com/hashicorp/go-hclog/colorize_unix.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
//go:build !windows
|
//go:build !windows
|
||||||
// +build !windows
|
// +build !windows
|
||||||
|
|
||||||
@ -7,23 +10,35 @@ import (
|
|||||||
"github.com/mattn/go-isatty"
|
"github.com/mattn/go-isatty"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// hasFD is used to check if the writer has an Fd value to check
|
||||||
|
// if it's a terminal.
|
||||||
|
type hasFD interface {
|
||||||
|
Fd() uintptr
|
||||||
|
}
|
||||||
|
|
||||||
// setColorization will mutate the values of this logger
|
// setColorization will mutate the values of this logger
|
||||||
// to appropriately configure colorization options. It provides
|
// to appropriately configure colorization options. It provides
|
||||||
// a wrapper to the output stream on Windows systems.
|
// a wrapper to the output stream on Windows systems.
|
||||||
func (l *intLogger) setColorization(opts *LoggerOptions) {
|
func (l *intLogger) setColorization(opts *LoggerOptions) {
|
||||||
switch opts.Color {
|
if opts.Color != AutoColor {
|
||||||
case ColorOff:
|
|
||||||
fallthrough
|
|
||||||
case ForceColor:
|
|
||||||
return
|
return
|
||||||
case AutoColor:
|
}
|
||||||
fi := l.checkWriterIsFile()
|
|
||||||
isUnixTerm := isatty.IsTerminal(fi.Fd())
|
if sc, ok := l.writer.w.(SupportsColor); ok {
|
||||||
isCygwinTerm := isatty.IsCygwinTerminal(fi.Fd())
|
if !sc.SupportsColor() {
|
||||||
isTerm := isUnixTerm || isCygwinTerm
|
|
||||||
if !isTerm {
|
|
||||||
l.headerColor = ColorOff
|
l.headerColor = ColorOff
|
||||||
l.writer.color = ColorOff
|
l.writer.color = ColorOff
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fi, ok := l.writer.w.(hasFD)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isatty.IsTerminal(fi.Fd()) {
|
||||||
|
l.headerColor = ColorOff
|
||||||
|
l.writer.color = ColorOff
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
41
vendor/github.com/hashicorp/go-hclog/colorize_windows.go
generated
vendored
41
vendor/github.com/hashicorp/go-hclog/colorize_windows.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
//go:build windows
|
//go:build windows
|
||||||
// +build windows
|
// +build windows
|
||||||
|
|
||||||
@ -7,32 +10,32 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
|
|
||||||
colorable "github.com/mattn/go-colorable"
|
colorable "github.com/mattn/go-colorable"
|
||||||
"github.com/mattn/go-isatty"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// setColorization will mutate the values of this logger
|
// setColorization will mutate the values of this logger
|
||||||
// to appropriately configure colorization options. It provides
|
// to appropriately configure colorization options. It provides
|
||||||
// a wrapper to the output stream on Windows systems.
|
// a wrapper to the output stream on Windows systems.
|
||||||
func (l *intLogger) setColorization(opts *LoggerOptions) {
|
func (l *intLogger) setColorization(opts *LoggerOptions) {
|
||||||
switch opts.Color {
|
if opts.Color == ColorOff {
|
||||||
case ColorOff:
|
|
||||||
return
|
return
|
||||||
case ForceColor:
|
}
|
||||||
fi := l.checkWriterIsFile()
|
|
||||||
l.writer.w = colorable.NewColorable(fi)
|
|
||||||
case AutoColor:
|
|
||||||
fi := l.checkWriterIsFile()
|
|
||||||
isUnixTerm := isatty.IsTerminal(os.Stdout.Fd())
|
|
||||||
isCygwinTerm := isatty.IsCygwinTerminal(os.Stdout.Fd())
|
|
||||||
isTerm := isUnixTerm || isCygwinTerm
|
|
||||||
if !isTerm {
|
|
||||||
l.writer.color = ColorOff
|
|
||||||
l.headerColor = ColorOff
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if l.headerColor == ColorOff {
|
fi, ok := l.writer.w.(*os.File)
|
||||||
l.writer.w = colorable.NewColorable(fi)
|
if !ok {
|
||||||
}
|
l.writer.color = ColorOff
|
||||||
|
l.headerColor = ColorOff
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cfi := colorable.NewColorable(fi)
|
||||||
|
|
||||||
|
// NewColorable detects if color is possible and if it's not, then it
|
||||||
|
// returns the original value. So we can test if we got the original
|
||||||
|
// value back to know if color is possible.
|
||||||
|
if cfi == fi {
|
||||||
|
l.writer.color = ColorOff
|
||||||
|
l.headerColor = ColorOff
|
||||||
|
} else {
|
||||||
|
l.writer.w = cfi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
vendor/github.com/hashicorp/go-hclog/context.go
generated
vendored
3
vendor/github.com/hashicorp/go-hclog/context.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
3
vendor/github.com/hashicorp/go-hclog/exclude.go
generated
vendored
3
vendor/github.com/hashicorp/go-hclog/exclude.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
3
vendor/github.com/hashicorp/go-hclog/global.go
generated
vendored
3
vendor/github.com/hashicorp/go-hclog/global.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
3
vendor/github.com/hashicorp/go-hclog/interceptlogger.go
generated
vendored
3
vendor/github.com/hashicorp/go-hclog/interceptlogger.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
323
vendor/github.com/hashicorp/go-hclog/intlogger.go
generated
vendored
323
vendor/github.com/hashicorp/go-hclog/intlogger.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -8,7 +11,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sort"
|
"sort"
|
||||||
@ -17,6 +19,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
"unicode"
|
||||||
|
"unicode/utf8"
|
||||||
|
|
||||||
"github.com/fatih/color"
|
"github.com/fatih/color"
|
||||||
)
|
)
|
||||||
@ -48,20 +52,41 @@ var (
|
|||||||
Warn: color.New(color.FgHiYellow),
|
Warn: color.New(color.FgHiYellow),
|
||||||
Error: color.New(color.FgHiRed),
|
Error: color.New(color.FgHiRed),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
faintBoldColor = color.New(color.Faint, color.Bold)
|
||||||
|
faintColor = color.New(color.Faint)
|
||||||
|
faintMultiLinePrefix string
|
||||||
|
faintFieldSeparator string
|
||||||
|
faintFieldSeparatorWithNewLine string
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Force all the colors to enabled because we do our own detection of color usage.
|
||||||
|
for _, c := range _levelToColor {
|
||||||
|
c.EnableColor()
|
||||||
|
}
|
||||||
|
|
||||||
|
faintBoldColor.EnableColor()
|
||||||
|
faintColor.EnableColor()
|
||||||
|
|
||||||
|
faintMultiLinePrefix = faintColor.Sprint(" | ")
|
||||||
|
faintFieldSeparator = faintColor.Sprint("=")
|
||||||
|
faintFieldSeparatorWithNewLine = faintColor.Sprint("=\n")
|
||||||
|
}
|
||||||
|
|
||||||
// Make sure that intLogger is a Logger
|
// Make sure that intLogger is a Logger
|
||||||
var _ Logger = &intLogger{}
|
var _ Logger = &intLogger{}
|
||||||
|
|
||||||
// intLogger is an internal logger implementation. Internal in that it is
|
// intLogger is an internal logger implementation. Internal in that it is
|
||||||
// defined entirely by this package.
|
// defined entirely by this package.
|
||||||
type intLogger struct {
|
type intLogger struct {
|
||||||
json bool
|
json bool
|
||||||
callerOffset int
|
jsonEscapeEnabled bool
|
||||||
name string
|
callerOffset int
|
||||||
timeFormat string
|
name string
|
||||||
timeFn TimeFunction
|
timeFormat string
|
||||||
disableTime bool
|
timeFn TimeFunction
|
||||||
|
disableTime bool
|
||||||
|
|
||||||
// This is an interface so that it's shared by any derived loggers, since
|
// This is an interface so that it's shared by any derived loggers, since
|
||||||
// those derived loggers share the bufio.Writer as well.
|
// those derived loggers share the bufio.Writer as well.
|
||||||
@ -69,7 +94,21 @@ type intLogger struct {
|
|||||||
writer *writer
|
writer *writer
|
||||||
level *int32
|
level *int32
|
||||||
|
|
||||||
|
// The value of curEpoch when our level was set
|
||||||
|
setEpoch uint64
|
||||||
|
|
||||||
|
// The value of curEpoch the last time we performed the level sync process
|
||||||
|
ownEpoch uint64
|
||||||
|
|
||||||
|
// Shared amongst all the loggers created in this hierachy, used to determine
|
||||||
|
// if the level sync process should be run by comparing it with ownEpoch
|
||||||
|
curEpoch *uint64
|
||||||
|
|
||||||
|
// The logger this one was created from. Only set when syncParentLevel is set
|
||||||
|
parent *intLogger
|
||||||
|
|
||||||
headerColor ColorOption
|
headerColor ColorOption
|
||||||
|
fieldColor ColorOption
|
||||||
|
|
||||||
implied []interface{}
|
implied []interface{}
|
||||||
|
|
||||||
@ -77,6 +116,9 @@ type intLogger struct {
|
|||||||
|
|
||||||
// create subloggers with their own level setting
|
// create subloggers with their own level setting
|
||||||
independentLevels bool
|
independentLevels bool
|
||||||
|
syncParentLevel bool
|
||||||
|
|
||||||
|
subloggerHook func(sub Logger) Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns a configured logger.
|
// New returns a configured logger.
|
||||||
@ -115,18 +157,24 @@ func newLogger(opts *LoggerOptions) *intLogger {
|
|||||||
mutex = new(sync.Mutex)
|
mutex = new(sync.Mutex)
|
||||||
}
|
}
|
||||||
|
|
||||||
var primaryColor, headerColor ColorOption
|
var (
|
||||||
|
|
||||||
if opts.ColorHeaderOnly {
|
|
||||||
primaryColor = ColorOff
|
primaryColor = ColorOff
|
||||||
|
headerColor = ColorOff
|
||||||
|
fieldColor = ColorOff
|
||||||
|
)
|
||||||
|
switch {
|
||||||
|
case opts.ColorHeaderOnly:
|
||||||
headerColor = opts.Color
|
headerColor = opts.Color
|
||||||
} else {
|
case opts.ColorHeaderAndFields:
|
||||||
|
fieldColor = opts.Color
|
||||||
|
headerColor = opts.Color
|
||||||
|
default:
|
||||||
primaryColor = opts.Color
|
primaryColor = opts.Color
|
||||||
headerColor = ColorOff
|
|
||||||
}
|
}
|
||||||
|
|
||||||
l := &intLogger{
|
l := &intLogger{
|
||||||
json: opts.JSONFormat,
|
json: opts.JSONFormat,
|
||||||
|
jsonEscapeEnabled: !opts.JSONEscapeDisabled,
|
||||||
name: opts.Name,
|
name: opts.Name,
|
||||||
timeFormat: TimeFormat,
|
timeFormat: TimeFormat,
|
||||||
timeFn: time.Now,
|
timeFn: time.Now,
|
||||||
@ -134,9 +182,13 @@ func newLogger(opts *LoggerOptions) *intLogger {
|
|||||||
mutex: mutex,
|
mutex: mutex,
|
||||||
writer: newWriter(output, primaryColor),
|
writer: newWriter(output, primaryColor),
|
||||||
level: new(int32),
|
level: new(int32),
|
||||||
|
curEpoch: new(uint64),
|
||||||
exclude: opts.Exclude,
|
exclude: opts.Exclude,
|
||||||
independentLevels: opts.IndependentLevels,
|
independentLevels: opts.IndependentLevels,
|
||||||
|
syncParentLevel: opts.SyncParentLevel,
|
||||||
headerColor: headerColor,
|
headerColor: headerColor,
|
||||||
|
fieldColor: fieldColor,
|
||||||
|
subloggerHook: opts.SubloggerHook,
|
||||||
}
|
}
|
||||||
if opts.IncludeLocation {
|
if opts.IncludeLocation {
|
||||||
l.callerOffset = offsetIntLogger + opts.AdditionalLocationOffset
|
l.callerOffset = offsetIntLogger + opts.AdditionalLocationOffset
|
||||||
@ -152,6 +204,10 @@ func newLogger(opts *LoggerOptions) *intLogger {
|
|||||||
l.timeFormat = opts.TimeFormat
|
l.timeFormat = opts.TimeFormat
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if l.subloggerHook == nil {
|
||||||
|
l.subloggerHook = identityHook
|
||||||
|
}
|
||||||
|
|
||||||
l.setColorization(opts)
|
l.setColorization(opts)
|
||||||
|
|
||||||
atomic.StoreInt32(l.level, int32(level))
|
atomic.StoreInt32(l.level, int32(level))
|
||||||
@ -159,6 +215,10 @@ func newLogger(opts *LoggerOptions) *intLogger {
|
|||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func identityHook(logger Logger) Logger {
|
||||||
|
return logger
|
||||||
|
}
|
||||||
|
|
||||||
// offsetIntLogger is the stack frame offset in the call stack for the caller to
|
// offsetIntLogger is the stack frame offset in the call stack for the caller to
|
||||||
// one of the Warn, Info, Log, etc methods.
|
// one of the Warn, Info, Log, etc methods.
|
||||||
const offsetIntLogger = 3
|
const offsetIntLogger = 3
|
||||||
@ -166,7 +226,7 @@ const offsetIntLogger = 3
|
|||||||
// Log a message and a set of key/value pairs if the given level is at
|
// Log a message and a set of key/value pairs if the given level is at
|
||||||
// or more severe that the threshold configured in the Logger.
|
// or more severe that the threshold configured in the Logger.
|
||||||
func (l *intLogger) log(name string, level Level, msg string, args ...interface{}) {
|
func (l *intLogger) log(name string, level Level, msg string, args ...interface{}) {
|
||||||
if level < Level(atomic.LoadInt32(l.level)) {
|
if level < l.GetLevel() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,7 +295,17 @@ func needsQuoting(str string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Non-JSON logging format function
|
// logPlain is the non-JSON logging format function which writes directly
|
||||||
|
// to the underlying writer the logger was initialized with.
|
||||||
|
//
|
||||||
|
// If the logger was initialized with a color function, it also handles
|
||||||
|
// applying the color to the log message.
|
||||||
|
//
|
||||||
|
// Color Options
|
||||||
|
// 1. No color.
|
||||||
|
// 2. Color the whole log line, based on the level.
|
||||||
|
// 3. Color only the header (level) part of the log line.
|
||||||
|
// 4. Color both the header and fields of the log line.
|
||||||
func (l *intLogger) logPlain(t time.Time, name string, level Level, msg string, args ...interface{}) {
|
func (l *intLogger) logPlain(t time.Time, name string, level Level, msg string, args ...interface{}) {
|
||||||
|
|
||||||
if !l.disableTime {
|
if !l.disableTime {
|
||||||
@ -281,7 +351,7 @@ func (l *intLogger) logPlain(t time.Time, name string, level Level, msg string,
|
|||||||
|
|
||||||
var stacktrace CapturedStacktrace
|
var stacktrace CapturedStacktrace
|
||||||
|
|
||||||
if args != nil && len(args) > 0 {
|
if len(args) > 0 {
|
||||||
if len(args)%2 != 0 {
|
if len(args)%2 != 0 {
|
||||||
cs, ok := args[len(args)-1].(CapturedStacktrace)
|
cs, ok := args[len(args)-1].(CapturedStacktrace)
|
||||||
if ok {
|
if ok {
|
||||||
@ -295,13 +365,16 @@ func (l *intLogger) logPlain(t time.Time, name string, level Level, msg string,
|
|||||||
|
|
||||||
l.writer.WriteByte(':')
|
l.writer.WriteByte(':')
|
||||||
|
|
||||||
|
// Handle the field arguments, which come in pairs (key=val).
|
||||||
FOR:
|
FOR:
|
||||||
for i := 0; i < len(args); i = i + 2 {
|
for i := 0; i < len(args); i = i + 2 {
|
||||||
var (
|
var (
|
||||||
|
key string
|
||||||
val string
|
val string
|
||||||
raw bool
|
raw bool
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Convert the field value to a string.
|
||||||
switch st := args[i+1].(type) {
|
switch st := args[i+1].(type) {
|
||||||
case string:
|
case string:
|
||||||
val = st
|
val = st
|
||||||
@ -353,8 +426,7 @@ func (l *intLogger) logPlain(t time.Time, name string, level Level, msg string,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var key string
|
// Convert the field key to a string.
|
||||||
|
|
||||||
switch st := args[i].(type) {
|
switch st := args[i].(type) {
|
||||||
case string:
|
case string:
|
||||||
key = st
|
key = st
|
||||||
@ -362,21 +434,49 @@ func (l *intLogger) logPlain(t time.Time, name string, level Level, msg string,
|
|||||||
key = fmt.Sprintf("%s", st)
|
key = fmt.Sprintf("%s", st)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Optionally apply the ANSI "faint" and "bold"
|
||||||
|
// SGR values to the key.
|
||||||
|
if l.fieldColor != ColorOff {
|
||||||
|
key = faintBoldColor.Sprint(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Values may contain multiple lines, and that format
|
||||||
|
// is preserved, with each line prefixed with a " | "
|
||||||
|
// to show it's part of a collection of lines.
|
||||||
|
//
|
||||||
|
// Values may also need quoting, if not all the runes
|
||||||
|
// in the value string are "normal", like if they
|
||||||
|
// contain ANSI escape sequences.
|
||||||
if strings.Contains(val, "\n") {
|
if strings.Contains(val, "\n") {
|
||||||
l.writer.WriteString("\n ")
|
l.writer.WriteString("\n ")
|
||||||
l.writer.WriteString(key)
|
l.writer.WriteString(key)
|
||||||
l.writer.WriteString("=\n")
|
if l.fieldColor != ColorOff {
|
||||||
writeIndent(l.writer, val, " | ")
|
l.writer.WriteString(faintFieldSeparatorWithNewLine)
|
||||||
|
writeIndent(l.writer, val, faintMultiLinePrefix)
|
||||||
|
} else {
|
||||||
|
l.writer.WriteString("=\n")
|
||||||
|
writeIndent(l.writer, val, " | ")
|
||||||
|
}
|
||||||
l.writer.WriteString(" ")
|
l.writer.WriteString(" ")
|
||||||
} else if !raw && needsQuoting(val) {
|
} else if !raw && needsQuoting(val) {
|
||||||
l.writer.WriteByte(' ')
|
l.writer.WriteByte(' ')
|
||||||
l.writer.WriteString(key)
|
l.writer.WriteString(key)
|
||||||
l.writer.WriteByte('=')
|
if l.fieldColor != ColorOff {
|
||||||
l.writer.WriteString(strconv.Quote(val))
|
l.writer.WriteString(faintFieldSeparator)
|
||||||
|
} else {
|
||||||
|
l.writer.WriteByte('=')
|
||||||
|
}
|
||||||
|
l.writer.WriteByte('"')
|
||||||
|
writeEscapedForOutput(l.writer, val, true)
|
||||||
|
l.writer.WriteByte('"')
|
||||||
} else {
|
} else {
|
||||||
l.writer.WriteByte(' ')
|
l.writer.WriteByte(' ')
|
||||||
l.writer.WriteString(key)
|
l.writer.WriteString(key)
|
||||||
l.writer.WriteByte('=')
|
if l.fieldColor != ColorOff {
|
||||||
|
l.writer.WriteString(faintFieldSeparator)
|
||||||
|
} else {
|
||||||
|
l.writer.WriteByte('=')
|
||||||
|
}
|
||||||
l.writer.WriteString(val)
|
l.writer.WriteString(val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -396,19 +496,98 @@ func writeIndent(w *writer, str string, indent string) {
|
|||||||
if nl == -1 {
|
if nl == -1 {
|
||||||
if str != "" {
|
if str != "" {
|
||||||
w.WriteString(indent)
|
w.WriteString(indent)
|
||||||
w.WriteString(str)
|
writeEscapedForOutput(w, str, false)
|
||||||
w.WriteString("\n")
|
w.WriteString("\n")
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
w.WriteString(indent)
|
w.WriteString(indent)
|
||||||
w.WriteString(str[:nl])
|
writeEscapedForOutput(w, str[:nl], false)
|
||||||
w.WriteString("\n")
|
w.WriteString("\n")
|
||||||
str = str[nl+1:]
|
str = str[nl+1:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func needsEscaping(str string) bool {
|
||||||
|
for _, b := range str {
|
||||||
|
if !unicode.IsPrint(b) || b == '"' {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
lowerhex = "0123456789abcdef"
|
||||||
|
)
|
||||||
|
|
||||||
|
var bufPool = sync.Pool{
|
||||||
|
New: func() interface{} {
|
||||||
|
return new(bytes.Buffer)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeEscapedForOutput(w io.Writer, str string, escapeQuotes bool) {
|
||||||
|
if !needsEscaping(str) {
|
||||||
|
w.Write([]byte(str))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bb := bufPool.Get().(*bytes.Buffer)
|
||||||
|
bb.Reset()
|
||||||
|
|
||||||
|
defer bufPool.Put(bb)
|
||||||
|
|
||||||
|
for _, r := range str {
|
||||||
|
if escapeQuotes && r == '"' {
|
||||||
|
bb.WriteString(`\"`)
|
||||||
|
} else if unicode.IsPrint(r) {
|
||||||
|
bb.WriteRune(r)
|
||||||
|
} else {
|
||||||
|
switch r {
|
||||||
|
case '\a':
|
||||||
|
bb.WriteString(`\a`)
|
||||||
|
case '\b':
|
||||||
|
bb.WriteString(`\b`)
|
||||||
|
case '\f':
|
||||||
|
bb.WriteString(`\f`)
|
||||||
|
case '\n':
|
||||||
|
bb.WriteString(`\n`)
|
||||||
|
case '\r':
|
||||||
|
bb.WriteString(`\r`)
|
||||||
|
case '\t':
|
||||||
|
bb.WriteString(`\t`)
|
||||||
|
case '\v':
|
||||||
|
bb.WriteString(`\v`)
|
||||||
|
default:
|
||||||
|
switch {
|
||||||
|
case r < ' ':
|
||||||
|
bb.WriteString(`\x`)
|
||||||
|
bb.WriteByte(lowerhex[byte(r)>>4])
|
||||||
|
bb.WriteByte(lowerhex[byte(r)&0xF])
|
||||||
|
case !utf8.ValidRune(r):
|
||||||
|
r = 0xFFFD
|
||||||
|
fallthrough
|
||||||
|
case r < 0x10000:
|
||||||
|
bb.WriteString(`\u`)
|
||||||
|
for s := 12; s >= 0; s -= 4 {
|
||||||
|
bb.WriteByte(lowerhex[r>>uint(s)&0xF])
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
bb.WriteString(`\U`)
|
||||||
|
for s := 28; s >= 0; s -= 4 {
|
||||||
|
bb.WriteByte(lowerhex[r>>uint(s)&0xF])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Write(bb.Bytes())
|
||||||
|
}
|
||||||
|
|
||||||
func (l *intLogger) renderSlice(v reflect.Value) string {
|
func (l *intLogger) renderSlice(v reflect.Value) string {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
|
|
||||||
@ -450,7 +629,7 @@ func (l *intLogger) logJSON(t time.Time, name string, level Level, msg string, a
|
|||||||
vals := l.jsonMapEntry(t, name, level, msg)
|
vals := l.jsonMapEntry(t, name, level, msg)
|
||||||
args = append(l.implied, args...)
|
args = append(l.implied, args...)
|
||||||
|
|
||||||
if args != nil && len(args) > 0 {
|
if len(args) > 0 {
|
||||||
if len(args)%2 != 0 {
|
if len(args)%2 != 0 {
|
||||||
cs, ok := args[len(args)-1].(CapturedStacktrace)
|
cs, ok := args[len(args)-1].(CapturedStacktrace)
|
||||||
if ok {
|
if ok {
|
||||||
@ -490,13 +669,17 @@ func (l *intLogger) logJSON(t time.Time, name string, level Level, msg string, a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err := json.NewEncoder(l.writer).Encode(vals)
|
encoder := json.NewEncoder(l.writer)
|
||||||
|
encoder.SetEscapeHTML(l.jsonEscapeEnabled)
|
||||||
|
err := encoder.Encode(vals)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if _, ok := err.(*json.UnsupportedTypeError); ok {
|
if _, ok := err.(*json.UnsupportedTypeError); ok {
|
||||||
plainVal := l.jsonMapEntry(t, name, level, msg)
|
plainVal := l.jsonMapEntry(t, name, level, msg)
|
||||||
plainVal["@warn"] = errJsonUnsupportedTypeMsg
|
plainVal["@warn"] = errJsonUnsupportedTypeMsg
|
||||||
|
|
||||||
json.NewEncoder(l.writer).Encode(plainVal)
|
errEncoder := json.NewEncoder(l.writer)
|
||||||
|
errEncoder.SetEscapeHTML(l.jsonEscapeEnabled)
|
||||||
|
errEncoder.Encode(plainVal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -571,27 +754,27 @@ func (l *intLogger) Error(msg string, args ...interface{}) {
|
|||||||
|
|
||||||
// Indicate that the logger would emit TRACE level logs
|
// Indicate that the logger would emit TRACE level logs
|
||||||
func (l *intLogger) IsTrace() bool {
|
func (l *intLogger) IsTrace() bool {
|
||||||
return Level(atomic.LoadInt32(l.level)) == Trace
|
return l.GetLevel() == Trace
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indicate that the logger would emit DEBUG level logs
|
// Indicate that the logger would emit DEBUG level logs
|
||||||
func (l *intLogger) IsDebug() bool {
|
func (l *intLogger) IsDebug() bool {
|
||||||
return Level(atomic.LoadInt32(l.level)) <= Debug
|
return l.GetLevel() <= Debug
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indicate that the logger would emit INFO level logs
|
// Indicate that the logger would emit INFO level logs
|
||||||
func (l *intLogger) IsInfo() bool {
|
func (l *intLogger) IsInfo() bool {
|
||||||
return Level(atomic.LoadInt32(l.level)) <= Info
|
return l.GetLevel() <= Info
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indicate that the logger would emit WARN level logs
|
// Indicate that the logger would emit WARN level logs
|
||||||
func (l *intLogger) IsWarn() bool {
|
func (l *intLogger) IsWarn() bool {
|
||||||
return Level(atomic.LoadInt32(l.level)) <= Warn
|
return l.GetLevel() <= Warn
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indicate that the logger would emit ERROR level logs
|
// Indicate that the logger would emit ERROR level logs
|
||||||
func (l *intLogger) IsError() bool {
|
func (l *intLogger) IsError() bool {
|
||||||
return Level(atomic.LoadInt32(l.level)) <= Error
|
return l.GetLevel() <= Error
|
||||||
}
|
}
|
||||||
|
|
||||||
const MissingKey = "EXTRA_VALUE_AT_END"
|
const MissingKey = "EXTRA_VALUE_AT_END"
|
||||||
@ -641,7 +824,7 @@ func (l *intLogger) With(args ...interface{}) Logger {
|
|||||||
sl.implied = append(sl.implied, MissingKey, extra)
|
sl.implied = append(sl.implied, MissingKey, extra)
|
||||||
}
|
}
|
||||||
|
|
||||||
return sl
|
return l.subloggerHook(sl)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new sub-Logger that a name decending from the current name.
|
// Create a new sub-Logger that a name decending from the current name.
|
||||||
@ -655,7 +838,7 @@ func (l *intLogger) Named(name string) Logger {
|
|||||||
sl.name = name
|
sl.name = name
|
||||||
}
|
}
|
||||||
|
|
||||||
return sl
|
return l.subloggerHook(sl)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new sub-Logger with an explicit name. This ignores the current
|
// Create a new sub-Logger with an explicit name. This ignores the current
|
||||||
@ -666,7 +849,7 @@ func (l *intLogger) ResetNamed(name string) Logger {
|
|||||||
|
|
||||||
sl.name = name
|
sl.name = name
|
||||||
|
|
||||||
return sl
|
return l.subloggerHook(sl)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *intLogger) ResetOutput(opts *LoggerOptions) error {
|
func (l *intLogger) ResetOutput(opts *LoggerOptions) error {
|
||||||
@ -707,7 +890,63 @@ func (l *intLogger) resetOutput(opts *LoggerOptions) error {
|
|||||||
// Update the logging level on-the-fly. This will affect all subloggers as
|
// Update the logging level on-the-fly. This will affect all subloggers as
|
||||||
// well.
|
// well.
|
||||||
func (l *intLogger) SetLevel(level Level) {
|
func (l *intLogger) SetLevel(level Level) {
|
||||||
atomic.StoreInt32(l.level, int32(level))
|
if !l.syncParentLevel {
|
||||||
|
atomic.StoreInt32(l.level, int32(level))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
nsl := new(int32)
|
||||||
|
*nsl = int32(level)
|
||||||
|
|
||||||
|
l.level = nsl
|
||||||
|
|
||||||
|
l.ownEpoch = atomic.AddUint64(l.curEpoch, 1)
|
||||||
|
l.setEpoch = l.ownEpoch
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *intLogger) searchLevelPtr() *int32 {
|
||||||
|
p := l.parent
|
||||||
|
|
||||||
|
ptr := l.level
|
||||||
|
|
||||||
|
max := l.setEpoch
|
||||||
|
|
||||||
|
for p != nil {
|
||||||
|
if p.setEpoch > max {
|
||||||
|
max = p.setEpoch
|
||||||
|
ptr = p.level
|
||||||
|
}
|
||||||
|
|
||||||
|
p = p.parent
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the current level
|
||||||
|
func (l *intLogger) GetLevel() Level {
|
||||||
|
// We perform the loads immediately to keep the CPU pipeline busy, which
|
||||||
|
// effectively makes the second load cost nothing. Once loaded into registers
|
||||||
|
// the comparison returns the already loaded value. The comparison is almost
|
||||||
|
// always true, so the branch predictor should hit consistently with it.
|
||||||
|
var (
|
||||||
|
curEpoch = atomic.LoadUint64(l.curEpoch)
|
||||||
|
level = Level(atomic.LoadInt32(l.level))
|
||||||
|
own = l.ownEpoch
|
||||||
|
)
|
||||||
|
|
||||||
|
if curEpoch == own {
|
||||||
|
return level
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform the level sync process. We'll avoid doing this next time by seeing the
|
||||||
|
// epoch as current.
|
||||||
|
|
||||||
|
ptr := l.searchLevelPtr()
|
||||||
|
l.level = ptr
|
||||||
|
l.ownEpoch = curEpoch
|
||||||
|
|
||||||
|
return Level(atomic.LoadInt32(ptr))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a *log.Logger that will send it's data through this Logger. This
|
// Create a *log.Logger that will send it's data through this Logger. This
|
||||||
@ -737,16 +976,6 @@ func (l *intLogger) StandardWriter(opts *StandardLoggerOptions) io.Writer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// checks if the underlying io.Writer is a file, and
|
|
||||||
// panics if not. For use by colorization.
|
|
||||||
func (l *intLogger) checkWriterIsFile() *os.File {
|
|
||||||
fi, ok := l.writer.w.(*os.File)
|
|
||||||
if !ok {
|
|
||||||
panic("Cannot enable coloring of non-file Writers")
|
|
||||||
}
|
|
||||||
return fi
|
|
||||||
}
|
|
||||||
|
|
||||||
// Accept implements the SinkAdapter interface
|
// Accept implements the SinkAdapter interface
|
||||||
func (i *intLogger) Accept(name string, level Level, msg string, args ...interface{}) {
|
func (i *intLogger) Accept(name string, level Level, msg string, args ...interface{}) {
|
||||||
i.log(name, level, msg, args...)
|
i.log(name, level, msg, args...)
|
||||||
@ -770,6 +999,8 @@ func (l *intLogger) copy() *intLogger {
|
|||||||
if l.independentLevels {
|
if l.independentLevels {
|
||||||
sl.level = new(int32)
|
sl.level = new(int32)
|
||||||
*sl.level = *l.level
|
*sl.level = *l.level
|
||||||
|
} else if l.syncParentLevel {
|
||||||
|
sl.parent = l
|
||||||
}
|
}
|
||||||
|
|
||||||
return &sl
|
return &sl
|
||||||
|
46
vendor/github.com/hashicorp/go-hclog/logger.go
generated
vendored
46
vendor/github.com/hashicorp/go-hclog/logger.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -89,6 +92,13 @@ const (
|
|||||||
ForceColor
|
ForceColor
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// SupportsColor is an optional interface that can be implemented by the output
|
||||||
|
// value. If implemented and SupportsColor() returns true, then AutoColor will
|
||||||
|
// enable colorization.
|
||||||
|
type SupportsColor interface {
|
||||||
|
SupportsColor() bool
|
||||||
|
}
|
||||||
|
|
||||||
// LevelFromString returns a Level type for the named log level, or "NoLevel" if
|
// LevelFromString returns a Level type for the named log level, or "NoLevel" if
|
||||||
// the level string is invalid. This facilitates setting the log level via
|
// the level string is invalid. This facilitates setting the log level via
|
||||||
// config or environment variable by name in a predictable way.
|
// config or environment variable by name in a predictable way.
|
||||||
@ -198,6 +208,9 @@ type Logger interface {
|
|||||||
// implementation cannot update the level on the fly, it should no-op.
|
// implementation cannot update the level on the fly, it should no-op.
|
||||||
SetLevel(level Level)
|
SetLevel(level Level)
|
||||||
|
|
||||||
|
// Returns the current level
|
||||||
|
GetLevel() Level
|
||||||
|
|
||||||
// Return a value that conforms to the stdlib log.Logger interface
|
// Return a value that conforms to the stdlib log.Logger interface
|
||||||
StandardLogger(opts *StandardLoggerOptions) *log.Logger
|
StandardLogger(opts *StandardLoggerOptions) *log.Logger
|
||||||
|
|
||||||
@ -220,6 +233,7 @@ type StandardLoggerOptions struct {
|
|||||||
// [DEBUG] and strip it off before reapplying it.
|
// [DEBUG] and strip it off before reapplying it.
|
||||||
// The timestamp detection may result in false positives and incomplete
|
// The timestamp detection may result in false positives and incomplete
|
||||||
// string outputs.
|
// string outputs.
|
||||||
|
// InferLevelsWithTimestamp is only relevant if InferLevels is true.
|
||||||
InferLevelsWithTimestamp bool
|
InferLevelsWithTimestamp bool
|
||||||
|
|
||||||
// ForceLevel is used to force all output from the standard logger to be at
|
// ForceLevel is used to force all output from the standard logger to be at
|
||||||
@ -250,6 +264,9 @@ type LoggerOptions struct {
|
|||||||
// Control if the output should be in JSON.
|
// Control if the output should be in JSON.
|
||||||
JSONFormat bool
|
JSONFormat bool
|
||||||
|
|
||||||
|
// Control the escape switch of json.Encoder
|
||||||
|
JSONEscapeDisabled bool
|
||||||
|
|
||||||
// Include file and line information in each log line
|
// Include file and line information in each log line
|
||||||
IncludeLocation bool
|
IncludeLocation bool
|
||||||
|
|
||||||
@ -274,6 +291,10 @@ type LoggerOptions struct {
|
|||||||
// Only color the header, not the body. This can help with readability of long messages.
|
// Only color the header, not the body. This can help with readability of long messages.
|
||||||
ColorHeaderOnly bool
|
ColorHeaderOnly bool
|
||||||
|
|
||||||
|
// Color the header and message body fields. This can help with readability
|
||||||
|
// of long messages with multiple fields.
|
||||||
|
ColorHeaderAndFields bool
|
||||||
|
|
||||||
// A function which is called with the log information and if it returns true the value
|
// A function which is called with the log information and if it returns true the value
|
||||||
// should not be logged.
|
// should not be logged.
|
||||||
// This is useful when interacting with a system that you wish to suppress the log
|
// This is useful when interacting with a system that you wish to suppress the log
|
||||||
@ -285,6 +306,31 @@ type LoggerOptions struct {
|
|||||||
// logger will not affect any subloggers, and SetLevel on any subloggers
|
// logger will not affect any subloggers, and SetLevel on any subloggers
|
||||||
// will not affect the parent or sibling loggers.
|
// will not affect the parent or sibling loggers.
|
||||||
IndependentLevels bool
|
IndependentLevels bool
|
||||||
|
|
||||||
|
// When set, changing the level of a logger effects only it's direct sub-loggers
|
||||||
|
// rather than all sub-loggers. For example:
|
||||||
|
// a := logger.Named("a")
|
||||||
|
// a.SetLevel(Error)
|
||||||
|
// b := a.Named("b")
|
||||||
|
// c := a.Named("c")
|
||||||
|
// b.GetLevel() => Error
|
||||||
|
// c.GetLevel() => Error
|
||||||
|
// b.SetLevel(Info)
|
||||||
|
// a.GetLevel() => Error
|
||||||
|
// b.GetLevel() => Info
|
||||||
|
// c.GetLevel() => Error
|
||||||
|
// a.SetLevel(Warn)
|
||||||
|
// a.GetLevel() => Warn
|
||||||
|
// b.GetLevel() => Warn
|
||||||
|
// c.GetLevel() => Warn
|
||||||
|
SyncParentLevel bool
|
||||||
|
|
||||||
|
// SubloggerHook registers a function that is called when a sublogger via
|
||||||
|
// Named, With, or ResetNamed is created. If defined, the function is passed
|
||||||
|
// the newly created Logger and the returned Logger is returned from the
|
||||||
|
// original function. This option allows customization via interception and
|
||||||
|
// wrapping of Logger instances.
|
||||||
|
SubloggerHook func(sub Logger) Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// InterceptLogger describes the interface for using a logger
|
// InterceptLogger describes the interface for using a logger
|
||||||
|
5
vendor/github.com/hashicorp/go-hclog/nulllogger.go
generated
vendored
5
vendor/github.com/hashicorp/go-hclog/nulllogger.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -49,6 +52,8 @@ func (l *nullLogger) ResetNamed(name string) Logger { return l }
|
|||||||
|
|
||||||
func (l *nullLogger) SetLevel(level Level) {}
|
func (l *nullLogger) SetLevel(level Level) {}
|
||||||
|
|
||||||
|
func (l *nullLogger) GetLevel() Level { return NoLevel }
|
||||||
|
|
||||||
func (l *nullLogger) StandardLogger(opts *StandardLoggerOptions) *log.Logger {
|
func (l *nullLogger) StandardLogger(opts *StandardLoggerOptions) *log.Logger {
|
||||||
return log.New(l.StandardWriter(opts), "", log.LstdFlags)
|
return log.New(l.StandardWriter(opts), "", log.LstdFlags)
|
||||||
}
|
}
|
||||||
|
3
vendor/github.com/hashicorp/go-hclog/stdlog.go
generated
vendored
3
vendor/github.com/hashicorp/go-hclog/stdlog.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
3
vendor/github.com/hashicorp/go-hclog/writer.go
generated
vendored
3
vendor/github.com/hashicorp/go-hclog/writer.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
package hclog
|
package hclog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
1
vendor/github.com/hashicorp/go-retryablehttp/.go-version
generated
vendored
Normal file
1
vendor/github.com/hashicorp/go-retryablehttp/.go-version
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
1.22.2
|
33
vendor/github.com/hashicorp/go-retryablehttp/CHANGELOG.md
generated
vendored
Normal file
33
vendor/github.com/hashicorp/go-retryablehttp/CHANGELOG.md
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
## 0.7.7 (May 30, 2024)
|
||||||
|
|
||||||
|
BUG FIXES:
|
||||||
|
|
||||||
|
- client: avoid potentially leaking URL-embedded basic authentication credentials in logs (#158)
|
||||||
|
|
||||||
|
## 0.7.6 (May 9, 2024)
|
||||||
|
|
||||||
|
ENHANCEMENTS:
|
||||||
|
|
||||||
|
- client: support a `RetryPrepare` function for modifying the request before retrying (#216)
|
||||||
|
- client: support HTTP-date values for `Retry-After` header value (#138)
|
||||||
|
- client: avoid reading entire body when the body is a `*bytes.Reader` (#197)
|
||||||
|
|
||||||
|
BUG FIXES:
|
||||||
|
|
||||||
|
- client: fix a broken check for invalid server certificate in go 1.20+ (#210)
|
||||||
|
|
||||||
|
## 0.7.5 (Nov 8, 2023)
|
||||||
|
|
||||||
|
BUG FIXES:
|
||||||
|
|
||||||
|
- client: fixes an issue where the request body is not preserved on temporary redirects or re-established HTTP/2 connections (#207)
|
||||||
|
|
||||||
|
## 0.7.4 (Jun 6, 2023)
|
||||||
|
|
||||||
|
BUG FIXES:
|
||||||
|
|
||||||
|
- client: fixing an issue where the Content-Type header wouldn't be sent with an empty payload when using HTTP/2 (#194)
|
||||||
|
|
||||||
|
## 0.7.3 (May 15, 2023)
|
||||||
|
|
||||||
|
Initial release
|
1
vendor/github.com/hashicorp/go-retryablehttp/CODEOWNERS
generated
vendored
Normal file
1
vendor/github.com/hashicorp/go-retryablehttp/CODEOWNERS
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
* @hashicorp/go-retryablehttp-maintainers
|
2
vendor/github.com/hashicorp/go-retryablehttp/LICENSE
generated
vendored
2
vendor/github.com/hashicorp/go-retryablehttp/LICENSE
generated
vendored
@ -1,3 +1,5 @@
|
|||||||
|
Copyright (c) 2015 HashiCorp, Inc.
|
||||||
|
|
||||||
Mozilla Public License, version 2.0
|
Mozilla Public License, version 2.0
|
||||||
|
|
||||||
1. Definitions
|
1. Definitions
|
||||||
|
2
vendor/github.com/hashicorp/go-retryablehttp/Makefile
generated
vendored
2
vendor/github.com/hashicorp/go-retryablehttp/Makefile
generated
vendored
@ -2,7 +2,7 @@ default: test
|
|||||||
|
|
||||||
test:
|
test:
|
||||||
go vet ./...
|
go vet ./...
|
||||||
go test -race ./...
|
go test -v -race ./...
|
||||||
|
|
||||||
updatedeps:
|
updatedeps:
|
||||||
go get -f -t -u ./...
|
go get -f -t -u ./...
|
||||||
|
2
vendor/github.com/hashicorp/go-retryablehttp/README.md
generated
vendored
2
vendor/github.com/hashicorp/go-retryablehttp/README.md
generated
vendored
@ -59,4 +59,4 @@ standardClient := retryClient.StandardClient() // *http.Client
|
|||||||
```
|
```
|
||||||
|
|
||||||
For more usage and examples see the
|
For more usage and examples see the
|
||||||
[godoc](http://godoc.org/github.com/hashicorp/go-retryablehttp).
|
[pkg.go.dev](https://pkg.go.dev/github.com/hashicorp/go-retryablehttp).
|
||||||
|
14
vendor/github.com/hashicorp/go-retryablehttp/cert_error_go119.go
generated
vendored
Normal file
14
vendor/github.com/hashicorp/go-retryablehttp/cert_error_go119.go
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
|
//go:build !go1.20
|
||||||
|
// +build !go1.20
|
||||||
|
|
||||||
|
package retryablehttp
|
||||||
|
|
||||||
|
import "crypto/x509"
|
||||||
|
|
||||||
|
func isCertError(err error) bool {
|
||||||
|
_, ok := err.(x509.UnknownAuthorityError)
|
||||||
|
return ok
|
||||||
|
}
|
14
vendor/github.com/hashicorp/go-retryablehttp/cert_error_go120.go
generated
vendored
Normal file
14
vendor/github.com/hashicorp/go-retryablehttp/cert_error_go120.go
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
|
//go:build go1.20
|
||||||
|
// +build go1.20
|
||||||
|
|
||||||
|
package retryablehttp
|
||||||
|
|
||||||
|
import "crypto/tls"
|
||||||
|
|
||||||
|
func isCertError(err error) bool {
|
||||||
|
_, ok := err.(*tls.CertificateVerificationError)
|
||||||
|
return ok
|
||||||
|
}
|
249
vendor/github.com/hashicorp/go-retryablehttp/client.go
generated
vendored
249
vendor/github.com/hashicorp/go-retryablehttp/client.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
// Package retryablehttp provides a familiar HTTP client interface with
|
// Package retryablehttp provides a familiar HTTP client interface with
|
||||||
// automatic retries and exponential backoff. It is a thin wrapper over the
|
// automatic retries and exponential backoff. It is a thin wrapper over the
|
||||||
// standard net/http client library and exposes nearly the same public API.
|
// standard net/http client library and exposes nearly the same public API.
|
||||||
@ -24,10 +27,8 @@ package retryablehttp
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"crypto/x509"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
@ -60,6 +61,10 @@ var (
|
|||||||
// limit the size we consume to respReadLimit.
|
// limit the size we consume to respReadLimit.
|
||||||
respReadLimit = int64(4096)
|
respReadLimit = int64(4096)
|
||||||
|
|
||||||
|
// timeNow sets the function that returns the current time.
|
||||||
|
// This defaults to time.Now. Changes to this should only be done in tests.
|
||||||
|
timeNow = time.Now
|
||||||
|
|
||||||
// A regular expression to match the error returned by net/http when the
|
// A regular expression to match the error returned by net/http when the
|
||||||
// configured number of redirects is exhausted. This error isn't typed
|
// configured number of redirects is exhausted. This error isn't typed
|
||||||
// specifically so we resort to matching on the error string.
|
// specifically so we resort to matching on the error string.
|
||||||
@ -69,11 +74,33 @@ var (
|
|||||||
// scheme specified in the URL is invalid. This error isn't typed
|
// scheme specified in the URL is invalid. This error isn't typed
|
||||||
// specifically so we resort to matching on the error string.
|
// specifically so we resort to matching on the error string.
|
||||||
schemeErrorRe = regexp.MustCompile(`unsupported protocol scheme`)
|
schemeErrorRe = regexp.MustCompile(`unsupported protocol scheme`)
|
||||||
|
|
||||||
|
// A regular expression to match the error returned by net/http when a
|
||||||
|
// request header or value is invalid. This error isn't typed
|
||||||
|
// specifically so we resort to matching on the error string.
|
||||||
|
invalidHeaderErrorRe = regexp.MustCompile(`invalid header`)
|
||||||
|
|
||||||
|
// A regular expression to match the error returned by net/http when the
|
||||||
|
// TLS certificate is not trusted. This error isn't typed
|
||||||
|
// specifically so we resort to matching on the error string.
|
||||||
|
notTrustedErrorRe = regexp.MustCompile(`certificate is not trusted`)
|
||||||
)
|
)
|
||||||
|
|
||||||
// ReaderFunc is the type of function that can be given natively to NewRequest
|
// ReaderFunc is the type of function that can be given natively to NewRequest
|
||||||
type ReaderFunc func() (io.Reader, error)
|
type ReaderFunc func() (io.Reader, error)
|
||||||
|
|
||||||
|
// ResponseHandlerFunc is a type of function that takes in a Response, and does something with it.
|
||||||
|
// The ResponseHandlerFunc is called when the HTTP client successfully receives a response and the
|
||||||
|
// CheckRetry function indicates that a retry of the base request is not necessary.
|
||||||
|
// If an error is returned from this function, the CheckRetry policy will be used to determine
|
||||||
|
// whether to retry the whole request (including this handler).
|
||||||
|
//
|
||||||
|
// Make sure to check status codes! Even if the request was completed it may have a non-2xx status code.
|
||||||
|
//
|
||||||
|
// The response body is not automatically closed. It must be closed either by the ResponseHandlerFunc or
|
||||||
|
// by the caller out-of-band. Failure to do so will result in a memory leak.
|
||||||
|
type ResponseHandlerFunc func(*http.Response) error
|
||||||
|
|
||||||
// LenReader is an interface implemented by many in-memory io.Reader's. Used
|
// LenReader is an interface implemented by many in-memory io.Reader's. Used
|
||||||
// for automatically sending the right Content-Length header when possible.
|
// for automatically sending the right Content-Length header when possible.
|
||||||
type LenReader interface {
|
type LenReader interface {
|
||||||
@ -86,6 +113,8 @@ type Request struct {
|
|||||||
// used to rewind the request data in between retries.
|
// used to rewind the request data in between retries.
|
||||||
body ReaderFunc
|
body ReaderFunc
|
||||||
|
|
||||||
|
responseHandler ResponseHandlerFunc
|
||||||
|
|
||||||
// Embed an HTTP request directly. This makes a *Request act exactly
|
// Embed an HTTP request directly. This makes a *Request act exactly
|
||||||
// like an *http.Request so that all meta methods are supported.
|
// like an *http.Request so that all meta methods are supported.
|
||||||
*http.Request
|
*http.Request
|
||||||
@ -94,8 +123,16 @@ type Request struct {
|
|||||||
// WithContext returns wrapped Request with a shallow copy of underlying *http.Request
|
// WithContext returns wrapped Request with a shallow copy of underlying *http.Request
|
||||||
// with its context changed to ctx. The provided ctx must be non-nil.
|
// with its context changed to ctx. The provided ctx must be non-nil.
|
||||||
func (r *Request) WithContext(ctx context.Context) *Request {
|
func (r *Request) WithContext(ctx context.Context) *Request {
|
||||||
r.Request = r.Request.WithContext(ctx)
|
return &Request{
|
||||||
return r
|
body: r.body,
|
||||||
|
responseHandler: r.responseHandler,
|
||||||
|
Request: r.Request.WithContext(ctx),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetResponseHandler allows setting the response handler.
|
||||||
|
func (r *Request) SetResponseHandler(fn ResponseHandlerFunc) {
|
||||||
|
r.responseHandler = fn
|
||||||
}
|
}
|
||||||
|
|
||||||
// BodyBytes allows accessing the request body. It is an analogue to
|
// BodyBytes allows accessing the request body. It is an analogue to
|
||||||
@ -130,6 +167,20 @@ func (r *Request) SetBody(rawBody interface{}) error {
|
|||||||
}
|
}
|
||||||
r.body = bodyReader
|
r.body = bodyReader
|
||||||
r.ContentLength = contentLength
|
r.ContentLength = contentLength
|
||||||
|
if bodyReader != nil {
|
||||||
|
r.GetBody = func() (io.ReadCloser, error) {
|
||||||
|
body, err := bodyReader()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if rc, ok := body.(io.ReadCloser); ok {
|
||||||
|
return rc, nil
|
||||||
|
}
|
||||||
|
return io.NopCloser(body), nil
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
r.GetBody = func() (io.ReadCloser, error) { return http.NoBody, nil }
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,21 +255,19 @@ func getBodyReaderAndContentLength(rawBody interface{}) (ReaderFunc, int64, erro
|
|||||||
// deal with it seeking so want it to match here instead of the
|
// deal with it seeking so want it to match here instead of the
|
||||||
// io.ReadSeeker case.
|
// io.ReadSeeker case.
|
||||||
case *bytes.Reader:
|
case *bytes.Reader:
|
||||||
buf, err := ioutil.ReadAll(body)
|
snapshot := *body
|
||||||
if err != nil {
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
bodyReader = func() (io.Reader, error) {
|
bodyReader = func() (io.Reader, error) {
|
||||||
return bytes.NewReader(buf), nil
|
r := snapshot
|
||||||
|
return &r, nil
|
||||||
}
|
}
|
||||||
contentLength = int64(len(buf))
|
contentLength = int64(body.Len())
|
||||||
|
|
||||||
// Compat case
|
// Compat case
|
||||||
case io.ReadSeeker:
|
case io.ReadSeeker:
|
||||||
raw := body
|
raw := body
|
||||||
bodyReader = func() (io.Reader, error) {
|
bodyReader = func() (io.Reader, error) {
|
||||||
_, err := raw.Seek(0, 0)
|
_, err := raw.Seek(0, 0)
|
||||||
return ioutil.NopCloser(raw), err
|
return io.NopCloser(raw), err
|
||||||
}
|
}
|
||||||
if lr, ok := raw.(LenReader); ok {
|
if lr, ok := raw.(LenReader); ok {
|
||||||
contentLength = int64(lr.Len())
|
contentLength = int64(lr.Len())
|
||||||
@ -226,14 +275,21 @@ func getBodyReaderAndContentLength(rawBody interface{}) (ReaderFunc, int64, erro
|
|||||||
|
|
||||||
// Read all in so we can reset
|
// Read all in so we can reset
|
||||||
case io.Reader:
|
case io.Reader:
|
||||||
buf, err := ioutil.ReadAll(body)
|
buf, err := io.ReadAll(body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
bodyReader = func() (io.Reader, error) {
|
if len(buf) == 0 {
|
||||||
return bytes.NewReader(buf), nil
|
bodyReader = func() (io.Reader, error) {
|
||||||
|
return http.NoBody, nil
|
||||||
|
}
|
||||||
|
contentLength = 0
|
||||||
|
} else {
|
||||||
|
bodyReader = func() (io.Reader, error) {
|
||||||
|
return bytes.NewReader(buf), nil
|
||||||
|
}
|
||||||
|
contentLength = int64(len(buf))
|
||||||
}
|
}
|
||||||
contentLength = int64(len(buf))
|
|
||||||
|
|
||||||
// No body provided, nothing to do
|
// No body provided, nothing to do
|
||||||
case nil:
|
case nil:
|
||||||
@ -252,23 +308,32 @@ func FromRequest(r *http.Request) (*Request, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// Could assert contentLength == r.ContentLength
|
// Could assert contentLength == r.ContentLength
|
||||||
return &Request{bodyReader, r}, nil
|
return &Request{body: bodyReader, Request: r}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRequest creates a new wrapped request.
|
// NewRequest creates a new wrapped request.
|
||||||
func NewRequest(method, url string, rawBody interface{}) (*Request, error) {
|
func NewRequest(method, url string, rawBody interface{}) (*Request, error) {
|
||||||
bodyReader, contentLength, err := getBodyReaderAndContentLength(rawBody)
|
return NewRequestWithContext(context.Background(), method, url, rawBody)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRequestWithContext creates a new wrapped request with the provided context.
|
||||||
|
//
|
||||||
|
// The context controls the entire lifetime of a request and its response:
|
||||||
|
// obtaining a connection, sending the request, and reading the response headers and body.
|
||||||
|
func NewRequestWithContext(ctx context.Context, method, url string, rawBody interface{}) (*Request, error) {
|
||||||
|
httpReq, err := http.NewRequestWithContext(ctx, method, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
httpReq, err := http.NewRequest(method, url, nil)
|
req := &Request{
|
||||||
if err != nil {
|
Request: httpReq,
|
||||||
|
}
|
||||||
|
if err := req.SetBody(rawBody); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
httpReq.ContentLength = contentLength
|
|
||||||
|
|
||||||
return &Request{bodyReader, httpReq}, nil
|
return req, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger interface allows to use other loggers than
|
// Logger interface allows to use other loggers than
|
||||||
@ -333,6 +398,9 @@ type Backoff func(min, max time.Duration, attemptNum int, resp *http.Response) t
|
|||||||
// attempted. If overriding this, be sure to close the body if needed.
|
// attempted. If overriding this, be sure to close the body if needed.
|
||||||
type ErrorHandler func(resp *http.Response, err error, numTries int) (*http.Response, error)
|
type ErrorHandler func(resp *http.Response, err error, numTries int) (*http.Response, error)
|
||||||
|
|
||||||
|
// PrepareRetry is called before retry operation. It can be used for example to re-sign the request
|
||||||
|
type PrepareRetry func(req *http.Request) error
|
||||||
|
|
||||||
// Client is used to make HTTP requests. It adds additional functionality
|
// Client is used to make HTTP requests. It adds additional functionality
|
||||||
// like automatic retries to tolerate minor outages.
|
// like automatic retries to tolerate minor outages.
|
||||||
type Client struct {
|
type Client struct {
|
||||||
@ -361,6 +429,9 @@ type Client struct {
|
|||||||
// ErrorHandler specifies the custom error handler to use, if any
|
// ErrorHandler specifies the custom error handler to use, if any
|
||||||
ErrorHandler ErrorHandler
|
ErrorHandler ErrorHandler
|
||||||
|
|
||||||
|
// PrepareRetry can prepare the request for retry operation, for example re-sign it
|
||||||
|
PrepareRetry PrepareRetry
|
||||||
|
|
||||||
loggerInit sync.Once
|
loggerInit sync.Once
|
||||||
clientInit sync.Once
|
clientInit sync.Once
|
||||||
}
|
}
|
||||||
@ -434,8 +505,16 @@ func baseRetryPolicy(resp *http.Response, err error) (bool, error) {
|
|||||||
return false, v
|
return false, v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't retry if the error was due to an invalid header.
|
||||||
|
if invalidHeaderErrorRe.MatchString(v.Error()) {
|
||||||
|
return false, v
|
||||||
|
}
|
||||||
|
|
||||||
// Don't retry if the error was due to TLS cert verification failure.
|
// Don't retry if the error was due to TLS cert verification failure.
|
||||||
if _, ok := v.Err.(x509.UnknownAuthorityError); ok {
|
if notTrustedErrorRe.MatchString(v.Error()) {
|
||||||
|
return false, v
|
||||||
|
}
|
||||||
|
if isCertError(v.Err) {
|
||||||
return false, v
|
return false, v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -455,7 +534,7 @@ func baseRetryPolicy(resp *http.Response, err error) (bool, error) {
|
|||||||
// the server time to recover, as 500's are typically not permanent
|
// the server time to recover, as 500's are typically not permanent
|
||||||
// errors and may relate to outages on the server side. This will catch
|
// errors and may relate to outages on the server side. This will catch
|
||||||
// invalid response codes as well, like 0 and 999.
|
// invalid response codes as well, like 0 and 999.
|
||||||
if resp.StatusCode == 0 || (resp.StatusCode >= 500 && resp.StatusCode != 501) {
|
if resp.StatusCode == 0 || (resp.StatusCode >= 500 && resp.StatusCode != http.StatusNotImplemented) {
|
||||||
return true, fmt.Errorf("unexpected HTTP status %s", resp.Status)
|
return true, fmt.Errorf("unexpected HTTP status %s", resp.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,10 +551,8 @@ func baseRetryPolicy(resp *http.Response, err error) (bool, error) {
|
|||||||
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 || resp.StatusCode == http.StatusServiceUnavailable {
|
if resp.StatusCode == http.StatusTooManyRequests || resp.StatusCode == http.StatusServiceUnavailable {
|
||||||
if s, ok := resp.Header["Retry-After"]; ok {
|
if sleep, ok := parseRetryAfterHeader(resp.Header["Retry-After"]); ok {
|
||||||
if sleep, err := strconv.ParseInt(s[0], 10, 64); err == nil {
|
return sleep
|
||||||
return time.Second * time.Duration(sleep)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -488,6 +565,41 @@ func DefaultBackoff(min, max time.Duration, attemptNum int, resp *http.Response)
|
|||||||
return sleep
|
return sleep
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// parseRetryAfterHeader parses the Retry-After header and returns the
|
||||||
|
// delay duration according to the spec: https://httpwg.org/specs/rfc7231.html#header.retry-after
|
||||||
|
// The bool returned will be true if the header was successfully parsed.
|
||||||
|
// Otherwise, the header was either not present, or was not parseable according to the spec.
|
||||||
|
//
|
||||||
|
// Retry-After headers come in two flavors: Seconds or HTTP-Date
|
||||||
|
//
|
||||||
|
// Examples:
|
||||||
|
// * Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
|
||||||
|
// * Retry-After: 120
|
||||||
|
func parseRetryAfterHeader(headers []string) (time.Duration, bool) {
|
||||||
|
if len(headers) == 0 || headers[0] == "" {
|
||||||
|
return 0, false
|
||||||
|
}
|
||||||
|
header := headers[0]
|
||||||
|
// Retry-After: 120
|
||||||
|
if sleep, err := strconv.ParseInt(header, 10, 64); err == nil {
|
||||||
|
if sleep < 0 { // a negative sleep doesn't make sense
|
||||||
|
return 0, false
|
||||||
|
}
|
||||||
|
return time.Second * time.Duration(sleep), true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
|
||||||
|
retryTime, err := time.Parse(time.RFC1123, header)
|
||||||
|
if err != nil {
|
||||||
|
return 0, false
|
||||||
|
}
|
||||||
|
if until := retryTime.Sub(timeNow()); until > 0 {
|
||||||
|
return until, true
|
||||||
|
}
|
||||||
|
// date is in the past
|
||||||
|
return 0, true
|
||||||
|
}
|
||||||
|
|
||||||
// LinearJitterBackoff provides a callback for Client.Backoff which will
|
// LinearJitterBackoff provides a callback for Client.Backoff which will
|
||||||
// perform linear backoff based on the attempt number and with jitter to
|
// perform linear backoff based on the attempt number and with jitter to
|
||||||
// prevent a thundering herd.
|
// prevent a thundering herd.
|
||||||
@ -515,13 +627,13 @@ func LinearJitterBackoff(min, max time.Duration, attemptNum int, resp *http.Resp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Seed rand; doing this every time is fine
|
// Seed rand; doing this every time is fine
|
||||||
rand := rand.New(rand.NewSource(int64(time.Now().Nanosecond())))
|
source := rand.New(rand.NewSource(int64(time.Now().Nanosecond())))
|
||||||
|
|
||||||
// Pick a random number that lies somewhere between the min and max and
|
// Pick a random number that lies somewhere between the min and max and
|
||||||
// multiply by the attemptNum. attemptNum starts at zero so we always
|
// multiply by the attemptNum. attemptNum starts at zero so we always
|
||||||
// increment here. We first get a random percentage, then apply that to the
|
// increment here. We first get a random percentage, then apply that to the
|
||||||
// difference between min and max, and add to min.
|
// difference between min and max, and add to min.
|
||||||
jitter := rand.Float64() * float64(max-min)
|
jitter := source.Float64() * float64(max-min)
|
||||||
jitterMin := int64(jitter) + int64(min)
|
jitterMin := int64(jitter) + int64(min)
|
||||||
return time.Duration(jitterMin * int64(attemptNum))
|
return time.Duration(jitterMin * int64(attemptNum))
|
||||||
}
|
}
|
||||||
@ -546,22 +658,21 @@ func (c *Client) Do(req *Request) (*http.Response, error) {
|
|||||||
if logger != nil {
|
if logger != nil {
|
||||||
switch v := logger.(type) {
|
switch v := logger.(type) {
|
||||||
case LeveledLogger:
|
case LeveledLogger:
|
||||||
v.Debug("performing request", "method", req.Method, "url", req.URL)
|
v.Debug("performing request", "method", req.Method, "url", redactURL(req.URL))
|
||||||
case Logger:
|
case Logger:
|
||||||
v.Printf("[DEBUG] %s %s", req.Method, req.URL)
|
v.Printf("[DEBUG] %s %s", req.Method, redactURL(req.URL))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var attempt int
|
var attempt int
|
||||||
var shouldRetry bool
|
var shouldRetry bool
|
||||||
var doErr, checkErr error
|
var doErr, respErr, checkErr, prepareErr error
|
||||||
|
|
||||||
for i := 0; ; i++ {
|
for i := 0; ; i++ {
|
||||||
|
doErr, respErr, prepareErr = nil, nil, nil
|
||||||
attempt++
|
attempt++
|
||||||
|
|
||||||
var code int // HTTP response code
|
|
||||||
|
|
||||||
// Always rewind the request body when non-nil.
|
// Always rewind the request body when non-nil.
|
||||||
if req.body != nil {
|
if req.body != nil {
|
||||||
body, err := req.body()
|
body, err := req.body()
|
||||||
@ -572,7 +683,7 @@ func (c *Client) Do(req *Request) (*http.Response, error) {
|
|||||||
if c, ok := body.(io.ReadCloser); ok {
|
if c, ok := body.(io.ReadCloser); ok {
|
||||||
req.Body = c
|
req.Body = c
|
||||||
} else {
|
} else {
|
||||||
req.Body = ioutil.NopCloser(body)
|
req.Body = io.NopCloser(body)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -589,19 +700,24 @@ func (c *Client) Do(req *Request) (*http.Response, error) {
|
|||||||
|
|
||||||
// Attempt the request
|
// Attempt the request
|
||||||
resp, doErr = c.HTTPClient.Do(req.Request)
|
resp, doErr = c.HTTPClient.Do(req.Request)
|
||||||
if resp != nil {
|
|
||||||
code = resp.StatusCode
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if we should continue with retries.
|
// Check if we should continue with retries.
|
||||||
shouldRetry, checkErr = c.CheckRetry(req.Context(), resp, doErr)
|
shouldRetry, checkErr = c.CheckRetry(req.Context(), resp, doErr)
|
||||||
|
if !shouldRetry && doErr == nil && req.responseHandler != nil {
|
||||||
|
respErr = req.responseHandler(resp)
|
||||||
|
shouldRetry, checkErr = c.CheckRetry(req.Context(), resp, respErr)
|
||||||
|
}
|
||||||
|
|
||||||
if doErr != nil {
|
err := doErr
|
||||||
|
if respErr != nil {
|
||||||
|
err = respErr
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
switch v := logger.(type) {
|
switch v := logger.(type) {
|
||||||
case LeveledLogger:
|
case LeveledLogger:
|
||||||
v.Error("request failed", "error", doErr, "method", req.Method, "url", req.URL)
|
v.Error("request failed", "error", err, "method", req.Method, "url", redactURL(req.URL))
|
||||||
case Logger:
|
case Logger:
|
||||||
v.Printf("[ERR] %s %s request failed: %v", req.Method, req.URL, doErr)
|
v.Printf("[ERR] %s %s request failed: %v", req.Method, redactURL(req.URL), err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Call this here to maintain the behavior of logging all requests,
|
// Call this here to maintain the behavior of logging all requests,
|
||||||
@ -636,11 +752,11 @@ func (c *Client) Do(req *Request) (*http.Response, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
wait := c.Backoff(c.RetryWaitMin, c.RetryWaitMax, i, resp)
|
wait := c.Backoff(c.RetryWaitMin, c.RetryWaitMax, i, resp)
|
||||||
desc := fmt.Sprintf("%s %s", req.Method, req.URL)
|
|
||||||
if code > 0 {
|
|
||||||
desc = fmt.Sprintf("%s (status: %d)", desc, code)
|
|
||||||
}
|
|
||||||
if logger != nil {
|
if logger != nil {
|
||||||
|
desc := fmt.Sprintf("%s %s", req.Method, redactURL(req.URL))
|
||||||
|
if resp != nil {
|
||||||
|
desc = fmt.Sprintf("%s (status: %d)", desc, resp.StatusCode)
|
||||||
|
}
|
||||||
switch v := logger.(type) {
|
switch v := logger.(type) {
|
||||||
case LeveledLogger:
|
case LeveledLogger:
|
||||||
v.Debug("retrying request", "request", desc, "timeout", wait, "remaining", remain)
|
v.Debug("retrying request", "request", desc, "timeout", wait, "remaining", remain)
|
||||||
@ -648,29 +764,44 @@ func (c *Client) Do(req *Request) (*http.Response, error) {
|
|||||||
v.Printf("[DEBUG] %s: retrying in %s (%d left)", desc, wait, remain)
|
v.Printf("[DEBUG] %s: retrying in %s (%d left)", desc, wait, remain)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
timer := time.NewTimer(wait)
|
||||||
select {
|
select {
|
||||||
case <-req.Context().Done():
|
case <-req.Context().Done():
|
||||||
|
timer.Stop()
|
||||||
c.HTTPClient.CloseIdleConnections()
|
c.HTTPClient.CloseIdleConnections()
|
||||||
return nil, req.Context().Err()
|
return nil, req.Context().Err()
|
||||||
case <-time.After(wait):
|
case <-timer.C:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make shallow copy of http Request so that we can modify its body
|
// Make shallow copy of http Request so that we can modify its body
|
||||||
// without racing against the closeBody call in persistConn.writeLoop.
|
// without racing against the closeBody call in persistConn.writeLoop.
|
||||||
httpreq := *req.Request
|
httpreq := *req.Request
|
||||||
req.Request = &httpreq
|
req.Request = &httpreq
|
||||||
|
|
||||||
|
if c.PrepareRetry != nil {
|
||||||
|
if err := c.PrepareRetry(req.Request); err != nil {
|
||||||
|
prepareErr = err
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is the closest we have to success criteria
|
// this is the closest we have to success criteria
|
||||||
if doErr == nil && checkErr == nil && !shouldRetry {
|
if doErr == nil && respErr == nil && checkErr == nil && prepareErr == nil && !shouldRetry {
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
defer c.HTTPClient.CloseIdleConnections()
|
defer c.HTTPClient.CloseIdleConnections()
|
||||||
|
|
||||||
err := doErr
|
var err error
|
||||||
if checkErr != nil {
|
if prepareErr != nil {
|
||||||
|
err = prepareErr
|
||||||
|
} else if checkErr != nil {
|
||||||
err = checkErr
|
err = checkErr
|
||||||
|
} else if respErr != nil {
|
||||||
|
err = respErr
|
||||||
|
} else {
|
||||||
|
err = doErr
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.ErrorHandler != nil {
|
if c.ErrorHandler != nil {
|
||||||
@ -687,17 +818,17 @@ func (c *Client) Do(req *Request) (*http.Response, error) {
|
|||||||
// communicate why
|
// communicate why
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil, fmt.Errorf("%s %s giving up after %d attempt(s)",
|
return nil, fmt.Errorf("%s %s giving up after %d attempt(s)",
|
||||||
req.Method, req.URL, attempt)
|
req.Method, redactURL(req.URL), attempt)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, fmt.Errorf("%s %s giving up after %d attempt(s): %w",
|
return nil, fmt.Errorf("%s %s giving up after %d attempt(s): %w",
|
||||||
req.Method, req.URL, attempt, err)
|
req.Method, redactURL(req.URL), attempt, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to read the response body so we can reuse this connection.
|
// Try to read the response body so we can reuse this connection.
|
||||||
func (c *Client) drainBody(body io.ReadCloser) {
|
func (c *Client) drainBody(body io.ReadCloser) {
|
||||||
defer body.Close()
|
defer body.Close()
|
||||||
_, err := io.Copy(ioutil.Discard, io.LimitReader(body, respReadLimit))
|
_, err := io.Copy(io.Discard, io.LimitReader(body, respReadLimit))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if c.logger() != nil {
|
if c.logger() != nil {
|
||||||
switch v := c.logger().(type) {
|
switch v := c.logger().(type) {
|
||||||
@ -772,3 +903,17 @@ func (c *Client) StandardClient() *http.Client {
|
|||||||
Transport: &RoundTripper{Client: c},
|
Transport: &RoundTripper{Client: c},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Taken from url.URL#Redacted() which was introduced in go 1.15.
|
||||||
|
// We can switch to using it directly if we'll bump the minimum required go version.
|
||||||
|
func redactURL(u *url.URL) string {
|
||||||
|
if u == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
ru := *u
|
||||||
|
if _, has := ru.User.Password(); has {
|
||||||
|
ru.User = url.UserPassword(ru.User.Username(), "xxxxx")
|
||||||
|
}
|
||||||
|
return ru.String()
|
||||||
|
}
|
||||||
|
3
vendor/github.com/hashicorp/go-retryablehttp/roundtripper.go
generated
vendored
3
vendor/github.com/hashicorp/go-retryablehttp/roundtripper.go
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
package retryablehttp
|
package retryablehttp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
5
vendor/github.com/mattn/go-isatty/isatty_bsd.go
generated
vendored
5
vendor/github.com/mattn/go-isatty/isatty_bsd.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
//go:build (darwin || freebsd || openbsd || netbsd || dragonfly) && !appengine
|
//go:build (darwin || freebsd || openbsd || netbsd || dragonfly || hurd) && !appengine && !tinygo
|
||||||
// +build darwin freebsd openbsd netbsd dragonfly
|
// +build darwin freebsd openbsd netbsd dragonfly hurd
|
||||||
// +build !appengine
|
// +build !appengine
|
||||||
|
// +build !tinygo
|
||||||
|
|
||||||
package isatty
|
package isatty
|
||||||
|
|
||||||
|
5
vendor/github.com/mattn/go-isatty/isatty_others.go
generated
vendored
5
vendor/github.com/mattn/go-isatty/isatty_others.go
generated
vendored
@ -1,5 +1,6 @@
|
|||||||
//go:build appengine || js || nacl || wasm
|
//go:build (appengine || js || nacl || tinygo || wasm) && !windows
|
||||||
// +build appengine js nacl wasm
|
// +build appengine js nacl tinygo wasm
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
package isatty
|
package isatty
|
||||||
|
|
||||||
|
3
vendor/github.com/mattn/go-isatty/isatty_tcgets.go
generated
vendored
3
vendor/github.com/mattn/go-isatty/isatty_tcgets.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
//go:build (linux || aix || zos) && !appengine
|
//go:build (linux || aix || zos) && !appengine && !tinygo
|
||||||
// +build linux aix zos
|
// +build linux aix zos
|
||||||
// +build !appengine
|
// +build !appengine
|
||||||
|
// +build !tinygo
|
||||||
|
|
||||||
package isatty
|
package isatty
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s
generated
vendored
1
vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
6
vendor/golang.org/x/sys/cpu/cpu.go
generated
vendored
6
vendor/golang.org/x/sys/cpu/cpu.go
generated
vendored
@ -38,7 +38,7 @@ var X86 struct {
|
|||||||
HasAVX512F bool // Advanced vector extension 512 Foundation Instructions
|
HasAVX512F bool // Advanced vector extension 512 Foundation Instructions
|
||||||
HasAVX512CD bool // Advanced vector extension 512 Conflict Detection Instructions
|
HasAVX512CD bool // Advanced vector extension 512 Conflict Detection Instructions
|
||||||
HasAVX512ER bool // Advanced vector extension 512 Exponential and Reciprocal Instructions
|
HasAVX512ER bool // Advanced vector extension 512 Exponential and Reciprocal Instructions
|
||||||
HasAVX512PF bool // Advanced vector extension 512 Prefetch Instructions Instructions
|
HasAVX512PF bool // Advanced vector extension 512 Prefetch Instructions
|
||||||
HasAVX512VL bool // Advanced vector extension 512 Vector Length Extensions
|
HasAVX512VL bool // Advanced vector extension 512 Vector Length Extensions
|
||||||
HasAVX512BW bool // Advanced vector extension 512 Byte and Word Instructions
|
HasAVX512BW bool // Advanced vector extension 512 Byte and Word Instructions
|
||||||
HasAVX512DQ bool // Advanced vector extension 512 Doubleword and Quadword Instructions
|
HasAVX512DQ bool // Advanced vector extension 512 Doubleword and Quadword Instructions
|
||||||
@ -54,6 +54,9 @@ var X86 struct {
|
|||||||
HasAVX512VBMI2 bool // Advanced vector extension 512 Vector Byte Manipulation Instructions 2
|
HasAVX512VBMI2 bool // Advanced vector extension 512 Vector Byte Manipulation Instructions 2
|
||||||
HasAVX512BITALG bool // Advanced vector extension 512 Bit Algorithms
|
HasAVX512BITALG bool // Advanced vector extension 512 Bit Algorithms
|
||||||
HasAVX512BF16 bool // Advanced vector extension 512 BFloat16 Instructions
|
HasAVX512BF16 bool // Advanced vector extension 512 BFloat16 Instructions
|
||||||
|
HasAMXTile bool // Advanced Matrix Extension Tile instructions
|
||||||
|
HasAMXInt8 bool // Advanced Matrix Extension Int8 instructions
|
||||||
|
HasAMXBF16 bool // Advanced Matrix Extension BFloat16 instructions
|
||||||
HasBMI1 bool // Bit manipulation instruction set 1
|
HasBMI1 bool // Bit manipulation instruction set 1
|
||||||
HasBMI2 bool // Bit manipulation instruction set 2
|
HasBMI2 bool // Bit manipulation instruction set 2
|
||||||
HasCX16 bool // Compare and exchange 16 Bytes
|
HasCX16 bool // Compare and exchange 16 Bytes
|
||||||
@ -100,6 +103,7 @@ var ARM64 struct {
|
|||||||
HasASIMDDP bool // Advanced SIMD double precision instruction set
|
HasASIMDDP bool // Advanced SIMD double precision instruction set
|
||||||
HasSHA512 bool // SHA512 hardware implementation
|
HasSHA512 bool // SHA512 hardware implementation
|
||||||
HasSVE bool // Scalable Vector Extensions
|
HasSVE bool // Scalable Vector Extensions
|
||||||
|
HasSVE2 bool // Scalable Vector Extensions 2
|
||||||
HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32
|
HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32
|
||||||
_ CacheLinePad
|
_ CacheLinePad
|
||||||
}
|
}
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_aix.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_aix.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build aix
|
//go:build aix
|
||||||
// +build aix
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
10
vendor/golang.org/x/sys/cpu/cpu_arm64.go
generated
vendored
10
vendor/golang.org/x/sys/cpu/cpu_arm64.go
generated
vendored
@ -28,6 +28,7 @@ func initOptions() {
|
|||||||
{Name: "sm3", Feature: &ARM64.HasSM3},
|
{Name: "sm3", Feature: &ARM64.HasSM3},
|
||||||
{Name: "sm4", Feature: &ARM64.HasSM4},
|
{Name: "sm4", Feature: &ARM64.HasSM4},
|
||||||
{Name: "sve", Feature: &ARM64.HasSVE},
|
{Name: "sve", Feature: &ARM64.HasSVE},
|
||||||
|
{Name: "sve2", Feature: &ARM64.HasSVE2},
|
||||||
{Name: "crc32", Feature: &ARM64.HasCRC32},
|
{Name: "crc32", Feature: &ARM64.HasCRC32},
|
||||||
{Name: "atomics", Feature: &ARM64.HasATOMICS},
|
{Name: "atomics", Feature: &ARM64.HasATOMICS},
|
||||||
{Name: "asimdhp", Feature: &ARM64.HasASIMDHP},
|
{Name: "asimdhp", Feature: &ARM64.HasASIMDHP},
|
||||||
@ -164,6 +165,15 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) {
|
|||||||
switch extractBits(pfr0, 32, 35) {
|
switch extractBits(pfr0, 32, 35) {
|
||||||
case 1:
|
case 1:
|
||||||
ARM64.HasSVE = true
|
ARM64.HasSVE = true
|
||||||
|
|
||||||
|
parseARM64SVERegister(getzfr0())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseARM64SVERegister(zfr0 uint64) {
|
||||||
|
switch extractBits(zfr0, 0, 3) {
|
||||||
|
case 1:
|
||||||
|
ARM64.HasSVE2 = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
9
vendor/golang.org/x/sys/cpu/cpu_arm64.s
generated
vendored
9
vendor/golang.org/x/sys/cpu/cpu_arm64.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
@ -30,3 +29,11 @@ TEXT ·getpfr0(SB),NOSPLIT,$0-8
|
|||||||
WORD $0xd5380400
|
WORD $0xd5380400
|
||||||
MOVD R0, ret+0(FP)
|
MOVD R0, ret+0(FP)
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
// func getzfr0() uint64
|
||||||
|
TEXT ·getzfr0(SB),NOSPLIT,$0-8
|
||||||
|
// get SVE Feature Register 0 into x0
|
||||||
|
// mrs x0, ID_AA64ZFR0_EL1 = d5380480
|
||||||
|
WORD $0xd5380480
|
||||||
|
MOVD R0, ret+0(FP)
|
||||||
|
RET
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go
generated
vendored
@ -3,10 +3,10 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
func getisar0() uint64
|
func getisar0() uint64
|
||||||
func getisar1() uint64
|
func getisar1() uint64
|
||||||
func getpfr0() uint64
|
func getpfr0() uint64
|
||||||
|
func getzfr0() uint64
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (386 || amd64 || amd64p32) && gc
|
//go:build (386 || amd64 || amd64p32) && gc
|
||||||
// +build 386 amd64 amd64p32
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gccgo
|
//go:build gccgo
|
||||||
// +build gccgo
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gccgo
|
//go:build gccgo
|
||||||
// +build gccgo
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (386 || amd64 || amd64p32) && gccgo
|
//go:build (386 || amd64 || amd64p32) && gccgo
|
||||||
// +build 386 amd64 amd64p32
|
|
||||||
// +build gccgo
|
|
||||||
|
|
||||||
#include <cpuid.h>
|
#include <cpuid.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (386 || amd64 || amd64p32) && gccgo
|
//go:build (386 || amd64 || amd64p32) && gccgo
|
||||||
// +build 386 amd64 amd64p32
|
|
||||||
// +build gccgo
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_linux.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_linux.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !386 && !amd64 && !amd64p32 && !arm64
|
//go:build !386 && !amd64 && !amd64p32 && !arm64
|
||||||
// +build !386,!amd64,!amd64p32,!arm64
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
5
vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
generated
vendored
5
vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
generated
vendored
@ -35,6 +35,8 @@ const (
|
|||||||
hwcap_SHA512 = 1 << 21
|
hwcap_SHA512 = 1 << 21
|
||||||
hwcap_SVE = 1 << 22
|
hwcap_SVE = 1 << 22
|
||||||
hwcap_ASIMDFHM = 1 << 23
|
hwcap_ASIMDFHM = 1 << 23
|
||||||
|
|
||||||
|
hwcap2_SVE2 = 1 << 1
|
||||||
)
|
)
|
||||||
|
|
||||||
// linuxKernelCanEmulateCPUID reports whether we're running
|
// linuxKernelCanEmulateCPUID reports whether we're running
|
||||||
@ -104,6 +106,9 @@ func doinit() {
|
|||||||
ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512)
|
ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512)
|
||||||
ARM64.HasSVE = isSet(hwCap, hwcap_SVE)
|
ARM64.HasSVE = isSet(hwCap, hwcap_SVE)
|
||||||
ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM)
|
ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM)
|
||||||
|
|
||||||
|
// HWCAP2 feature bits
|
||||||
|
ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func isSet(hwc uint, value uint) bool {
|
func isSet(hwc uint, value uint) bool {
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && (mips64 || mips64le)
|
//go:build linux && (mips64 || mips64le)
|
||||||
// +build linux
|
|
||||||
// +build mips64 mips64le
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x
|
//go:build linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x
|
||||||
// +build linux,!arm,!arm64,!mips64,!mips64le,!ppc64,!ppc64le,!s390x
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && (ppc64 || ppc64le)
|
//go:build linux && (ppc64 || ppc64le)
|
||||||
// +build linux
|
|
||||||
// +build ppc64 ppc64le
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_loong64.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_loong64.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build loong64
|
//go:build loong64
|
||||||
// +build loong64
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_mips64x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_mips64x.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build mips64 || mips64le
|
//go:build mips64 || mips64le
|
||||||
// +build mips64 mips64le
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_mipsx.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_mipsx.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build mips || mipsle
|
//go:build mips || mipsle
|
||||||
// +build mips mipsle
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_other_arm.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_other_arm.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !linux && arm
|
//go:build !linux && arm
|
||||||
// +build !linux,arm
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_other_arm64.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_other_arm64.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !linux && !netbsd && !openbsd && arm64
|
//go:build !linux && !netbsd && !openbsd && arm64
|
||||||
// +build !linux,!netbsd,!openbsd,arm64
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !linux && (mips64 || mips64le)
|
//go:build !linux && (mips64 || mips64le)
|
||||||
// +build !linux
|
|
||||||
// +build mips64 mips64le
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
3
vendor/golang.org/x/sys/cpu/cpu_other_ppc64x.go
generated
vendored
3
vendor/golang.org/x/sys/cpu/cpu_other_ppc64x.go
generated
vendored
@ -3,9 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !aix && !linux && (ppc64 || ppc64le)
|
//go:build !aix && !linux && (ppc64 || ppc64le)
|
||||||
// +build !aix
|
|
||||||
// +build !linux
|
|
||||||
// +build ppc64 ppc64le
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !linux && riscv64
|
//go:build !linux && riscv64
|
||||||
// +build !linux,riscv64
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build ppc64 || ppc64le
|
//go:build ppc64 || ppc64le
|
||||||
// +build ppc64 ppc64le
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
3
vendor/golang.org/x/sys/cpu/cpu_riscv64.go
generated
vendored
3
vendor/golang.org/x/sys/cpu/cpu_riscv64.go
generated
vendored
@ -3,10 +3,9 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build riscv64
|
//go:build riscv64
|
||||||
// +build riscv64
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
const cacheLineSize = 32
|
const cacheLineSize = 64
|
||||||
|
|
||||||
func initOptions() {}
|
func initOptions() {}
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_s390x.s
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_s390x.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_wasm.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_wasm.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build wasm
|
//go:build wasm
|
||||||
// +build wasm
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
8
vendor/golang.org/x/sys/cpu/cpu_x86.go
generated
vendored
8
vendor/golang.org/x/sys/cpu/cpu_x86.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build 386 || amd64 || amd64p32
|
//go:build 386 || amd64 || amd64p32
|
||||||
// +build 386 amd64 amd64p32
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
@ -37,6 +36,9 @@ func initOptions() {
|
|||||||
{Name: "avx512vbmi2", Feature: &X86.HasAVX512VBMI2},
|
{Name: "avx512vbmi2", Feature: &X86.HasAVX512VBMI2},
|
||||||
{Name: "avx512bitalg", Feature: &X86.HasAVX512BITALG},
|
{Name: "avx512bitalg", Feature: &X86.HasAVX512BITALG},
|
||||||
{Name: "avx512bf16", Feature: &X86.HasAVX512BF16},
|
{Name: "avx512bf16", Feature: &X86.HasAVX512BF16},
|
||||||
|
{Name: "amxtile", Feature: &X86.HasAMXTile},
|
||||||
|
{Name: "amxint8", Feature: &X86.HasAMXInt8},
|
||||||
|
{Name: "amxbf16", Feature: &X86.HasAMXBF16},
|
||||||
{Name: "bmi1", Feature: &X86.HasBMI1},
|
{Name: "bmi1", Feature: &X86.HasBMI1},
|
||||||
{Name: "bmi2", Feature: &X86.HasBMI2},
|
{Name: "bmi2", Feature: &X86.HasBMI2},
|
||||||
{Name: "cx16", Feature: &X86.HasCX16},
|
{Name: "cx16", Feature: &X86.HasCX16},
|
||||||
@ -138,6 +140,10 @@ func archInit() {
|
|||||||
eax71, _, _, _ := cpuid(7, 1)
|
eax71, _, _, _ := cpuid(7, 1)
|
||||||
X86.HasAVX512BF16 = isSet(5, eax71)
|
X86.HasAVX512BF16 = isSet(5, eax71)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
X86.HasAMXTile = isSet(24, edx7)
|
||||||
|
X86.HasAMXInt8 = isSet(25, edx7)
|
||||||
|
X86.HasAMXBF16 = isSet(22, edx7)
|
||||||
}
|
}
|
||||||
|
|
||||||
func isSet(bitpos uint, value uint32) bool {
|
func isSet(bitpos uint, value uint32) bool {
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_x86.s
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_x86.s
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (386 || amd64 || amd64p32) && gc
|
//go:build (386 || amd64 || amd64p32) && gc
|
||||||
// +build 386 amd64 amd64p32
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/endian_big.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/endian_big.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64
|
//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64
|
||||||
// +build armbe arm64be m68k mips mips64 mips64p32 ppc ppc64 s390 s390x shbe sparc sparc64
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/endian_little.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/endian_little.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh || wasm
|
//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh || wasm
|
||||||
// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh wasm
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
4
vendor/golang.org/x/sys/cpu/hwcap_linux.go
generated
vendored
4
vendor/golang.org/x/sys/cpu/hwcap_linux.go
generated
vendored
@ -5,7 +5,7 @@
|
|||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -39,7 +39,7 @@ func readHWCAP() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
buf, err := ioutil.ReadFile(procAuxv)
|
buf, err := os.ReadFile(procAuxv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// e.g. on android /proc/self/auxv is not accessible, so silently
|
// e.g. on android /proc/self/auxv is not accessible, so silently
|
||||||
// ignore the error and leave Initialized = false. On some
|
// ignore the error and leave Initialized = false. On some
|
||||||
|
1
vendor/golang.org/x/sys/cpu/proc_cpuinfo_linux.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/proc_cpuinfo_linux.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && arm64
|
//go:build linux && arm64
|
||||||
// +build linux,arm64
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/runtime_auxv_go121.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/runtime_auxv_go121.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build go1.21
|
//go:build go1.21
|
||||||
// +build go1.21
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go
generated
vendored
@ -9,7 +9,6 @@
|
|||||||
// gccgo's libgo and thus must not used a CGo method.
|
// gccgo's libgo and thus must not used a CGo method.
|
||||||
|
|
||||||
//go:build aix && gccgo
|
//go:build aix && gccgo
|
||||||
// +build aix,gccgo
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go
generated
vendored
@ -7,7 +7,6 @@
|
|||||||
// (See golang.org/issue/32102)
|
// (See golang.org/issue/32102)
|
||||||
|
|
||||||
//go:build aix && ppc64 && gc
|
//go:build aix && ppc64 && gc
|
||||||
// +build aix,ppc64,gc
|
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
30
vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go
generated
vendored
30
vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go
generated
vendored
@ -1,30 +0,0 @@
|
|||||||
// Copyright 2020 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Package unsafeheader contains header declarations for the Go runtime's
|
|
||||||
// slice and string implementations.
|
|
||||||
//
|
|
||||||
// This package allows x/sys to use types equivalent to
|
|
||||||
// reflect.SliceHeader and reflect.StringHeader without introducing
|
|
||||||
// a dependency on the (relatively heavy) "reflect" package.
|
|
||||||
package unsafeheader
|
|
||||||
|
|
||||||
import (
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Slice is the runtime representation of a slice.
|
|
||||||
// It cannot be used safely or portably and its representation may change in a later release.
|
|
||||||
type Slice struct {
|
|
||||||
Data unsafe.Pointer
|
|
||||||
Len int
|
|
||||||
Cap int
|
|
||||||
}
|
|
||||||
|
|
||||||
// String is the runtime representation of a string.
|
|
||||||
// It cannot be used safely or portably and its representation may change in a later release.
|
|
||||||
type String struct {
|
|
||||||
Data unsafe.Pointer
|
|
||||||
Len int
|
|
||||||
}
|
|
1
vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build go1.5
|
//go:build go1.5
|
||||||
// +build go1.5
|
|
||||||
|
|
||||||
package plan9
|
package plan9
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/plan9/pwd_plan9.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/pwd_plan9.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !go1.5
|
//go:build !go1.5
|
||||||
// +build !go1.5
|
|
||||||
|
|
||||||
package plan9
|
package plan9
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/plan9/race.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/race.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build plan9 && race
|
//go:build plan9 && race
|
||||||
// +build plan9,race
|
|
||||||
|
|
||||||
package plan9
|
package plan9
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/plan9/race0.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/race0.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build plan9 && !race
|
//go:build plan9 && !race
|
||||||
// +build plan9,!race
|
|
||||||
|
|
||||||
package plan9
|
package plan9
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/plan9/str.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/str.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build plan9
|
//go:build plan9
|
||||||
// +build plan9
|
|
||||||
|
|
||||||
package plan9
|
package plan9
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/plan9/syscall.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/syscall.go
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build plan9
|
//go:build plan9
|
||||||
// +build plan9
|
|
||||||
|
|
||||||
// Package plan9 contains an interface to the low-level operating system
|
// Package plan9 contains an interface to the low-level operating system
|
||||||
// primitives. OS details vary depending on the underlying system, and
|
// primitives. OS details vary depending on the underlying system, and
|
||||||
|
1
vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go
generated
vendored
@ -2,7 +2,6 @@
|
|||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build plan9 && 386
|
//go:build plan9 && 386
|
||||||
// +build plan9,386
|
|
||||||
|
|
||||||
package plan9
|
package plan9
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go
generated
vendored
@ -2,7 +2,6 @@
|
|||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build plan9 && amd64
|
//go:build plan9 && amd64
|
||||||
// +build plan9,amd64
|
|
||||||
|
|
||||||
package plan9
|
package plan9
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go
generated
vendored
@ -2,7 +2,6 @@
|
|||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build plan9 && arm
|
//go:build plan9 && arm
|
||||||
// +build plan9,arm
|
|
||||||
|
|
||||||
package plan9
|
package plan9
|
||||||
|
|
||||||
|
4
vendor/golang.org/x/sys/unix/aliases.go
generated
vendored
4
vendor/golang.org/x/sys/unix/aliases.go
generated
vendored
@ -2,9 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) && go1.9
|
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
|
|
||||||
// +build go1.9
|
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
generated
vendored
1
vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/unix/asm_bsd_386.s
generated
vendored
2
vendor/golang.org/x/sys/unix/asm_bsd_386.s
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (freebsd || netbsd || openbsd) && gc
|
//go:build (freebsd || netbsd || openbsd) && gc
|
||||||
// +build freebsd netbsd openbsd
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/unix/asm_bsd_amd64.s
generated
vendored
2
vendor/golang.org/x/sys/unix/asm_bsd_amd64.s
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (darwin || dragonfly || freebsd || netbsd || openbsd) && gc
|
//go:build (darwin || dragonfly || freebsd || netbsd || openbsd) && gc
|
||||||
// +build darwin dragonfly freebsd netbsd openbsd
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/unix/asm_bsd_arm.s
generated
vendored
2
vendor/golang.org/x/sys/unix/asm_bsd_arm.s
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (freebsd || netbsd || openbsd) && gc
|
//go:build (freebsd || netbsd || openbsd) && gc
|
||||||
// +build freebsd netbsd openbsd
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/unix/asm_bsd_arm64.s
generated
vendored
2
vendor/golang.org/x/sys/unix/asm_bsd_arm64.s
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (darwin || freebsd || netbsd || openbsd) && gc
|
//go:build (darwin || freebsd || netbsd || openbsd) && gc
|
||||||
// +build darwin freebsd netbsd openbsd
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s
generated
vendored
2
vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (darwin || freebsd || netbsd || openbsd) && gc
|
//go:build (darwin || freebsd || netbsd || openbsd) && gc
|
||||||
// +build darwin freebsd netbsd openbsd
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s
generated
vendored
2
vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (darwin || freebsd || netbsd || openbsd) && gc
|
//go:build (darwin || freebsd || netbsd || openbsd) && gc
|
||||||
// +build darwin freebsd netbsd openbsd
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/unix/asm_linux_386.s
generated
vendored
1
vendor/golang.org/x/sys/unix/asm_linux_386.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/unix/asm_linux_amd64.s
generated
vendored
1
vendor/golang.org/x/sys/unix/asm_linux_amd64.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/unix/asm_linux_arm.s
generated
vendored
1
vendor/golang.org/x/sys/unix/asm_linux_arm.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
3
vendor/golang.org/x/sys/unix/asm_linux_arm64.s
generated
vendored
3
vendor/golang.org/x/sys/unix/asm_linux_arm64.s
generated
vendored
@ -3,9 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && arm64 && gc
|
//go:build linux && arm64 && gc
|
||||||
// +build linux
|
|
||||||
// +build arm64
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
3
vendor/golang.org/x/sys/unix/asm_linux_loong64.s
generated
vendored
3
vendor/golang.org/x/sys/unix/asm_linux_loong64.s
generated
vendored
@ -3,9 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && loong64 && gc
|
//go:build linux && loong64 && gc
|
||||||
// +build linux
|
|
||||||
// +build loong64
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
3
vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
generated
vendored
3
vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
generated
vendored
@ -3,9 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && (mips64 || mips64le) && gc
|
//go:build linux && (mips64 || mips64le) && gc
|
||||||
// +build linux
|
|
||||||
// +build mips64 mips64le
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
3
vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
generated
vendored
3
vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
generated
vendored
@ -3,9 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && (mips || mipsle) && gc
|
//go:build linux && (mips || mipsle) && gc
|
||||||
// +build linux
|
|
||||||
// +build mips mipsle
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
3
vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
generated
vendored
3
vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
generated
vendored
@ -3,9 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && (ppc64 || ppc64le) && gc
|
//go:build linux && (ppc64 || ppc64le) && gc
|
||||||
// +build linux
|
|
||||||
// +build ppc64 ppc64le
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
generated
vendored
2
vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
generated
vendored
@ -3,8 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build riscv64 && gc
|
//go:build riscv64 && gc
|
||||||
// +build riscv64
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
3
vendor/golang.org/x/sys/unix/asm_linux_s390x.s
generated
vendored
3
vendor/golang.org/x/sys/unix/asm_linux_s390x.s
generated
vendored
@ -3,9 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && s390x && gc
|
//go:build linux && s390x && gc
|
||||||
// +build linux
|
|
||||||
// +build s390x
|
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s
generated
vendored
1
vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
generated
vendored
1
vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
generated
vendored
@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc
|
//go:build gc
|
||||||
// +build gc
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user