chore(deps): bump github.com/spf13/afero from 1.10.0 to 1.11.0 (#2891)
Bumps [github.com/spf13/afero](https://github.com/spf13/afero) from 1.10.0 to 1.11.0. - [Release notes](https://github.com/spf13/afero/releases) - [Commits](https://github.com/spf13/afero/compare/v1.10.0...v1.11.0) --- updated-dependencies: - dependency-name: github.com/spf13/afero dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
parent
1556a56004
commit
b77b858a62
28
go.mod
28
go.mod
|
|
@ -3,7 +3,7 @@ module github.com/GoogleContainerTools/kaniko
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go/storage v1.33.0
|
cloud.google.com/go/storage v1.35.1
|
||||||
github.com/Azure/azure-storage-blob-go v0.14.0
|
github.com/Azure/azure-storage-blob-go v0.14.0
|
||||||
// This docker-credential-gcr dependency version is actually the same as v2.1.8.
|
// This docker-credential-gcr dependency version is actually the same as v2.1.8.
|
||||||
// See https://github.com/GoogleCloudPlatform/docker-credential-gcr/issues/128
|
// See https://github.com/GoogleCloudPlatform/docker-credential-gcr/issues/128
|
||||||
|
|
@ -31,11 +31,11 @@ require (
|
||||||
github.com/otiai10/copy v1.14.0
|
github.com/otiai10/copy v1.14.0
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
github.com/spf13/afero v1.10.0
|
github.com/spf13/afero v1.11.0
|
||||||
github.com/spf13/cobra v1.7.0
|
github.com/spf13/cobra v1.7.0
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
golang.org/x/net v0.18.0
|
golang.org/x/net v0.19.0
|
||||||
golang.org/x/oauth2 v0.14.0
|
golang.org/x/oauth2 v0.15.0
|
||||||
golang.org/x/sync v0.5.0
|
golang.org/x/sync v0.5.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -48,10 +48,10 @@ require (
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.110.8 // indirect
|
cloud.google.com/go v0.110.10 // indirect
|
||||||
cloud.google.com/go/compute v1.23.1 // indirect
|
cloud.google.com/go/compute v1.23.3 // indirect
|
||||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||||
cloud.google.com/go/iam v1.1.3 // indirect
|
cloud.google.com/go/iam v1.1.5 // indirect
|
||||||
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
|
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||||
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
|
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
|
||||||
|
|
@ -144,14 +144,14 @@ require (
|
||||||
go.etcd.io/etcd/raft/v3 v3.5.6 // indirect
|
go.etcd.io/etcd/raft/v3 v3.5.6 // indirect
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.uber.org/goleak v1.2.1 // indirect
|
go.uber.org/goleak v1.2.1 // indirect
|
||||||
golang.org/x/crypto v0.15.0 // indirect
|
golang.org/x/crypto v0.16.0 // indirect
|
||||||
golang.org/x/sys v0.14.0
|
golang.org/x/sys v0.15.0
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
golang.org/x/time v0.3.0 // indirect
|
golang.org/x/time v0.5.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||||
google.golang.org/api v0.151.0
|
google.golang.org/api v0.152.0
|
||||||
google.golang.org/appengine v1.6.7 // indirect
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
|
google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect
|
||||||
google.golang.org/grpc v1.59.0 // indirect
|
google.golang.org/grpc v1.59.0 // indirect
|
||||||
google.golang.org/protobuf v1.31.0 // indirect
|
google.golang.org/protobuf v1.31.0 // indirect
|
||||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||||
|
|
@ -182,8 +182,8 @@ require (
|
||||||
github.com/spf13/viper v1.8.1 // indirect
|
github.com/spf13/viper v1.8.1 // indirect
|
||||||
github.com/subosito/gotenv v1.2.0 // indirect
|
github.com/subosito/gotenv v1.2.0 // indirect
|
||||||
github.com/toqueteos/webbrowser v1.2.0 // indirect
|
github.com/toqueteos/webbrowser v1.2.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect
|
||||||
gopkg.in/ini.v1 v1.62.0 // indirect
|
gopkg.in/ini.v1 v1.62.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
||||||
70
go.sum
70
go.sum
|
|
@ -3,7 +3,6 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
|
||||||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
||||||
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
|
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
|
||||||
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
||||||
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
|
||||||
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
|
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
|
||||||
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
|
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
|
||||||
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
|
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
|
||||||
|
|
@ -16,27 +15,26 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY
|
||||||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
||||||
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
|
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
|
||||||
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
|
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
|
||||||
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
|
|
||||||
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
|
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
|
||||||
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
|
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
|
||||||
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
|
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
|
||||||
cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME=
|
cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
|
||||||
cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk=
|
cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
|
||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||||
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
||||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||||
cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0=
|
cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk=
|
||||||
cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78=
|
cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI=
|
||||||
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
|
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
|
||||||
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
|
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
|
||||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||||
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
||||||
cloud.google.com/go/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc=
|
cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI=
|
||||||
cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE=
|
cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8=
|
||||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||||
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
||||||
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
||||||
|
|
@ -46,9 +44,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
|
||||||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
||||||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
||||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||||
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w=
|
||||||
cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M=
|
cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8=
|
||||||
cloud.google.com/go/storage v1.33.0/go.mod h1:Hhh/dogNRGca7IWv1RC2YqEn0c0G77ctA/OxflYkiD8=
|
|
||||||
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
||||||
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||||
|
|
@ -370,7 +367,6 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
|
||||||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
|
||||||
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
|
|
@ -390,7 +386,6 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
|
github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
|
||||||
github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
|
github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
|
||||||
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
|
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||||
|
|
@ -548,7 +543,6 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
|
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
|
||||||
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||||
|
|
@ -609,8 +603,8 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1
|
||||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
|
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
|
||||||
github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY=
|
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
|
||||||
github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
|
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
|
||||||
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
|
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
|
||||||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
||||||
|
|
@ -686,15 +680,14 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
||||||
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
||||||
golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
|
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
|
||||||
golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
|
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||||
|
|
@ -783,8 +776,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
|
||||||
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
|
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
|
||||||
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
|
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
|
@ -799,8 +792,8 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ
|
||||||
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||||
golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
|
golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ=
|
||||||
golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
|
golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
|
@ -865,14 +858,12 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
|
@ -894,14 +885,14 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.3.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.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
|
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
||||||
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
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=
|
||||||
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
|
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
|
@ -919,8 +910,8 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
|
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
|
||||||
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
|
@ -971,7 +962,6 @@ golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4f
|
||||||
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
|
||||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
|
|
@ -1007,8 +997,8 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR
|
||||||
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
|
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
|
||||||
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
|
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
|
||||||
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
|
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
|
||||||
google.golang.org/api v0.151.0 h1:FhfXLO/NFdJIzQtCqjpysWwqKk8AzGWBUhMIx67cVDU=
|
google.golang.org/api v0.152.0 h1:t0r1vPnfMc260S2Ci+en7kfCZaLOPs5KI0sVV/6jZrY=
|
||||||
google.golang.org/api v0.151.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
|
google.golang.org/api v0.152.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
|
@ -1052,20 +1042,18 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D
|
||||||
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
|
||||||
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
|
||||||
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
||||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
||||||
google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
|
google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ=
|
||||||
google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
|
google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b h1:CIC2YMXmIhYw6evmhPxBKJ4fmLbOFtXQN/GV3XOZR8k=
|
google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870=
|
google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
|
|
||||||
|
|
@ -15,4 +15,4 @@
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
// Version is the current tagged release of the library.
|
// Version is the current tagged release of the library.
|
||||||
const Version = "1.23.1"
|
const Version = "1.23.3"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,20 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
|
||||||
|
## [1.1.5](https://github.com/googleapis/google-cloud-go/compare/iam/v1.1.4...iam/v1.1.5) (2023-11-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **iam:** Bump google.golang.org/api to v0.149.0 ([8d2ab9f](https://github.com/googleapis/google-cloud-go/commit/8d2ab9f320a86c1c0fab90513fc05861561d0880))
|
||||||
|
|
||||||
|
## [1.1.4](https://github.com/googleapis/google-cloud-go/compare/iam/v1.1.3...iam/v1.1.4) (2023-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **iam:** Update grpc-go to v1.59.0 ([81a97b0](https://github.com/googleapis/google-cloud-go/commit/81a97b06cb28b25432e4ece595c55a9857e960b7))
|
||||||
|
|
||||||
## [1.1.3](https://github.com/googleapis/google-cloud-go/compare/iam/v1.1.2...iam/v1.1.3) (2023-10-12)
|
## [1.1.3](https://github.com/googleapis/google-cloud-go/compare/iam/v1.1.2...iam/v1.1.3) (2023-10-12)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,16 @@
|
||||||
"release_level": "preview",
|
"release_level": "preview",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/alloydb/connectors/apiv1": {
|
||||||
|
"api_shortname": "connectors",
|
||||||
|
"distribution_name": "cloud.google.com/go/alloydb/connectors/apiv1",
|
||||||
|
"description": "AlloyDB connectors",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/alloydb/latest/connectors/apiv1",
|
||||||
|
"release_level": "preview",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/alloydb/connectors/apiv1alpha": {
|
"cloud.google.com/go/alloydb/connectors/apiv1alpha": {
|
||||||
"api_shortname": "connectors",
|
"api_shortname": "connectors",
|
||||||
"distribution_name": "cloud.google.com/go/alloydb/connectors/apiv1alpha",
|
"distribution_name": "cloud.google.com/go/alloydb/connectors/apiv1alpha",
|
||||||
|
|
@ -99,6 +109,16 @@
|
||||||
"release_level": "preview",
|
"release_level": "preview",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/alloydb/connectors/apiv1beta": {
|
||||||
|
"api_shortname": "connectors",
|
||||||
|
"distribution_name": "cloud.google.com/go/alloydb/connectors/apiv1beta",
|
||||||
|
"description": "AlloyDB connectors",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/alloydb/latest/connectors/apiv1beta",
|
||||||
|
"release_level": "preview",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/analytics/admin/apiv1alpha": {
|
"cloud.google.com/go/analytics/admin/apiv1alpha": {
|
||||||
"api_shortname": "analyticsadmin",
|
"api_shortname": "analyticsadmin",
|
||||||
"distribution_name": "cloud.google.com/go/analytics/admin/apiv1alpha",
|
"distribution_name": "cloud.google.com/go/analytics/admin/apiv1alpha",
|
||||||
|
|
@ -136,7 +156,7 @@
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apigeeregistry/latest/apiv1",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apigeeregistry/latest/apiv1",
|
||||||
"release_level": "preview",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
"cloud.google.com/go/apikeys/apiv2": {
|
"cloud.google.com/go/apikeys/apiv2": {
|
||||||
|
|
@ -356,7 +376,7 @@
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/biglake/apiv1",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/biglake/apiv1",
|
||||||
"release_level": "preview",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
"cloud.google.com/go/bigquery/biglake/apiv1alpha1": {
|
"cloud.google.com/go/bigquery/biglake/apiv1alpha1": {
|
||||||
|
|
@ -715,7 +735,7 @@
|
||||||
"description": "Container Analysis API",
|
"description": "Container Analysis API",
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/containeranalysis/apiv1beta1",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/containeranalysis/latest/apiv1beta1",
|
||||||
"release_level": "preview",
|
"release_level": "preview",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
|
@ -952,7 +972,7 @@
|
||||||
"cloud.google.com/go/dlp/apiv2": {
|
"cloud.google.com/go/dlp/apiv2": {
|
||||||
"api_shortname": "dlp",
|
"api_shortname": "dlp",
|
||||||
"distribution_name": "cloud.google.com/go/dlp/apiv2",
|
"distribution_name": "cloud.google.com/go/dlp/apiv2",
|
||||||
"description": "Cloud Data Loss Prevention (DLP) API",
|
"description": "Cloud Data Loss Prevention (DLP)",
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dlp/latest/apiv2",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dlp/latest/apiv2",
|
||||||
|
|
@ -1286,7 +1306,7 @@
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/language/latest/apiv2",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/language/latest/apiv2",
|
||||||
"release_level": "preview",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
"cloud.google.com/go/lifesciences/apiv2beta": {
|
"cloud.google.com/go/lifesciences/apiv2beta": {
|
||||||
|
|
@ -1349,6 +1369,26 @@
|
||||||
"release_level": "stable",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/maps/fleetengine/apiv1": {
|
||||||
|
"api_shortname": "fleetengine",
|
||||||
|
"distribution_name": "cloud.google.com/go/maps/fleetengine/apiv1",
|
||||||
|
"description": "Local Rides and Deliveries API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/fleetengine/apiv1",
|
||||||
|
"release_level": "stable",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
|
"cloud.google.com/go/maps/fleetengine/delivery/apiv1": {
|
||||||
|
"api_shortname": "fleetengine",
|
||||||
|
"distribution_name": "cloud.google.com/go/maps/fleetengine/delivery/apiv1",
|
||||||
|
"description": "Last Mile Fleet Solution Delivery API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/fleetengine/delivery/apiv1",
|
||||||
|
"release_level": "stable",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/maps/mapsplatformdatasets/apiv1alpha": {
|
"cloud.google.com/go/maps/mapsplatformdatasets/apiv1alpha": {
|
||||||
"api_shortname": "mapsplatformdatasets",
|
"api_shortname": "mapsplatformdatasets",
|
||||||
"distribution_name": "cloud.google.com/go/maps/mapsplatformdatasets/apiv1alpha",
|
"distribution_name": "cloud.google.com/go/maps/mapsplatformdatasets/apiv1alpha",
|
||||||
|
|
@ -1556,7 +1596,7 @@
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/notebooks/latest/apiv2",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/notebooks/latest/apiv2",
|
||||||
"release_level": "preview",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
"cloud.google.com/go/optimization/apiv1": {
|
"cloud.google.com/go/optimization/apiv1": {
|
||||||
|
|
@ -1676,7 +1716,7 @@
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/policysimulator/latest/apiv1",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/policysimulator/latest/apiv1",
|
||||||
"release_level": "preview",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
"cloud.google.com/go/policytroubleshooter/apiv1": {
|
"cloud.google.com/go/policytroubleshooter/apiv1": {
|
||||||
|
|
@ -1696,7 +1736,7 @@
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/policytroubleshooter/latest/iam/apiv3",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/policytroubleshooter/latest/iam/apiv3",
|
||||||
"release_level": "preview",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
"cloud.google.com/go/privatecatalog/apiv1beta1": {
|
"cloud.google.com/go/privatecatalog/apiv1beta1": {
|
||||||
|
|
@ -1839,6 +1879,16 @@
|
||||||
"release_level": "preview",
|
"release_level": "preview",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/redis/cluster/apiv1": {
|
||||||
|
"api_shortname": "redis",
|
||||||
|
"distribution_name": "cloud.google.com/go/redis/cluster/apiv1",
|
||||||
|
"description": "Google Cloud Memorystore for Redis API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/redis/latest/cluster/apiv1",
|
||||||
|
"release_level": "preview",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/resourcemanager/apiv2": {
|
"cloud.google.com/go/resourcemanager/apiv2": {
|
||||||
"api_shortname": "cloudresourcemanager",
|
"api_shortname": "cloudresourcemanager",
|
||||||
"distribution_name": "cloud.google.com/go/resourcemanager/apiv2",
|
"distribution_name": "cloud.google.com/go/resourcemanager/apiv2",
|
||||||
|
|
@ -1949,6 +1999,16 @@
|
||||||
"release_level": "stable",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/securesourcemanager/apiv1": {
|
||||||
|
"api_shortname": "securesourcemanager",
|
||||||
|
"distribution_name": "cloud.google.com/go/securesourcemanager/apiv1",
|
||||||
|
"description": "Secure Source Manager API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securesourcemanager/latest/apiv1",
|
||||||
|
"release_level": "preview",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/security/privateca/apiv1": {
|
"cloud.google.com/go/security/privateca/apiv1": {
|
||||||
"api_shortname": "privateca",
|
"api_shortname": "privateca",
|
||||||
"distribution_name": "cloud.google.com/go/security/privateca/apiv1",
|
"distribution_name": "cloud.google.com/go/security/privateca/apiv1",
|
||||||
|
|
@ -2069,6 +2129,16 @@
|
||||||
"release_level": "stable",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/shopping/merchant/inventories/apiv1beta": {
|
||||||
|
"api_shortname": "merchantapi",
|
||||||
|
"distribution_name": "cloud.google.com/go/shopping/merchant/inventories/apiv1beta",
|
||||||
|
"description": "Merchant API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/inventories/apiv1beta",
|
||||||
|
"release_level": "preview",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/spanner": {
|
"cloud.google.com/go/spanner": {
|
||||||
"api_shortname": "spanner",
|
"api_shortname": "spanner",
|
||||||
"distribution_name": "cloud.google.com/go/spanner",
|
"distribution_name": "cloud.google.com/go/spanner",
|
||||||
|
|
@ -2275,8 +2345,8 @@
|
||||||
"description": "Video Stitcher API",
|
"description": "Video Stitcher API",
|
||||||
"language": "go",
|
"language": "go",
|
||||||
"client_library_type": "generated",
|
"client_library_type": "generated",
|
||||||
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/video/stitcher/apiv1",
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/video/latest/stitcher/apiv1",
|
||||||
"release_level": "preview",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
"cloud.google.com/go/video/transcoder/apiv1": {
|
"cloud.google.com/go/video/transcoder/apiv1": {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,46 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
|
||||||
|
## [1.35.1](https://github.com/googleapis/google-cloud-go/compare/storage/v1.35.0...storage/v1.35.1) (2023-11-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **storage:** Rename aux.go to auxiliary.go fixing windows build ([ba23673](https://github.com/googleapis/google-cloud-go/commit/ba23673da7707c31292e4aa29d65b7ac1446d4a6))
|
||||||
|
|
||||||
|
## [1.35.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.34.1...storage/v1.35.0) (2023-11-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **storage:** Change gRPC writes to use bi-directional streams ([#8930](https://github.com/googleapis/google-cloud-go/issues/8930)) ([3e23a36](https://github.com/googleapis/google-cloud-go/commit/3e23a364b1a20c4fda7aef257e4136586ec769a4))
|
||||||
|
|
||||||
|
## [1.34.1](https://github.com/googleapis/google-cloud-go/compare/storage/v1.34.0...storage/v1.34.1) (2023-11-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **storage:** Bump google.golang.org/api to v0.149.0 ([8d2ab9f](https://github.com/googleapis/google-cloud-go/commit/8d2ab9f320a86c1c0fab90513fc05861561d0880))
|
||||||
|
|
||||||
|
## [1.34.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.33.0...storage/v1.34.0) (2023-10-31)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **storage/internal:** Add match_glob field to ListObjectsRequest ([#8618](https://github.com/googleapis/google-cloud-go/issues/8618)) ([e9ae601](https://github.com/googleapis/google-cloud-go/commit/e9ae6018983ae09781740e4ff939e6e365863dbb))
|
||||||
|
* **storage/internal:** Add terminal_storage_class fields to Autoclass message ([57fc1a6](https://github.com/googleapis/google-cloud-go/commit/57fc1a6de326456eb68ef25f7a305df6636ed386))
|
||||||
|
* **storage/internal:** Adds the RestoreObject operation ([56ce871](https://github.com/googleapis/google-cloud-go/commit/56ce87195320634b07ae0b012efcc5f2b3813fb0))
|
||||||
|
* **storage:** Support autoclass v2.1 ([#8721](https://github.com/googleapis/google-cloud-go/issues/8721)) ([fe1e195](https://github.com/googleapis/google-cloud-go/commit/fe1e19590a252c6adc6ca6c51a69b6e561e143b8))
|
||||||
|
* **storage:** Support MatchGlob for gRPC ([#8670](https://github.com/googleapis/google-cloud-go/issues/8670)) ([3df0287](https://github.com/googleapis/google-cloud-go/commit/3df0287f88d5e2c4526e9e6b8dc2a4ca54f88918)), refs [#7727](https://github.com/googleapis/google-cloud-go/issues/7727)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **storage:** Drop stream reference after closing it for gRPC writes ([#8872](https://github.com/googleapis/google-cloud-go/issues/8872)) ([525abde](https://github.com/googleapis/google-cloud-go/commit/525abdee433864d4d456f1f1fff5599017b557ff))
|
||||||
|
* **storage:** Update golang.org/x/net to v0.17.0 ([174da47](https://github.com/googleapis/google-cloud-go/commit/174da47254fefb12921bbfc65b7829a453af6f5d))
|
||||||
|
* **storage:** Update grpc-go to v1.56.3 ([343cea8](https://github.com/googleapis/google-cloud-go/commit/343cea8c43b1e31ae21ad50ad31d3b0b60143f8c))
|
||||||
|
* **storage:** Update grpc-go to v1.59.0 ([81a97b0](https://github.com/googleapis/google-cloud-go/commit/81a97b06cb28b25432e4ece595c55a9857e960b7))
|
||||||
|
|
||||||
## [1.33.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.32.0...storage/v1.33.0) (2023-09-07)
|
## [1.33.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.32.0...storage/v1.33.0) (2023-09-07)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -740,6 +740,13 @@ type Autoclass struct {
|
||||||
// If Autoclass is enabled when the bucket is created, the ToggleTime
|
// If Autoclass is enabled when the bucket is created, the ToggleTime
|
||||||
// is set to the bucket creation time. This field is read-only.
|
// is set to the bucket creation time. This field is read-only.
|
||||||
ToggleTime time.Time
|
ToggleTime time.Time
|
||||||
|
// TerminalStorageClass: The storage class that objects in the bucket
|
||||||
|
// eventually transition to if they are not read for a certain length of
|
||||||
|
// time. Valid values are NEARLINE and ARCHIVE.
|
||||||
|
TerminalStorageClass string
|
||||||
|
// TerminalStorageClassUpdateTime represents the time of the most recent
|
||||||
|
// update to "TerminalStorageClass".
|
||||||
|
TerminalStorageClassUpdateTime time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func newBucket(b *raw.Bucket) (*BucketAttrs, error) {
|
func newBucket(b *raw.Bucket) (*BucketAttrs, error) {
|
||||||
|
|
@ -1241,9 +1248,11 @@ func (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket {
|
||||||
}
|
}
|
||||||
if ua.Autoclass != nil {
|
if ua.Autoclass != nil {
|
||||||
rb.Autoclass = &raw.BucketAutoclass{
|
rb.Autoclass = &raw.BucketAutoclass{
|
||||||
Enabled: ua.Autoclass.Enabled,
|
Enabled: ua.Autoclass.Enabled,
|
||||||
ForceSendFields: []string{"Enabled"},
|
TerminalStorageClass: ua.Autoclass.TerminalStorageClass,
|
||||||
|
ForceSendFields: []string{"Enabled"},
|
||||||
}
|
}
|
||||||
|
rb.ForceSendFields = append(rb.ForceSendFields, "Autoclass")
|
||||||
}
|
}
|
||||||
if ua.PredefinedACL != "" {
|
if ua.PredefinedACL != "" {
|
||||||
// Clear ACL or the call will fail.
|
// Clear ACL or the call will fail.
|
||||||
|
|
@ -1954,9 +1963,10 @@ func (a *Autoclass) toRawAutoclass() *raw.BucketAutoclass {
|
||||||
if a == nil {
|
if a == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// Excluding read only field ToggleTime.
|
// Excluding read only fields ToggleTime and TerminalStorageClassUpdateTime.
|
||||||
return &raw.BucketAutoclass{
|
return &raw.BucketAutoclass{
|
||||||
Enabled: a.Enabled,
|
Enabled: a.Enabled,
|
||||||
|
TerminalStorageClass: a.TerminalStorageClass,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1964,27 +1974,34 @@ func (a *Autoclass) toProtoAutoclass() *storagepb.Bucket_Autoclass {
|
||||||
if a == nil {
|
if a == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// Excluding read only field ToggleTime.
|
// Excluding read only fields ToggleTime and TerminalStorageClassUpdateTime.
|
||||||
return &storagepb.Bucket_Autoclass{
|
ba := &storagepb.Bucket_Autoclass{
|
||||||
Enabled: a.Enabled,
|
Enabled: a.Enabled,
|
||||||
}
|
}
|
||||||
|
if a.TerminalStorageClass != "" {
|
||||||
|
ba.TerminalStorageClass = &a.TerminalStorageClass
|
||||||
|
}
|
||||||
|
return ba
|
||||||
}
|
}
|
||||||
|
|
||||||
func toAutoclassFromRaw(a *raw.BucketAutoclass) *Autoclass {
|
func toAutoclassFromRaw(a *raw.BucketAutoclass) *Autoclass {
|
||||||
if a == nil || a.ToggleTime == "" {
|
if a == nil || a.ToggleTime == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// Return Autoclass.ToggleTime only if parsed with a valid value.
|
ac := &Autoclass{
|
||||||
|
Enabled: a.Enabled,
|
||||||
|
TerminalStorageClass: a.TerminalStorageClass,
|
||||||
|
}
|
||||||
|
// Return ToggleTime and TSCUpdateTime only if parsed with valid values.
|
||||||
t, err := time.Parse(time.RFC3339, a.ToggleTime)
|
t, err := time.Parse(time.RFC3339, a.ToggleTime)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
return &Autoclass{
|
ac.ToggleTime = t
|
||||||
Enabled: a.Enabled,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return &Autoclass{
|
ut, err := time.Parse(time.RFC3339, a.TerminalStorageClassUpdateTime)
|
||||||
Enabled: a.Enabled,
|
if err == nil {
|
||||||
ToggleTime: t,
|
ac.TerminalStorageClassUpdateTime = ut
|
||||||
}
|
}
|
||||||
|
return ac
|
||||||
}
|
}
|
||||||
|
|
||||||
func toAutoclassFromProto(a *storagepb.Bucket_Autoclass) *Autoclass {
|
func toAutoclassFromProto(a *storagepb.Bucket_Autoclass) *Autoclass {
|
||||||
|
|
@ -1992,8 +2009,10 @@ func toAutoclassFromProto(a *storagepb.Bucket_Autoclass) *Autoclass {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return &Autoclass{
|
return &Autoclass{
|
||||||
Enabled: a.GetEnabled(),
|
Enabled: a.GetEnabled(),
|
||||||
ToggleTime: a.GetToggleTime().AsTime(),
|
ToggleTime: a.GetToggleTime().AsTime(),
|
||||||
|
TerminalStorageClass: a.GetTerminalStorageClass(),
|
||||||
|
TerminalStorageClassUpdateTime: a.GetTerminalStorageClassUpdateTime().AsTime(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,11 +141,11 @@ func (c *grpcStorageClient) GetServiceAccount(ctx context.Context, project strin
|
||||||
Project: toProjectResource(project),
|
Project: toProjectResource(project),
|
||||||
}
|
}
|
||||||
var resp *storagepb.ServiceAccount
|
var resp *storagepb.ServiceAccount
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
resp, err = c.raw.GetServiceAccount(ctx, req, s.gax...)
|
resp, err = c.raw.GetServiceAccount(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
@ -173,13 +173,13 @@ func (c *grpcStorageClient) CreateBucket(ctx context.Context, project, bucket st
|
||||||
}
|
}
|
||||||
|
|
||||||
var battrs *BucketAttrs
|
var battrs *BucketAttrs
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
res, err := c.raw.CreateBucket(ctx, req, s.gax...)
|
res, err := c.raw.CreateBucket(ctx, req, s.gax...)
|
||||||
|
|
||||||
battrs = newBucketFromProto(res)
|
battrs = newBucketFromProto(res)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
return battrs, err
|
return battrs, err
|
||||||
}
|
}
|
||||||
|
|
@ -193,26 +193,26 @@ func (c *grpcStorageClient) ListBuckets(ctx context.Context, project string, opt
|
||||||
|
|
||||||
var gitr *gapic.BucketIterator
|
var gitr *gapic.BucketIterator
|
||||||
fetch := func(pageSize int, pageToken string) (token string, err error) {
|
fetch := func(pageSize int, pageToken string) (token string, err error) {
|
||||||
// Initialize GAPIC-based iterator when pageToken is empty, which
|
|
||||||
// indicates that this fetch call is attempting to get the first page.
|
|
||||||
//
|
|
||||||
// Note: Initializing the GAPIC-based iterator lazily is necessary to
|
|
||||||
// capture the BucketIterator.Prefix set by the user *after* the
|
|
||||||
// BucketIterator is returned to them from the veneer.
|
|
||||||
if pageToken == "" {
|
|
||||||
req := &storagepb.ListBucketsRequest{
|
|
||||||
Parent: toProjectResource(it.projectID),
|
|
||||||
Prefix: it.Prefix,
|
|
||||||
}
|
|
||||||
gitr = c.raw.ListBuckets(it.ctx, req, s.gax...)
|
|
||||||
}
|
|
||||||
|
|
||||||
var buckets []*storagepb.Bucket
|
var buckets []*storagepb.Bucket
|
||||||
var next string
|
var next string
|
||||||
err = run(it.ctx, func() error {
|
err = run(it.ctx, func(ctx context.Context) error {
|
||||||
|
// Initialize GAPIC-based iterator when pageToken is empty, which
|
||||||
|
// indicates that this fetch call is attempting to get the first page.
|
||||||
|
//
|
||||||
|
// Note: Initializing the GAPIC-based iterator lazily is necessary to
|
||||||
|
// capture the BucketIterator.Prefix set by the user *after* the
|
||||||
|
// BucketIterator is returned to them from the veneer.
|
||||||
|
if pageToken == "" {
|
||||||
|
req := &storagepb.ListBucketsRequest{
|
||||||
|
Parent: toProjectResource(it.projectID),
|
||||||
|
Prefix: it.Prefix,
|
||||||
|
}
|
||||||
|
gitr = c.raw.ListBuckets(ctx, req, s.gax...)
|
||||||
|
}
|
||||||
buckets, next, err = gitr.InternalFetch(pageSize, pageToken)
|
buckets, next, err = gitr.InternalFetch(pageSize, pageToken)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
@ -246,9 +246,9 @@ func (c *grpcStorageClient) DeleteBucket(ctx context.Context, bucket string, con
|
||||||
ctx = setUserProjectMetadata(ctx, s.userProject)
|
ctx = setUserProjectMetadata(ctx, s.userProject)
|
||||||
}
|
}
|
||||||
|
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
return c.raw.DeleteBucket(ctx, req, s.gax...)
|
return c.raw.DeleteBucket(ctx, req, s.gax...)
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *grpcStorageClient) GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) {
|
func (c *grpcStorageClient) GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
|
|
@ -265,13 +265,13 @@ func (c *grpcStorageClient) GetBucket(ctx context.Context, bucket string, conds
|
||||||
}
|
}
|
||||||
|
|
||||||
var battrs *BucketAttrs
|
var battrs *BucketAttrs
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
res, err := c.raw.GetBucket(ctx, req, s.gax...)
|
res, err := c.raw.GetBucket(ctx, req, s.gax...)
|
||||||
|
|
||||||
battrs = newBucketFromProto(res)
|
battrs = newBucketFromProto(res)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound {
|
if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound {
|
||||||
return nil, ErrBucketNotExist
|
return nil, ErrBucketNotExist
|
||||||
|
|
@ -369,11 +369,11 @@ func (c *grpcStorageClient) UpdateBucket(ctx context.Context, bucket string, uat
|
||||||
req.UpdateMask = fieldMask
|
req.UpdateMask = fieldMask
|
||||||
|
|
||||||
var battrs *BucketAttrs
|
var battrs *BucketAttrs
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
res, err := c.raw.UpdateBucket(ctx, req, s.gax...)
|
res, err := c.raw.UpdateBucket(ctx, req, s.gax...)
|
||||||
battrs = newBucketFromProto(res)
|
battrs = newBucketFromProto(res)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
return battrs, err
|
return battrs, err
|
||||||
}
|
}
|
||||||
|
|
@ -386,10 +386,10 @@ func (c *grpcStorageClient) LockBucketRetentionPolicy(ctx context.Context, bucke
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
_, err := c.raw.LockBucketRetentionPolicy(ctx, req, s.gax...)
|
_, err := c.raw.LockBucketRetentionPolicy(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
}
|
}
|
||||||
func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) *ObjectIterator {
|
func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) *ObjectIterator {
|
||||||
|
|
@ -408,23 +408,21 @@ func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Q
|
||||||
LexicographicStart: it.query.StartOffset,
|
LexicographicStart: it.query.StartOffset,
|
||||||
LexicographicEnd: it.query.EndOffset,
|
LexicographicEnd: it.query.EndOffset,
|
||||||
IncludeTrailingDelimiter: it.query.IncludeTrailingDelimiter,
|
IncludeTrailingDelimiter: it.query.IncludeTrailingDelimiter,
|
||||||
|
MatchGlob: it.query.MatchGlob,
|
||||||
ReadMask: q.toFieldMask(), // a nil Query still results in a "*" FieldMask
|
ReadMask: q.toFieldMask(), // a nil Query still results in a "*" FieldMask
|
||||||
}
|
}
|
||||||
if s.userProject != "" {
|
if s.userProject != "" {
|
||||||
ctx = setUserProjectMetadata(ctx, s.userProject)
|
ctx = setUserProjectMetadata(ctx, s.userProject)
|
||||||
}
|
}
|
||||||
gitr := c.raw.ListObjects(it.ctx, req, s.gax...)
|
|
||||||
fetch := func(pageSize int, pageToken string) (token string, err error) {
|
fetch := func(pageSize int, pageToken string) (token string, err error) {
|
||||||
// MatchGlob not yet supported for gRPC.
|
|
||||||
// TODO: add support when b/287306063 resolved.
|
|
||||||
if q != nil && q.MatchGlob != "" {
|
|
||||||
return "", status.Errorf(codes.Unimplemented, "MatchGlob is not supported for gRPC")
|
|
||||||
}
|
|
||||||
var objects []*storagepb.Object
|
var objects []*storagepb.Object
|
||||||
err = run(it.ctx, func() error {
|
var gitr *gapic.ObjectIterator
|
||||||
|
err = run(it.ctx, func(ctx context.Context) error {
|
||||||
|
gitr = c.raw.ListObjects(ctx, req, s.gax...)
|
||||||
|
it.ctx = ctx
|
||||||
objects, token, err = gitr.InternalFetch(pageSize, pageToken)
|
objects, token, err = gitr.InternalFetch(pageSize, pageToken)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if st, ok := status.FromError(err); ok && st.Code() == codes.NotFound {
|
if st, ok := status.FromError(err); ok && st.Code() == codes.NotFound {
|
||||||
err = ErrBucketNotExist
|
err = ErrBucketNotExist
|
||||||
|
|
@ -467,9 +465,9 @@ func (c *grpcStorageClient) DeleteObject(ctx context.Context, bucket, object str
|
||||||
if s.userProject != "" {
|
if s.userProject != "" {
|
||||||
ctx = setUserProjectMetadata(ctx, s.userProject)
|
ctx = setUserProjectMetadata(ctx, s.userProject)
|
||||||
}
|
}
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
return c.raw.DeleteObject(ctx, req, s.gax...)
|
return c.raw.DeleteObject(ctx, req, s.gax...)
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound {
|
if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound {
|
||||||
return ErrObjectNotExist
|
return ErrObjectNotExist
|
||||||
}
|
}
|
||||||
|
|
@ -495,12 +493,12 @@ func (c *grpcStorageClient) GetObject(ctx context.Context, bucket, object string
|
||||||
}
|
}
|
||||||
|
|
||||||
var attrs *ObjectAttrs
|
var attrs *ObjectAttrs
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
res, err := c.raw.GetObject(ctx, req, s.gax...)
|
res, err := c.raw.GetObject(ctx, req, s.gax...)
|
||||||
attrs = newObjectFromProto(res)
|
attrs = newObjectFromProto(res)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound {
|
if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound {
|
||||||
return nil, ErrObjectNotExist
|
return nil, ErrObjectNotExist
|
||||||
|
|
@ -577,11 +575,11 @@ func (c *grpcStorageClient) UpdateObject(ctx context.Context, bucket, object str
|
||||||
req.UpdateMask = fieldMask
|
req.UpdateMask = fieldMask
|
||||||
|
|
||||||
var attrs *ObjectAttrs
|
var attrs *ObjectAttrs
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
res, err := c.raw.UpdateObject(ctx, req, s.gax...)
|
res, err := c.raw.UpdateObject(ctx, req, s.gax...)
|
||||||
attrs = newObjectFromProto(res)
|
attrs = newObjectFromProto(res)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if e, ok := status.FromError(err); ok && e.Code() == codes.NotFound {
|
if e, ok := status.FromError(err); ok && e.Code() == codes.NotFound {
|
||||||
return nil, ErrObjectNotExist
|
return nil, ErrObjectNotExist
|
||||||
}
|
}
|
||||||
|
|
@ -820,10 +818,10 @@ func (c *grpcStorageClient) ComposeObject(ctx context.Context, req *composeObjec
|
||||||
|
|
||||||
var obj *storagepb.Object
|
var obj *storagepb.Object
|
||||||
var err error
|
var err error
|
||||||
if err := run(ctx, func() error {
|
if err := run(ctx, func(ctx context.Context) error {
|
||||||
obj, err = c.raw.ComposeObject(ctx, rawReq, s.gax...)
|
obj, err = c.raw.ComposeObject(ctx, rawReq, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)); err != nil {
|
}, s.retry, s.idempotent); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -870,9 +868,9 @@ func (c *grpcStorageClient) RewriteObject(ctx context.Context, req *rewriteObjec
|
||||||
var res *storagepb.RewriteResponse
|
var res *storagepb.RewriteResponse
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
retryCall := func() error { res, err = c.raw.RewriteObject(ctx, call, s.gax...); return err }
|
retryCall := func(ctx context.Context) error { res, err = c.raw.RewriteObject(ctx, call, s.gax...); return err }
|
||||||
|
|
||||||
if err := run(ctx, retryCall, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)); err != nil {
|
if err := run(ctx, retryCall, s.retry, s.idempotent); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -936,7 +934,7 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange
|
||||||
var msg *storagepb.ReadObjectResponse
|
var msg *storagepb.ReadObjectResponse
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
err = run(cc, func() error {
|
err = run(cc, func(ctx context.Context) error {
|
||||||
stream, err = c.raw.ReadObject(cc, req, s.gax...)
|
stream, err = c.raw.ReadObject(cc, req, s.gax...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -950,7 +948,7 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Close the stream context we just created to ensure we don't leak
|
// Close the stream context we just created to ensure we don't leak
|
||||||
// resources.
|
// resources.
|
||||||
|
|
@ -1068,7 +1066,7 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
o, off, finalized, err := gw.uploadBuffer(recvd, offset, doneReading)
|
o, off, err := gw.uploadBuffer(recvd, offset, doneReading)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = checkCanceled(err)
|
err = checkCanceled(err)
|
||||||
errorf(err)
|
errorf(err)
|
||||||
|
|
@ -1087,9 +1085,9 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage
|
||||||
progress(offset)
|
progress(offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
// When we are done reading data and the chunk has been finalized,
|
// When we are done reading data without errors, set the object and
|
||||||
// we are done.
|
// finish.
|
||||||
if doneReading && finalized {
|
if doneReading {
|
||||||
// Build Object from server's response.
|
// Build Object from server's response.
|
||||||
setObj(newObjectFromProto(o))
|
setObj(newObjectFromProto(o))
|
||||||
return
|
return
|
||||||
|
|
@ -1112,11 +1110,11 @@ func (c *grpcStorageClient) GetIamPolicy(ctx context.Context, resource string, v
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
var rp *iampb.Policy
|
var rp *iampb.Policy
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
rp, err = c.raw.GetIamPolicy(ctx, req, s.gax...)
|
rp, err = c.raw.GetIamPolicy(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
return rp, err
|
return rp, err
|
||||||
}
|
}
|
||||||
|
|
@ -1130,10 +1128,10 @@ func (c *grpcStorageClient) SetIamPolicy(ctx context.Context, resource string, p
|
||||||
Policy: policy,
|
Policy: policy,
|
||||||
}
|
}
|
||||||
|
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
_, err := c.raw.SetIamPolicy(ctx, req, s.gax...)
|
_, err := c.raw.SetIamPolicy(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *grpcStorageClient) TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error) {
|
func (c *grpcStorageClient) TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error) {
|
||||||
|
|
@ -1144,11 +1142,11 @@ func (c *grpcStorageClient) TestIamPermissions(ctx context.Context, resource str
|
||||||
Permissions: permissions,
|
Permissions: permissions,
|
||||||
}
|
}
|
||||||
var res *iampb.TestIamPermissionsResponse
|
var res *iampb.TestIamPermissionsResponse
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
res, err = c.raw.TestIamPermissions(ctx, req, s.gax...)
|
res, err = c.raw.TestIamPermissions(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1167,11 +1165,11 @@ func (c *grpcStorageClient) GetHMACKey(ctx context.Context, project, accessID st
|
||||||
ctx = setUserProjectMetadata(ctx, s.userProject)
|
ctx = setUserProjectMetadata(ctx, s.userProject)
|
||||||
}
|
}
|
||||||
var metadata *storagepb.HmacKeyMetadata
|
var metadata *storagepb.HmacKeyMetadata
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
metadata, err = c.raw.GetHmacKey(ctx, req, s.gax...)
|
metadata, err = c.raw.GetHmacKey(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1193,13 +1191,13 @@ func (c *grpcStorageClient) ListHMACKeys(ctx context.Context, project, serviceAc
|
||||||
projectID: project,
|
projectID: project,
|
||||||
retry: s.retry,
|
retry: s.retry,
|
||||||
}
|
}
|
||||||
gitr := c.raw.ListHmacKeys(it.ctx, req, s.gax...)
|
|
||||||
fetch := func(pageSize int, pageToken string) (token string, err error) {
|
fetch := func(pageSize int, pageToken string) (token string, err error) {
|
||||||
var hmacKeys []*storagepb.HmacKeyMetadata
|
var hmacKeys []*storagepb.HmacKeyMetadata
|
||||||
err = run(it.ctx, func() error {
|
err = run(it.ctx, func(ctx context.Context) error {
|
||||||
|
gitr := c.raw.ListHmacKeys(ctx, req, s.gax...)
|
||||||
hmacKeys, token, err = gitr.InternalFetch(pageSize, pageToken)
|
hmacKeys, token, err = gitr.InternalFetch(pageSize, pageToken)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
@ -1246,11 +1244,11 @@ func (c *grpcStorageClient) UpdateHMACKey(ctx context.Context, project, serviceA
|
||||||
ctx = setUserProjectMetadata(ctx, s.userProject)
|
ctx = setUserProjectMetadata(ctx, s.userProject)
|
||||||
}
|
}
|
||||||
var metadata *storagepb.HmacKeyMetadata
|
var metadata *storagepb.HmacKeyMetadata
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
metadata, err = c.raw.UpdateHmacKey(ctx, req, s.gax...)
|
metadata, err = c.raw.UpdateHmacKey(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1267,11 +1265,11 @@ func (c *grpcStorageClient) CreateHMACKey(ctx context.Context, project, serviceA
|
||||||
ctx = setUserProjectMetadata(ctx, s.userProject)
|
ctx = setUserProjectMetadata(ctx, s.userProject)
|
||||||
}
|
}
|
||||||
var res *storagepb.CreateHmacKeyResponse
|
var res *storagepb.CreateHmacKeyResponse
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
res, err = c.raw.CreateHmacKey(ctx, req, s.gax...)
|
res, err = c.raw.CreateHmacKey(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1290,9 +1288,9 @@ func (c *grpcStorageClient) DeleteHMACKey(ctx context.Context, project string, a
|
||||||
if s.userProject != "" {
|
if s.userProject != "" {
|
||||||
ctx = setUserProjectMetadata(ctx, s.userProject)
|
ctx = setUserProjectMetadata(ctx, s.userProject)
|
||||||
}
|
}
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
return c.raw.DeleteHmacKey(ctx, req, s.gax...)
|
return c.raw.DeleteHmacKey(ctx, req, s.gax...)
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notification methods.
|
// Notification methods.
|
||||||
|
|
@ -1309,7 +1307,7 @@ func (c *grpcStorageClient) ListNotifications(ctx context.Context, bucket string
|
||||||
Parent: bucketResourceName(globalProjectAlias, bucket),
|
Parent: bucketResourceName(globalProjectAlias, bucket),
|
||||||
}
|
}
|
||||||
var notifications []*storagepb.NotificationConfig
|
var notifications []*storagepb.NotificationConfig
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
gitr := c.raw.ListNotificationConfigs(ctx, req, s.gax...)
|
gitr := c.raw.ListNotificationConfigs(ctx, req, s.gax...)
|
||||||
for {
|
for {
|
||||||
// PageSize is not set and fallbacks to the API default pageSize of 100.
|
// PageSize is not set and fallbacks to the API default pageSize of 100.
|
||||||
|
|
@ -1324,7 +1322,7 @@ func (c *grpcStorageClient) ListNotifications(ctx context.Context, bucket string
|
||||||
}
|
}
|
||||||
req.PageToken = nextPageToken
|
req.PageToken = nextPageToken
|
||||||
}
|
}
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1342,11 +1340,11 @@ func (c *grpcStorageClient) CreateNotification(ctx context.Context, bucket strin
|
||||||
NotificationConfig: toProtoNotification(n),
|
NotificationConfig: toProtoNotification(n),
|
||||||
}
|
}
|
||||||
var pbn *storagepb.NotificationConfig
|
var pbn *storagepb.NotificationConfig
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
pbn, err = c.raw.CreateNotificationConfig(ctx, req, s.gax...)
|
pbn, err = c.raw.CreateNotificationConfig(ctx, req, s.gax...)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1359,9 +1357,9 @@ func (c *grpcStorageClient) DeleteNotification(ctx context.Context, bucket strin
|
||||||
|
|
||||||
s := callSettings(c.settings, opts...)
|
s := callSettings(c.settings, opts...)
|
||||||
req := &storagepb.DeleteNotificationConfigRequest{Name: id}
|
req := &storagepb.DeleteNotificationConfigRequest{Name: id}
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
return c.raw.DeleteNotificationConfig(ctx, req, s.gax...)
|
return c.raw.DeleteNotificationConfig(ctx, req, s.gax...)
|
||||||
}, s.retry, s.idempotent, setRetryHeaderGRPC(ctx))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// setUserProjectMetadata appends a project ID to the outgoing Context metadata
|
// setUserProjectMetadata appends a project ID to the outgoing Context metadata
|
||||||
|
|
@ -1539,7 +1537,7 @@ type gRPCWriter struct {
|
||||||
chunkSize int
|
chunkSize int
|
||||||
|
|
||||||
// The gRPC client-stream used for sending buffers.
|
// The gRPC client-stream used for sending buffers.
|
||||||
stream storagepb.Storage_WriteObjectClient
|
stream storagepb.Storage_BidiWriteObjectClient
|
||||||
|
|
||||||
// The Resumable Upload ID started by a gRPC-based Writer.
|
// The Resumable Upload ID started by a gRPC-based Writer.
|
||||||
upid string
|
upid string
|
||||||
|
|
@ -1560,68 +1558,79 @@ func (w *gRPCWriter) startResumableUpload() error {
|
||||||
// the upload, but in the future, we must also support sending it
|
// the upload, but in the future, we must also support sending it
|
||||||
// on the *last* message of the stream.
|
// on the *last* message of the stream.
|
||||||
req.ObjectChecksums = toProtoChecksums(w.sendCRC32C, w.attrs)
|
req.ObjectChecksums = toProtoChecksums(w.sendCRC32C, w.attrs)
|
||||||
return run(w.ctx, func() error {
|
return run(w.ctx, func(ctx context.Context) error {
|
||||||
upres, err := w.c.raw.StartResumableWrite(w.ctx, req)
|
upres, err := w.c.raw.StartResumableWrite(w.ctx, req)
|
||||||
w.upid = upres.GetUploadId()
|
w.upid = upres.GetUploadId()
|
||||||
return err
|
return err
|
||||||
}, w.settings.retry, w.settings.idempotent, setRetryHeaderGRPC(w.ctx))
|
}, w.settings.retry, w.settings.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// queryProgress is a helper that queries the status of the resumable upload
|
// queryProgress is a helper that queries the status of the resumable upload
|
||||||
// associated with the given upload ID.
|
// associated with the given upload ID.
|
||||||
func (w *gRPCWriter) queryProgress() (int64, error) {
|
func (w *gRPCWriter) queryProgress() (int64, error) {
|
||||||
var persistedSize int64
|
var persistedSize int64
|
||||||
err := run(w.ctx, func() error {
|
err := run(w.ctx, func(ctx context.Context) error {
|
||||||
q, err := w.c.raw.QueryWriteStatus(w.ctx, &storagepb.QueryWriteStatusRequest{
|
q, err := w.c.raw.QueryWriteStatus(w.ctx, &storagepb.QueryWriteStatusRequest{
|
||||||
UploadId: w.upid,
|
UploadId: w.upid,
|
||||||
})
|
})
|
||||||
persistedSize = q.GetPersistedSize()
|
persistedSize = q.GetPersistedSize()
|
||||||
return err
|
return err
|
||||||
}, w.settings.retry, true, setRetryHeaderGRPC(w.ctx))
|
}, w.settings.retry, true)
|
||||||
|
|
||||||
// q.GetCommittedSize() will return 0 if q is nil.
|
// q.GetCommittedSize() will return 0 if q is nil.
|
||||||
return persistedSize, err
|
return persistedSize, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// uploadBuffer opens a Write stream and uploads the buffer at the given offset (if
|
// uploadBuffer uploads the buffer at the given offset using a bi-directional
|
||||||
// uploading a chunk for a resumable uploadBuffer), and will mark the write as
|
// Write stream. It will open a new stream if necessary (on the first call or
|
||||||
// finished if we are done receiving data from the user. The resulting write
|
// after resuming from failure). The resulting write offset after uploading the
|
||||||
// offset after uploading the buffer is returned, as well as a boolean
|
// buffer is returned, as well as well as the final Object if the upload is
|
||||||
// indicating if the Object has been finalized. If it has been finalized, the
|
// completed.
|
||||||
// final Object will be returned as well. Finalizing the upload is primarily
|
//
|
||||||
// important for Resumable Uploads. A simple or multi-part upload will always
|
// Returns object, persisted size, and any error that is not retriable.
|
||||||
// be finalized once the entire buffer has been written.
|
func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*storagepb.Object, int64, error) {
|
||||||
func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*storagepb.Object, int64, bool, error) {
|
|
||||||
var err error
|
|
||||||
var finishWrite bool
|
|
||||||
var sent, limit int = 0, maxPerMessageWriteSize
|
|
||||||
var shouldRetry = ShouldRetry
|
var shouldRetry = ShouldRetry
|
||||||
if w.settings.retry != nil && w.settings.retry.shouldRetry != nil {
|
if w.settings.retry != nil && w.settings.retry.shouldRetry != nil {
|
||||||
shouldRetry = w.settings.retry.shouldRetry
|
shouldRetry = w.settings.retry.shouldRetry
|
||||||
}
|
}
|
||||||
offset := start
|
|
||||||
|
var err error
|
||||||
|
var lastWriteOfEntireObject bool
|
||||||
|
|
||||||
|
sent := 0
|
||||||
|
writeOffset := start
|
||||||
|
|
||||||
toWrite := w.buf[:recvd]
|
toWrite := w.buf[:recvd]
|
||||||
|
|
||||||
|
// Send a request with as many bytes as possible.
|
||||||
|
// Loop until all bytes are sent.
|
||||||
for {
|
for {
|
||||||
// This indicates that this is the last message and the remaining
|
bytesNotYetSent := recvd - sent
|
||||||
// data fits in one message.
|
remainingDataFitsInSingleReq := bytesNotYetSent <= maxPerMessageWriteSize
|
||||||
belowLimit := recvd-sent <= limit
|
|
||||||
if belowLimit {
|
if remainingDataFitsInSingleReq && doneReading {
|
||||||
limit = recvd - sent
|
lastWriteOfEntireObject = true
|
||||||
}
|
}
|
||||||
if belowLimit && doneReading {
|
|
||||||
finishWrite = true
|
// Send the maximum amount of bytes we can, unless we don't have that many.
|
||||||
|
bytesToSendInCurrReq := maxPerMessageWriteSize
|
||||||
|
if remainingDataFitsInSingleReq {
|
||||||
|
bytesToSendInCurrReq = bytesNotYetSent
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepare chunk section for upload.
|
// Prepare chunk section for upload.
|
||||||
data := toWrite[sent : sent+limit]
|
data := toWrite[sent : sent+bytesToSendInCurrReq]
|
||||||
req := &storagepb.WriteObjectRequest{
|
|
||||||
Data: &storagepb.WriteObjectRequest_ChecksummedData{
|
req := &storagepb.BidiWriteObjectRequest{
|
||||||
|
Data: &storagepb.BidiWriteObjectRequest_ChecksummedData{
|
||||||
ChecksummedData: &storagepb.ChecksummedData{
|
ChecksummedData: &storagepb.ChecksummedData{
|
||||||
Content: data,
|
Content: data,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
WriteOffset: offset,
|
WriteOffset: writeOffset,
|
||||||
FinishWrite: finishWrite,
|
FinishWrite: lastWriteOfEntireObject,
|
||||||
|
Flush: remainingDataFitsInSingleReq,
|
||||||
|
StateLookup: remainingDataFitsInSingleReq,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open a new stream if necessary and set the first_message field on
|
// Open a new stream if necessary and set the first_message field on
|
||||||
|
|
@ -1630,19 +1639,20 @@ func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*st
|
||||||
if w.stream == nil {
|
if w.stream == nil {
|
||||||
hds := []string{"x-goog-request-params", fmt.Sprintf("bucket=projects/_/buckets/%s", url.QueryEscape(w.bucket))}
|
hds := []string{"x-goog-request-params", fmt.Sprintf("bucket=projects/_/buckets/%s", url.QueryEscape(w.bucket))}
|
||||||
ctx := gax.InsertMetadataIntoOutgoingContext(w.ctx, hds...)
|
ctx := gax.InsertMetadataIntoOutgoingContext(w.ctx, hds...)
|
||||||
w.stream, err = w.c.raw.WriteObject(ctx)
|
|
||||||
|
w.stream, err = w.c.raw.BidiWriteObject(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, false, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if w.upid != "" {
|
if w.upid != "" { // resumable upload
|
||||||
req.FirstMessage = &storagepb.WriteObjectRequest_UploadId{UploadId: w.upid}
|
req.FirstMessage = &storagepb.BidiWriteObjectRequest_UploadId{UploadId: w.upid}
|
||||||
} else {
|
} else { // non-resumable
|
||||||
spec, err := w.writeObjectSpec()
|
spec, err := w.writeObjectSpec()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, false, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
req.FirstMessage = &storagepb.WriteObjectRequest_WriteObjectSpec{
|
req.FirstMessage = &storagepb.BidiWriteObjectRequest_WriteObjectSpec{
|
||||||
WriteObjectSpec: spec,
|
WriteObjectSpec: spec,
|
||||||
}
|
}
|
||||||
req.CommonObjectRequestParams = toProtoCommonObjectRequestParams(w.encryptionKey)
|
req.CommonObjectRequestParams = toProtoCommonObjectRequestParams(w.encryptionKey)
|
||||||
|
|
@ -1652,38 +1662,53 @@ func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*st
|
||||||
// on the *last* message of the stream (instead of the first).
|
// on the *last* message of the stream (instead of the first).
|
||||||
req.ObjectChecksums = toProtoChecksums(w.sendCRC32C, w.attrs)
|
req.ObjectChecksums = toProtoChecksums(w.sendCRC32C, w.attrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = w.stream.Send(req)
|
err = w.stream.Send(req)
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
// err was io.EOF. The client-side of a stream only gets an EOF on Send
|
// err was io.EOF. The client-side of a stream only gets an EOF on Send
|
||||||
// when the backend closes the stream and wants to return an error
|
// when the backend closes the stream and wants to return an error
|
||||||
// status. Closing the stream receives the status as an error.
|
// status.
|
||||||
_, err = w.stream.CloseAndRecv()
|
|
||||||
|
// Receive from the stream Recv() until it returns a non-nil error
|
||||||
|
// to receive the server's status as an error. We may get multiple
|
||||||
|
// messages before the error due to buffering.
|
||||||
|
err = nil
|
||||||
|
for err == nil {
|
||||||
|
_, err = w.stream.Recv()
|
||||||
|
}
|
||||||
|
// Drop the stream reference as a new one will need to be created if
|
||||||
|
// we retry.
|
||||||
|
w.stream = nil
|
||||||
|
|
||||||
|
// Drop the stream reference as a new one will need to be created if
|
||||||
|
// we can retry the upload
|
||||||
|
w.stream = nil
|
||||||
|
|
||||||
// Retriable errors mean we should start over and attempt to
|
// Retriable errors mean we should start over and attempt to
|
||||||
// resend the entire buffer via a new stream.
|
// resend the entire buffer via a new stream.
|
||||||
// If not retriable, falling through will return the error received
|
// If not retriable, falling through will return the error received.
|
||||||
// from closing the stream.
|
|
||||||
if shouldRetry(err) {
|
if shouldRetry(err) {
|
||||||
sent = 0
|
|
||||||
finishWrite = false
|
|
||||||
// TODO: Add test case for failure modes of querying progress.
|
// TODO: Add test case for failure modes of querying progress.
|
||||||
offset, err = w.determineOffset(start)
|
writeOffset, err = w.determineOffset(start)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
continue
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
|
sent = int(writeOffset) - int(start)
|
||||||
|
|
||||||
|
// Continue sending requests, opening a new stream and resending
|
||||||
|
// any bytes not yet persisted as per QueryWriteStatus
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, false, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the immediate stream's sent total and the upload offset with
|
// Update the immediate stream's sent total and the upload offset with
|
||||||
// the data sent.
|
// the data sent.
|
||||||
sent += len(data)
|
sent += len(data)
|
||||||
offset += int64(len(data))
|
writeOffset += int64(len(data))
|
||||||
|
|
||||||
// Not done sending data, do not attempt to commit it yet, loop around
|
// Not done sending data, do not attempt to commit it yet, loop around
|
||||||
// and send more data.
|
// and send more data.
|
||||||
|
|
@ -1692,31 +1717,81 @@ func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*st
|
||||||
}
|
}
|
||||||
|
|
||||||
// The buffer has been uploaded and there is still more data to be
|
// The buffer has been uploaded and there is still more data to be
|
||||||
// uploaded, but this is not a resumable upload session. Therefore
|
// uploaded, but this is not a resumable upload session. Therefore,
|
||||||
// keep the stream open and don't commit yet.
|
// don't check persisted data.
|
||||||
if !finishWrite && w.chunkSize == 0 {
|
if !lastWriteOfEntireObject && w.chunkSize == 0 {
|
||||||
return nil, offset, false, nil
|
return nil, writeOffset, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Done sending data. Close the stream to "commit" the data sent.
|
// Done sending data (remainingDataFitsInSingleReq should == true if we
|
||||||
resp, finalized, err := w.commit()
|
// reach this code). Receive from the stream to confirm the persisted data.
|
||||||
|
resp, err := w.stream.Recv()
|
||||||
|
|
||||||
// Retriable errors mean we should start over and attempt to
|
// Retriable errors mean we should start over and attempt to
|
||||||
// resend the entire buffer via a new stream.
|
// resend the entire buffer via a new stream.
|
||||||
// If not retriable, falling through will return the error received
|
// If not retriable, falling through will return the error received
|
||||||
// from closing the stream.
|
// from closing the stream.
|
||||||
if shouldRetry(err) {
|
if shouldRetry(err) {
|
||||||
sent = 0
|
writeOffset, err = w.determineOffset(start)
|
||||||
finishWrite = false
|
if err != nil {
|
||||||
offset, err = w.determineOffset(start)
|
return nil, 0, err
|
||||||
if err == nil {
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
sent = int(writeOffset) - int(start)
|
||||||
|
|
||||||
|
// Drop the stream reference as a new one will need to be created.
|
||||||
|
w.stream = nil
|
||||||
|
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, false, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp.GetResource(), offset, finalized, nil
|
// Confirm the persisted data if we have not finished uploading the object.
|
||||||
|
if !lastWriteOfEntireObject {
|
||||||
|
if resp.GetPersistedSize() != writeOffset {
|
||||||
|
// Retry if not all bytes were persisted.
|
||||||
|
writeOffset = resp.GetPersistedSize()
|
||||||
|
sent = int(writeOffset) - int(start)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If the object is done uploading, close the send stream to signal
|
||||||
|
// to the server that we are done sending so that we can receive
|
||||||
|
// from the stream without blocking.
|
||||||
|
err = w.stream.CloseSend()
|
||||||
|
if err != nil {
|
||||||
|
// CloseSend() retries the send internally. It never returns an
|
||||||
|
// error in the current implementation, but we check it anyway in
|
||||||
|
// case that it does in the future.
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stream receives do not block once send is closed, but we may not
|
||||||
|
// receive the response with the object right away; loop until we
|
||||||
|
// receive the object or error out.
|
||||||
|
var obj *storagepb.Object
|
||||||
|
for obj == nil {
|
||||||
|
resp, err := w.stream.Recv()
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
obj = resp.GetResource()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Even though we received the object response, continue reading
|
||||||
|
// until we receive a non-nil error, to ensure the stream does not
|
||||||
|
// leak even if the context isn't cancelled. See:
|
||||||
|
// https://pkg.go.dev/google.golang.org/grpc#ClientConn.NewStream
|
||||||
|
for err == nil {
|
||||||
|
_, err = w.stream.Recv()
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj, writeOffset, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, writeOffset, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1736,26 +1811,6 @@ func (w *gRPCWriter) determineOffset(offset int64) (int64, error) {
|
||||||
return offset, nil
|
return offset, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// commit closes the stream to commit the data sent and potentially receive
|
|
||||||
// the finalized object if finished uploading. If the last request sent
|
|
||||||
// indicated that writing was finished, the Object will be finalized and
|
|
||||||
// returned. If not, then the Object will be nil, and the boolean returned will
|
|
||||||
// be false.
|
|
||||||
func (w *gRPCWriter) commit() (*storagepb.WriteObjectResponse, bool, error) {
|
|
||||||
finalized := true
|
|
||||||
resp, err := w.stream.CloseAndRecv()
|
|
||||||
if err == io.EOF {
|
|
||||||
// Closing a stream for a resumable upload finish_write = false results
|
|
||||||
// in an EOF which can be ignored, as we aren't done uploading yet.
|
|
||||||
finalized = false
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
// Drop the stream reference as it has been closed.
|
|
||||||
w.stream = nil
|
|
||||||
|
|
||||||
return resp, finalized, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// writeObjectSpec constructs a WriteObjectSpec proto using the Writer's
|
// writeObjectSpec constructs a WriteObjectSpec proto using the Writer's
|
||||||
// ObjectAttrs and applies its Conditions. This is only used for gRPC.
|
// ObjectAttrs and applies its Conditions. This is only used for gRPC.
|
||||||
func (w *gRPCWriter) writeObjectSpec() (*storagepb.WriteObjectSpec, error) {
|
func (w *gRPCWriter) writeObjectSpec() (*storagepb.WriteObjectSpec, error) {
|
||||||
|
|
|
||||||
|
|
@ -289,12 +289,11 @@ func (it *HMACKeysIterator) fetch(pageSize int, pageToken string) (token string,
|
||||||
call = call.MaxResults(int64(pageSize))
|
call = call.MaxResults(int64(pageSize))
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := it.ctx
|
|
||||||
var resp *raw.HmacKeysMetadata
|
var resp *raw.HmacKeysMetadata
|
||||||
err = run(it.ctx, func() error {
|
err = run(it.ctx, func(ctx context.Context) error {
|
||||||
resp, err = call.Context(ctx).Do()
|
resp, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, it.retry, true, setRetryHeaderHTTP(call))
|
}, it.retry, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -148,11 +148,11 @@ func (c *httpStorageClient) GetServiceAccount(ctx context.Context, project strin
|
||||||
s := callSettings(c.settings, opts...)
|
s := callSettings(c.settings, opts...)
|
||||||
call := c.raw.Projects.ServiceAccount.Get(project)
|
call := c.raw.Projects.ServiceAccount.Get(project)
|
||||||
var res *raw.ServiceAccount
|
var res *raw.ServiceAccount
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
res, err = call.Context(ctx).Do()
|
res, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
@ -182,14 +182,14 @@ func (c *httpStorageClient) CreateBucket(ctx context.Context, project, bucket st
|
||||||
req.PredefinedDefaultObjectAcl(attrs.PredefinedDefaultObjectACL)
|
req.PredefinedDefaultObjectAcl(attrs.PredefinedDefaultObjectACL)
|
||||||
}
|
}
|
||||||
var battrs *BucketAttrs
|
var battrs *BucketAttrs
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
b, err := req.Context(ctx).Do()
|
b, err := req.Context(ctx).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
battrs, err = newBucket(b)
|
battrs, err = newBucket(b)
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
return battrs, err
|
return battrs, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -210,10 +210,10 @@ func (c *httpStorageClient) ListBuckets(ctx context.Context, project string, opt
|
||||||
req.MaxResults(int64(pageSize))
|
req.MaxResults(int64(pageSize))
|
||||||
}
|
}
|
||||||
var resp *raw.Buckets
|
var resp *raw.Buckets
|
||||||
err = run(it.ctx, func() error {
|
err = run(it.ctx, func(ctx context.Context) error {
|
||||||
resp, err = req.Context(it.ctx).Do()
|
resp, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
@ -248,7 +248,7 @@ func (c *httpStorageClient) DeleteBucket(ctx context.Context, bucket string, con
|
||||||
req.UserProject(s.userProject)
|
req.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
|
|
||||||
return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
return run(ctx, func(ctx context.Context) error { return req.Context(ctx).Do() }, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *httpStorageClient) GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) {
|
func (c *httpStorageClient) GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
|
|
@ -264,10 +264,10 @@ func (c *httpStorageClient) GetBucket(ctx context.Context, bucket string, conds
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *raw.Bucket
|
var resp *raw.Bucket
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
resp, err = req.Context(ctx).Do()
|
resp, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
var e *googleapi.Error
|
var e *googleapi.Error
|
||||||
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
||||||
|
|
@ -298,10 +298,10 @@ func (c *httpStorageClient) UpdateBucket(ctx context.Context, bucket string, uat
|
||||||
}
|
}
|
||||||
|
|
||||||
var rawBucket *raw.Bucket
|
var rawBucket *raw.Bucket
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
rawBucket, err = req.Context(ctx).Do()
|
rawBucket, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -317,10 +317,10 @@ func (c *httpStorageClient) LockBucketRetentionPolicy(ctx context.Context, bucke
|
||||||
}
|
}
|
||||||
req := c.raw.Buckets.LockRetentionPolicy(bucket, metageneration)
|
req := c.raw.Buckets.LockRetentionPolicy(bucket, metageneration)
|
||||||
|
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
_, err := req.Context(ctx).Do()
|
_, err := req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) *ObjectIterator {
|
func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) *ObjectIterator {
|
||||||
s := callSettings(c.settings, opts...)
|
s := callSettings(c.settings, opts...)
|
||||||
|
|
@ -357,10 +357,10 @@ func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Q
|
||||||
}
|
}
|
||||||
var resp *raw.Objects
|
var resp *raw.Objects
|
||||||
var err error
|
var err error
|
||||||
err = run(it.ctx, func() error {
|
err = run(it.ctx, func(ctx context.Context) error {
|
||||||
resp, err = req.Context(it.ctx).Do()
|
resp, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var e *googleapi.Error
|
var e *googleapi.Error
|
||||||
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
||||||
|
|
@ -395,7 +395,7 @@ func (c *httpStorageClient) DeleteObject(ctx context.Context, bucket, object str
|
||||||
if s.userProject != "" {
|
if s.userProject != "" {
|
||||||
req.UserProject(s.userProject)
|
req.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
err := run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
err := run(ctx, func(ctx context.Context) error { return req.Context(ctx).Do() }, s.retry, s.idempotent)
|
||||||
var e *googleapi.Error
|
var e *googleapi.Error
|
||||||
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
||||||
return ErrObjectNotExist
|
return ErrObjectNotExist
|
||||||
|
|
@ -417,10 +417,10 @@ func (c *httpStorageClient) GetObject(ctx context.Context, bucket, object string
|
||||||
}
|
}
|
||||||
var obj *raw.Object
|
var obj *raw.Object
|
||||||
var err error
|
var err error
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
obj, err = req.Context(ctx).Do()
|
obj, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
var e *googleapi.Error
|
var e *googleapi.Error
|
||||||
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
||||||
return nil, ErrObjectNotExist
|
return nil, ErrObjectNotExist
|
||||||
|
|
@ -499,7 +499,7 @@ func (c *httpStorageClient) UpdateObject(ctx context.Context, bucket, object str
|
||||||
rawObj := attrs.toRawObject(bucket)
|
rawObj := attrs.toRawObject(bucket)
|
||||||
rawObj.ForceSendFields = forceSendFields
|
rawObj.ForceSendFields = forceSendFields
|
||||||
rawObj.NullFields = nullFields
|
rawObj.NullFields = nullFields
|
||||||
call := c.raw.Objects.Patch(bucket, object, rawObj).Projection("full").Context(ctx)
|
call := c.raw.Objects.Patch(bucket, object, rawObj).Projection("full")
|
||||||
if err := applyConds("Update", gen, conds, call); err != nil {
|
if err := applyConds("Update", gen, conds, call); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -514,7 +514,7 @@ func (c *httpStorageClient) UpdateObject(ctx context.Context, bucket, object str
|
||||||
}
|
}
|
||||||
var obj *raw.Object
|
var obj *raw.Object
|
||||||
var err error
|
var err error
|
||||||
err = run(ctx, func() error { obj, err = call.Do(); return err }, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
err = run(ctx, func(ctx context.Context) error { obj, err = call.Context(ctx).Do(); return err }, s.retry, s.idempotent)
|
||||||
var e *googleapi.Error
|
var e *googleapi.Error
|
||||||
if errors.As(err, &e) && e.Code == http.StatusNotFound {
|
if errors.As(err, &e) && e.Code == http.StatusNotFound {
|
||||||
return nil, ErrObjectNotExist
|
return nil, ErrObjectNotExist
|
||||||
|
|
@ -531,7 +531,7 @@ func (c *httpStorageClient) DeleteDefaultObjectACL(ctx context.Context, bucket s
|
||||||
s := callSettings(c.settings, opts...)
|
s := callSettings(c.settings, opts...)
|
||||||
req := c.raw.DefaultObjectAccessControls.Delete(bucket, string(entity))
|
req := c.raw.DefaultObjectAccessControls.Delete(bucket, string(entity))
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
return run(ctx, func(ctx context.Context) error { return req.Context(ctx).Do() }, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *httpStorageClient) ListDefaultObjectACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) {
|
func (c *httpStorageClient) ListDefaultObjectACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) {
|
||||||
|
|
@ -540,10 +540,10 @@ func (c *httpStorageClient) ListDefaultObjectACLs(ctx context.Context, bucket st
|
||||||
var err error
|
var err error
|
||||||
req := c.raw.DefaultObjectAccessControls.List(bucket)
|
req := c.raw.DefaultObjectAccessControls.List(bucket)
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
acls, err = req.Do()
|
acls, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, true, setRetryHeaderHTTP(req))
|
}, s.retry, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -560,14 +560,13 @@ func (c *httpStorageClient) UpdateDefaultObjectACL(ctx context.Context, bucket s
|
||||||
Entity: string(entity),
|
Entity: string(entity),
|
||||||
Role: string(role),
|
Role: string(role),
|
||||||
}
|
}
|
||||||
var req setRequest
|
|
||||||
var err error
|
var err error
|
||||||
req = c.raw.DefaultObjectAccessControls.Update(bucket, string(entity), acl)
|
req := c.raw.DefaultObjectAccessControls.Update(bucket, string(entity), acl)
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
_, err = req.Do()
|
_, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bucket ACL methods.
|
// Bucket ACL methods.
|
||||||
|
|
@ -576,7 +575,7 @@ func (c *httpStorageClient) DeleteBucketACL(ctx context.Context, bucket string,
|
||||||
s := callSettings(c.settings, opts...)
|
s := callSettings(c.settings, opts...)
|
||||||
req := c.raw.BucketAccessControls.Delete(bucket, string(entity))
|
req := c.raw.BucketAccessControls.Delete(bucket, string(entity))
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
return run(ctx, func(ctx context.Context) error { return req.Context(ctx).Do() }, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *httpStorageClient) ListBucketACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) {
|
func (c *httpStorageClient) ListBucketACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) {
|
||||||
|
|
@ -585,10 +584,10 @@ func (c *httpStorageClient) ListBucketACLs(ctx context.Context, bucket string, o
|
||||||
var err error
|
var err error
|
||||||
req := c.raw.BucketAccessControls.List(bucket)
|
req := c.raw.BucketAccessControls.List(bucket)
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
acls, err = req.Do()
|
acls, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, true, setRetryHeaderHTTP(req))
|
}, s.retry, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -605,10 +604,10 @@ func (c *httpStorageClient) UpdateBucketACL(ctx context.Context, bucket string,
|
||||||
req := c.raw.BucketAccessControls.Update(bucket, string(entity), acl)
|
req := c.raw.BucketAccessControls.Update(bucket, string(entity), acl)
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
var err error
|
var err error
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
_, err = req.Do()
|
_, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// configureACLCall sets the context, user project and headers on the apiary library call.
|
// configureACLCall sets the context, user project and headers on the apiary library call.
|
||||||
|
|
@ -628,7 +627,7 @@ func (c *httpStorageClient) DeleteObjectACL(ctx context.Context, bucket, object
|
||||||
s := callSettings(c.settings, opts...)
|
s := callSettings(c.settings, opts...)
|
||||||
req := c.raw.ObjectAccessControls.Delete(bucket, object, string(entity))
|
req := c.raw.ObjectAccessControls.Delete(bucket, object, string(entity))
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
return run(ctx, func(ctx context.Context) error { return req.Context(ctx).Do() }, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListObjectACLs retrieves object ACL entries. By default, it operates on the latest generation of this object.
|
// ListObjectACLs retrieves object ACL entries. By default, it operates on the latest generation of this object.
|
||||||
|
|
@ -639,10 +638,10 @@ func (c *httpStorageClient) ListObjectACLs(ctx context.Context, bucket, object s
|
||||||
var err error
|
var err error
|
||||||
req := c.raw.ObjectAccessControls.List(bucket, object)
|
req := c.raw.ObjectAccessControls.List(bucket, object)
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
acls, err = req.Do()
|
acls, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -661,14 +660,13 @@ func (c *httpStorageClient) UpdateObjectACL(ctx context.Context, bucket, object
|
||||||
Entity: string(entity),
|
Entity: string(entity),
|
||||||
Role: string(role),
|
Role: string(role),
|
||||||
}
|
}
|
||||||
var req setRequest
|
|
||||||
var err error
|
var err error
|
||||||
req = c.raw.ObjectAccessControls.Update(bucket, object, string(entity), acl)
|
req := c.raw.ObjectAccessControls.Update(bucket, object, string(entity), acl)
|
||||||
configureACLCall(ctx, s.userProject, req)
|
configureACLCall(ctx, s.userProject, req)
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
_, err = req.Do()
|
_, err = req.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(req))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Media operations.
|
// Media operations.
|
||||||
|
|
@ -692,7 +690,7 @@ func (c *httpStorageClient) ComposeObject(ctx context.Context, req *composeObjec
|
||||||
rawReq.SourceObjects = append(rawReq.SourceObjects, srcObj)
|
rawReq.SourceObjects = append(rawReq.SourceObjects, srcObj)
|
||||||
}
|
}
|
||||||
|
|
||||||
call := c.raw.Objects.Compose(req.dstBucket, req.dstObject.name, rawReq).Context(ctx)
|
call := c.raw.Objects.Compose(req.dstBucket, req.dstObject.name, rawReq)
|
||||||
if err := applyConds("ComposeFrom destination", defaultGen, req.dstObject.conds, call); err != nil {
|
if err := applyConds("ComposeFrom destination", defaultGen, req.dstObject.conds, call); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -709,9 +707,9 @@ func (c *httpStorageClient) ComposeObject(ctx context.Context, req *composeObjec
|
||||||
setClientHeader(call.Header())
|
setClientHeader(call.Header())
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
retryCall := func() error { obj, err = call.Do(); return err }
|
retryCall := func(ctx context.Context) error { obj, err = call.Context(ctx).Do(); return err }
|
||||||
|
|
||||||
if err := run(ctx, retryCall, s.retry, s.idempotent, setRetryHeaderHTTP(call)); err != nil {
|
if err := run(ctx, retryCall, s.retry, s.idempotent); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return newObject(obj), nil
|
return newObject(obj), nil
|
||||||
|
|
@ -721,7 +719,7 @@ func (c *httpStorageClient) RewriteObject(ctx context.Context, req *rewriteObjec
|
||||||
rawObject := req.dstObject.attrs.toRawObject("")
|
rawObject := req.dstObject.attrs.toRawObject("")
|
||||||
call := c.raw.Objects.Rewrite(req.srcObject.bucket, req.srcObject.name, req.dstObject.bucket, req.dstObject.name, rawObject)
|
call := c.raw.Objects.Rewrite(req.srcObject.bucket, req.srcObject.name, req.dstObject.bucket, req.dstObject.name, rawObject)
|
||||||
|
|
||||||
call.Context(ctx).Projection("full")
|
call.Projection("full")
|
||||||
if req.token != "" {
|
if req.token != "" {
|
||||||
call.RewriteToken(req.token)
|
call.RewriteToken(req.token)
|
||||||
}
|
}
|
||||||
|
|
@ -757,9 +755,9 @@ func (c *httpStorageClient) RewriteObject(ctx context.Context, req *rewriteObjec
|
||||||
var err error
|
var err error
|
||||||
setClientHeader(call.Header())
|
setClientHeader(call.Header())
|
||||||
|
|
||||||
retryCall := func() error { res, err = call.Do(); return err }
|
retryCall := func(ctx context.Context) error { res, err = call.Context(ctx).Do(); return err }
|
||||||
|
|
||||||
if err := run(ctx, retryCall, s.retry, s.idempotent, setRetryHeaderHTTP(call)); err != nil {
|
if err := run(ctx, retryCall, s.retry, s.idempotent); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -801,7 +799,6 @@ func (c *httpStorageClient) newRangeReaderXML(ctx context.Context, params *newRa
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
req = req.WithContext(ctx)
|
|
||||||
|
|
||||||
if s.userProject != "" {
|
if s.userProject != "" {
|
||||||
req.Header.Set("X-Goog-User-Project", s.userProject)
|
req.Header.Set("X-Goog-User-Project", s.userProject)
|
||||||
|
|
@ -821,7 +818,7 @@ func (c *httpStorageClient) newRangeReaderXML(ctx context.Context, params *newRa
|
||||||
}
|
}
|
||||||
|
|
||||||
reopen := readerReopen(ctx, req.Header, params, s,
|
reopen := readerReopen(ctx, req.Header, params, s,
|
||||||
func() (*http.Response, error) { return c.hc.Do(req) },
|
func(ctx context.Context) (*http.Response, error) { return c.hc.Do(req.WithContext(ctx)) },
|
||||||
func() error { return setConditionsHeaders(req.Header, params.conds) },
|
func() error { return setConditionsHeaders(req.Header, params.conds) },
|
||||||
func() { req.URL.RawQuery = fmt.Sprintf("generation=%d", params.gen) })
|
func() { req.URL.RawQuery = fmt.Sprintf("generation=%d", params.gen) })
|
||||||
|
|
||||||
|
|
@ -836,7 +833,6 @@ func (c *httpStorageClient) newRangeReaderJSON(ctx context.Context, params *newR
|
||||||
call := c.raw.Objects.Get(params.bucket, params.object)
|
call := c.raw.Objects.Get(params.bucket, params.object)
|
||||||
|
|
||||||
setClientHeader(call.Header())
|
setClientHeader(call.Header())
|
||||||
call.Context(ctx)
|
|
||||||
call.Projection("full")
|
call.Projection("full")
|
||||||
|
|
||||||
if s.userProject != "" {
|
if s.userProject != "" {
|
||||||
|
|
@ -847,7 +843,7 @@ func (c *httpStorageClient) newRangeReaderJSON(ctx context.Context, params *newR
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
reopen := readerReopen(ctx, call.Header(), params, s, func() (*http.Response, error) { return call.Download() },
|
reopen := readerReopen(ctx, call.Header(), params, s, func(ctx context.Context) (*http.Response, error) { return call.Context(ctx).Download() },
|
||||||
func() error { return applyConds("NewReader", params.gen, params.conds, call) },
|
func() error { return applyConds("NewReader", params.gen, params.conds, call) },
|
||||||
func() { call.Generation(params.gen) })
|
func() { call.Generation(params.gen) })
|
||||||
|
|
||||||
|
|
@ -957,11 +953,11 @@ func (c *httpStorageClient) GetIamPolicy(ctx context.Context, resource string, v
|
||||||
call.UserProject(s.userProject)
|
call.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
var rp *raw.Policy
|
var rp *raw.Policy
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
rp, err = call.Context(ctx).Do()
|
rp, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -978,10 +974,10 @@ func (c *httpStorageClient) SetIamPolicy(ctx context.Context, resource string, p
|
||||||
call.UserProject(s.userProject)
|
call.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
|
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
_, err := call.Context(ctx).Do()
|
_, err := call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *httpStorageClient) TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error) {
|
func (c *httpStorageClient) TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error) {
|
||||||
|
|
@ -992,11 +988,11 @@ func (c *httpStorageClient) TestIamPermissions(ctx context.Context, resource str
|
||||||
call.UserProject(s.userProject)
|
call.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
var res *raw.TestIamPermissionsResponse
|
var res *raw.TestIamPermissionsResponse
|
||||||
err := run(ctx, func() error {
|
err := run(ctx, func(ctx context.Context) error {
|
||||||
var err error
|
var err error
|
||||||
res, err = call.Context(ctx).Do()
|
res, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1014,10 +1010,10 @@ func (c *httpStorageClient) GetHMACKey(ctx context.Context, project, accessID st
|
||||||
|
|
||||||
var metadata *raw.HmacKeyMetadata
|
var metadata *raw.HmacKeyMetadata
|
||||||
var err error
|
var err error
|
||||||
if err := run(ctx, func() error {
|
if err := run(ctx, func(ctx context.Context) error {
|
||||||
metadata, err = call.Context(ctx).Do()
|
metadata, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call)); err != nil {
|
}, s.retry, s.idempotent); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
hk := &raw.HmacKey{
|
hk := &raw.HmacKey{
|
||||||
|
|
@ -1054,10 +1050,10 @@ func (c *httpStorageClient) ListHMACKeys(ctx context.Context, project, serviceAc
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *raw.HmacKeysMetadata
|
var resp *raw.HmacKeysMetadata
|
||||||
err = run(it.ctx, func() error {
|
err = run(it.ctx, func(ctx context.Context) error {
|
||||||
resp, err = call.Context(it.ctx).Do()
|
resp, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
@ -1099,10 +1095,10 @@ func (c *httpStorageClient) UpdateHMACKey(ctx context.Context, project, serviceA
|
||||||
|
|
||||||
var metadata *raw.HmacKeyMetadata
|
var metadata *raw.HmacKeyMetadata
|
||||||
var err error
|
var err error
|
||||||
if err := run(ctx, func() error {
|
if err := run(ctx, func(ctx context.Context) error {
|
||||||
metadata, err = call.Context(ctx).Do()
|
metadata, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call)); err != nil {
|
}, s.retry, s.idempotent); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
hk := &raw.HmacKey{
|
hk := &raw.HmacKey{
|
||||||
|
|
@ -1119,11 +1115,11 @@ func (c *httpStorageClient) CreateHMACKey(ctx context.Context, project, serviceA
|
||||||
}
|
}
|
||||||
|
|
||||||
var hk *raw.HmacKey
|
var hk *raw.HmacKey
|
||||||
if err := run(ctx, func() error {
|
if err := run(ctx, func(ctx context.Context) error {
|
||||||
h, err := call.Context(ctx).Do()
|
h, err := call.Context(ctx).Do()
|
||||||
hk = h
|
hk = h
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call)); err != nil {
|
}, s.retry, s.idempotent); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return toHMACKeyFromRaw(hk, true)
|
return toHMACKeyFromRaw(hk, true)
|
||||||
|
|
@ -1135,9 +1131,9 @@ func (c *httpStorageClient) DeleteHMACKey(ctx context.Context, project string, a
|
||||||
if s.userProject != "" {
|
if s.userProject != "" {
|
||||||
call = call.UserProject(s.userProject)
|
call = call.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
return call.Context(ctx).Do()
|
return call.Context(ctx).Do()
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notification methods.
|
// Notification methods.
|
||||||
|
|
@ -1156,10 +1152,10 @@ func (c *httpStorageClient) ListNotifications(ctx context.Context, bucket string
|
||||||
call.UserProject(s.userProject)
|
call.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
var res *raw.Notifications
|
var res *raw.Notifications
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
res, err = call.Context(ctx).Do()
|
res, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, true, setRetryHeaderHTTP(call))
|
}, s.retry, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1176,10 +1172,10 @@ func (c *httpStorageClient) CreateNotification(ctx context.Context, bucket strin
|
||||||
call.UserProject(s.userProject)
|
call.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
var rn *raw.Notification
|
var rn *raw.Notification
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
rn, err = call.Context(ctx).Do()
|
rn, err = call.Context(ctx).Do()
|
||||||
return err
|
return err
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1195,9 +1191,9 @@ func (c *httpStorageClient) DeleteNotification(ctx context.Context, bucket strin
|
||||||
if s.userProject != "" {
|
if s.userProject != "" {
|
||||||
call.UserProject(s.userProject)
|
call.UserProject(s.userProject)
|
||||||
}
|
}
|
||||||
return run(ctx, func() error {
|
return run(ctx, func(ctx context.Context) error {
|
||||||
return call.Context(ctx).Do()
|
return call.Context(ctx).Do()
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(call))
|
}, s.retry, s.idempotent)
|
||||||
}
|
}
|
||||||
|
|
||||||
type httpReader struct {
|
type httpReader struct {
|
||||||
|
|
@ -1246,7 +1242,7 @@ func setRangeReaderHeaders(h http.Header, params *newRangeReaderParams) error {
|
||||||
// readerReopen initiates a Read with offset and length, assuming we
|
// readerReopen initiates a Read with offset and length, assuming we
|
||||||
// have already read seen bytes.
|
// have already read seen bytes.
|
||||||
func readerReopen(ctx context.Context, header http.Header, params *newRangeReaderParams, s *settings,
|
func readerReopen(ctx context.Context, header http.Header, params *newRangeReaderParams, s *settings,
|
||||||
doDownload func() (*http.Response, error), applyConditions func() error, setGeneration func()) func(int64) (*http.Response, error) {
|
doDownload func(context.Context) (*http.Response, error), applyConditions func() error, setGeneration func()) func(int64) (*http.Response, error) {
|
||||||
return func(seen int64) (*http.Response, error) {
|
return func(seen int64) (*http.Response, error) {
|
||||||
// If the context has already expired, return immediately without making a
|
// If the context has already expired, return immediately without making a
|
||||||
// call.
|
// call.
|
||||||
|
|
@ -1273,8 +1269,8 @@ func readerReopen(ctx context.Context, header http.Header, params *newRangeReade
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
var res *http.Response
|
var res *http.Response
|
||||||
err = run(ctx, func() error {
|
err = run(ctx, func(ctx context.Context) error {
|
||||||
res, err = doDownload()
|
res, err = doDownload(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var e *googleapi.Error
|
var e *googleapi.Error
|
||||||
if errors.As(err, &e) {
|
if errors.As(err, &e) {
|
||||||
|
|
@ -1328,7 +1324,7 @@ func readerReopen(ctx context.Context, header http.Header, params *newRangeReade
|
||||||
params.gen = gen64
|
params.gen = gen64
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}, s.retry, s.idempotent, setRetryHeaderHTTP(nil))
|
}, s.retry, s.idempotent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,210 @@
|
||||||
|
// Copyright 2023 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Code generated by protoc-gen-go_gapic. DO NOT EDIT.
|
||||||
|
|
||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
storagepb "cloud.google.com/go/storage/internal/apiv2/storagepb"
|
||||||
|
"google.golang.org/api/iterator"
|
||||||
|
)
|
||||||
|
|
||||||
|
// BucketIterator manages a stream of *storagepb.Bucket.
|
||||||
|
type BucketIterator struct {
|
||||||
|
items []*storagepb.Bucket
|
||||||
|
pageInfo *iterator.PageInfo
|
||||||
|
nextFunc func() error
|
||||||
|
|
||||||
|
// Response is the raw response for the current page.
|
||||||
|
// It must be cast to the RPC response type.
|
||||||
|
// Calling Next() or InternalFetch() updates this value.
|
||||||
|
Response interface{}
|
||||||
|
|
||||||
|
// InternalFetch is for use by the Google Cloud Libraries only.
|
||||||
|
// It is not part of the stable interface of this package.
|
||||||
|
//
|
||||||
|
// InternalFetch returns results from a single call to the underlying RPC.
|
||||||
|
// The number of results is no greater than pageSize.
|
||||||
|
// If there are no more results, nextPageToken is empty and err is nil.
|
||||||
|
InternalFetch func(pageSize int, pageToken string) (results []*storagepb.Bucket, nextPageToken string, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
|
||||||
|
func (it *BucketIterator) PageInfo() *iterator.PageInfo {
|
||||||
|
return it.pageInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next returns the next result. Its second return value is iterator.Done if there are no more
|
||||||
|
// results. Once Next returns Done, all subsequent calls will return Done.
|
||||||
|
func (it *BucketIterator) Next() (*storagepb.Bucket, error) {
|
||||||
|
var item *storagepb.Bucket
|
||||||
|
if err := it.nextFunc(); err != nil {
|
||||||
|
return item, err
|
||||||
|
}
|
||||||
|
item = it.items[0]
|
||||||
|
it.items = it.items[1:]
|
||||||
|
return item, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (it *BucketIterator) bufLen() int {
|
||||||
|
return len(it.items)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (it *BucketIterator) takeBuf() interface{} {
|
||||||
|
b := it.items
|
||||||
|
it.items = nil
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// HmacKeyMetadataIterator manages a stream of *storagepb.HmacKeyMetadata.
|
||||||
|
type HmacKeyMetadataIterator struct {
|
||||||
|
items []*storagepb.HmacKeyMetadata
|
||||||
|
pageInfo *iterator.PageInfo
|
||||||
|
nextFunc func() error
|
||||||
|
|
||||||
|
// Response is the raw response for the current page.
|
||||||
|
// It must be cast to the RPC response type.
|
||||||
|
// Calling Next() or InternalFetch() updates this value.
|
||||||
|
Response interface{}
|
||||||
|
|
||||||
|
// InternalFetch is for use by the Google Cloud Libraries only.
|
||||||
|
// It is not part of the stable interface of this package.
|
||||||
|
//
|
||||||
|
// InternalFetch returns results from a single call to the underlying RPC.
|
||||||
|
// The number of results is no greater than pageSize.
|
||||||
|
// If there are no more results, nextPageToken is empty and err is nil.
|
||||||
|
InternalFetch func(pageSize int, pageToken string) (results []*storagepb.HmacKeyMetadata, nextPageToken string, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
|
||||||
|
func (it *HmacKeyMetadataIterator) PageInfo() *iterator.PageInfo {
|
||||||
|
return it.pageInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next returns the next result. Its second return value is iterator.Done if there are no more
|
||||||
|
// results. Once Next returns Done, all subsequent calls will return Done.
|
||||||
|
func (it *HmacKeyMetadataIterator) Next() (*storagepb.HmacKeyMetadata, error) {
|
||||||
|
var item *storagepb.HmacKeyMetadata
|
||||||
|
if err := it.nextFunc(); err != nil {
|
||||||
|
return item, err
|
||||||
|
}
|
||||||
|
item = it.items[0]
|
||||||
|
it.items = it.items[1:]
|
||||||
|
return item, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (it *HmacKeyMetadataIterator) bufLen() int {
|
||||||
|
return len(it.items)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (it *HmacKeyMetadataIterator) takeBuf() interface{} {
|
||||||
|
b := it.items
|
||||||
|
it.items = nil
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotificationConfigIterator manages a stream of *storagepb.NotificationConfig.
|
||||||
|
type NotificationConfigIterator struct {
|
||||||
|
items []*storagepb.NotificationConfig
|
||||||
|
pageInfo *iterator.PageInfo
|
||||||
|
nextFunc func() error
|
||||||
|
|
||||||
|
// Response is the raw response for the current page.
|
||||||
|
// It must be cast to the RPC response type.
|
||||||
|
// Calling Next() or InternalFetch() updates this value.
|
||||||
|
Response interface{}
|
||||||
|
|
||||||
|
// InternalFetch is for use by the Google Cloud Libraries only.
|
||||||
|
// It is not part of the stable interface of this package.
|
||||||
|
//
|
||||||
|
// InternalFetch returns results from a single call to the underlying RPC.
|
||||||
|
// The number of results is no greater than pageSize.
|
||||||
|
// If there are no more results, nextPageToken is empty and err is nil.
|
||||||
|
InternalFetch func(pageSize int, pageToken string) (results []*storagepb.NotificationConfig, nextPageToken string, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
|
||||||
|
func (it *NotificationConfigIterator) PageInfo() *iterator.PageInfo {
|
||||||
|
return it.pageInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next returns the next result. Its second return value is iterator.Done if there are no more
|
||||||
|
// results. Once Next returns Done, all subsequent calls will return Done.
|
||||||
|
func (it *NotificationConfigIterator) Next() (*storagepb.NotificationConfig, error) {
|
||||||
|
var item *storagepb.NotificationConfig
|
||||||
|
if err := it.nextFunc(); err != nil {
|
||||||
|
return item, err
|
||||||
|
}
|
||||||
|
item = it.items[0]
|
||||||
|
it.items = it.items[1:]
|
||||||
|
return item, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (it *NotificationConfigIterator) bufLen() int {
|
||||||
|
return len(it.items)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (it *NotificationConfigIterator) takeBuf() interface{} {
|
||||||
|
b := it.items
|
||||||
|
it.items = nil
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// ObjectIterator manages a stream of *storagepb.Object.
|
||||||
|
type ObjectIterator struct {
|
||||||
|
items []*storagepb.Object
|
||||||
|
pageInfo *iterator.PageInfo
|
||||||
|
nextFunc func() error
|
||||||
|
|
||||||
|
// Response is the raw response for the current page.
|
||||||
|
// It must be cast to the RPC response type.
|
||||||
|
// Calling Next() or InternalFetch() updates this value.
|
||||||
|
Response interface{}
|
||||||
|
|
||||||
|
// InternalFetch is for use by the Google Cloud Libraries only.
|
||||||
|
// It is not part of the stable interface of this package.
|
||||||
|
//
|
||||||
|
// InternalFetch returns results from a single call to the underlying RPC.
|
||||||
|
// The number of results is no greater than pageSize.
|
||||||
|
// If there are no more results, nextPageToken is empty and err is nil.
|
||||||
|
InternalFetch func(pageSize int, pageToken string) (results []*storagepb.Object, nextPageToken string, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
|
||||||
|
func (it *ObjectIterator) PageInfo() *iterator.PageInfo {
|
||||||
|
return it.pageInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next returns the next result. Its second return value is iterator.Done if there are no more
|
||||||
|
// results. Once Next returns Done, all subsequent calls will return Done.
|
||||||
|
func (it *ObjectIterator) Next() (*storagepb.Object, error) {
|
||||||
|
var item *storagepb.Object
|
||||||
|
if err := it.nextFunc(); err != nil {
|
||||||
|
return item, err
|
||||||
|
}
|
||||||
|
item = it.items[0]
|
||||||
|
it.items = it.items[1:]
|
||||||
|
return item, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (it *ObjectIterator) bufLen() int {
|
||||||
|
return len(it.items)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (it *ObjectIterator) takeBuf() interface{} {
|
||||||
|
b := it.items
|
||||||
|
it.items = nil
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
@ -17,7 +17,17 @@
|
||||||
// Package storage is an auto-generated package for the
|
// Package storage is an auto-generated package for the
|
||||||
// Cloud Storage API.
|
// Cloud Storage API.
|
||||||
//
|
//
|
||||||
// Lets you store and retrieve potentially-large, immutable data objects.
|
// Stop. This folder is likely not what you are looking for. This folder
|
||||||
|
// contains protocol buffer definitions for an unreleased API for accessing
|
||||||
|
// Cloud Storage. Unless told otherwise by a Google Cloud representative, do
|
||||||
|
// not use any of the contents of this folder. If you would like to use Cloud
|
||||||
|
// Storage, please consult our official documentation (at
|
||||||
|
// https://cloud.google.com/storage/docs/apis) for details on our XML and
|
||||||
|
// JSON APIs, or else consider one of our client libraries (at
|
||||||
|
// https://cloud.google.com/storage/docs/reference/libraries). This API
|
||||||
|
// defined in this folder is unreleased and may shut off, break, or fail at
|
||||||
|
// any time for any users who are not registered as a part of a private
|
||||||
|
// preview program.
|
||||||
//
|
//
|
||||||
// # General documentation
|
// # General documentation
|
||||||
//
|
//
|
||||||
|
|
@ -66,15 +76,32 @@
|
||||||
// // TODO: Handle error.
|
// // TODO: Handle error.
|
||||||
// }
|
// }
|
||||||
// defer c.Close()
|
// defer c.Close()
|
||||||
//
|
// stream, err := c.BidiWriteObject(ctx)
|
||||||
// req := &storagepb.DeleteBucketRequest{
|
|
||||||
// // TODO: Fill request struct fields.
|
|
||||||
// // See https://pkg.go.dev/cloud.google.com/go/storage/internal/apiv2/storagepb#DeleteBucketRequest.
|
|
||||||
// }
|
|
||||||
// err = c.DeleteBucket(ctx, req)
|
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// // TODO: Handle error.
|
// // TODO: Handle error.
|
||||||
// }
|
// }
|
||||||
|
// go func() {
|
||||||
|
// reqs := []*storagepb.BidiWriteObjectRequest{
|
||||||
|
// // TODO: Create requests.
|
||||||
|
// }
|
||||||
|
// for _, req := range reqs {
|
||||||
|
// if err := stream.Send(req); err != nil {
|
||||||
|
// // TODO: Handle error.
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// stream.CloseSend()
|
||||||
|
// }()
|
||||||
|
// for {
|
||||||
|
// resp, err := stream.Recv()
|
||||||
|
// if err == io.EOF {
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// if err != nil {
|
||||||
|
// // TODO: handle error.
|
||||||
|
// }
|
||||||
|
// // TODO: Use resp.
|
||||||
|
// _ = resp
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// # Use of Context
|
// # Use of Context
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,11 @@
|
||||||
"grpc": {
|
"grpc": {
|
||||||
"libraryClient": "Client",
|
"libraryClient": "Client",
|
||||||
"rpcs": {
|
"rpcs": {
|
||||||
|
"BidiWriteObject": {
|
||||||
|
"methods": [
|
||||||
|
"BidiWriteObject"
|
||||||
|
]
|
||||||
|
},
|
||||||
"CancelResumableWrite": {
|
"CancelResumableWrite": {
|
||||||
"methods": [
|
"methods": [
|
||||||
"CancelResumableWrite"
|
"CancelResumableWrite"
|
||||||
|
|
@ -120,6 +125,11 @@
|
||||||
"ReadObject"
|
"ReadObject"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"RestoreObject": {
|
||||||
|
"methods": [
|
||||||
|
"RestoreObject"
|
||||||
|
]
|
||||||
|
},
|
||||||
"RewriteObject": {
|
"RewriteObject": {
|
||||||
"methods": [
|
"methods": [
|
||||||
"RewriteObject"
|
"RewriteObject"
|
||||||
|
|
|
||||||
|
|
@ -56,11 +56,13 @@ type CallOptions struct {
|
||||||
ListNotificationConfigs []gax.CallOption
|
ListNotificationConfigs []gax.CallOption
|
||||||
ComposeObject []gax.CallOption
|
ComposeObject []gax.CallOption
|
||||||
DeleteObject []gax.CallOption
|
DeleteObject []gax.CallOption
|
||||||
|
RestoreObject []gax.CallOption
|
||||||
CancelResumableWrite []gax.CallOption
|
CancelResumableWrite []gax.CallOption
|
||||||
GetObject []gax.CallOption
|
GetObject []gax.CallOption
|
||||||
ReadObject []gax.CallOption
|
ReadObject []gax.CallOption
|
||||||
UpdateObject []gax.CallOption
|
UpdateObject []gax.CallOption
|
||||||
WriteObject []gax.CallOption
|
WriteObject []gax.CallOption
|
||||||
|
BidiWriteObject []gax.CallOption
|
||||||
ListObjects []gax.CallOption
|
ListObjects []gax.CallOption
|
||||||
RewriteObject []gax.CallOption
|
RewriteObject []gax.CallOption
|
||||||
StartResumableWrite []gax.CallOption
|
StartResumableWrite []gax.CallOption
|
||||||
|
|
@ -282,6 +284,19 @@ func defaultCallOptions() *CallOptions {
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
RestoreObject: []gax.CallOption{
|
||||||
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
CancelResumableWrite: []gax.CallOption{
|
CancelResumableWrite: []gax.CallOption{
|
||||||
gax.WithTimeout(60000 * time.Millisecond),
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
gax.WithRetry(func() gax.Retryer {
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
|
@ -345,6 +360,18 @@ func defaultCallOptions() *CallOptions {
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
BidiWriteObject: []gax.CallOption{
|
||||||
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
return gax.OnCodes([]codes.Code{
|
||||||
|
codes.DeadlineExceeded,
|
||||||
|
codes.Unavailable,
|
||||||
|
}, gax.Backoff{
|
||||||
|
Initial: 1000 * time.Millisecond,
|
||||||
|
Max: 60000 * time.Millisecond,
|
||||||
|
Multiplier: 2.00,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
},
|
||||||
ListObjects: []gax.CallOption{
|
ListObjects: []gax.CallOption{
|
||||||
gax.WithTimeout(60000 * time.Millisecond),
|
gax.WithTimeout(60000 * time.Millisecond),
|
||||||
gax.WithRetry(func() gax.Retryer {
|
gax.WithRetry(func() gax.Retryer {
|
||||||
|
|
@ -498,11 +525,13 @@ type internalClient interface {
|
||||||
ListNotificationConfigs(context.Context, *storagepb.ListNotificationConfigsRequest, ...gax.CallOption) *NotificationConfigIterator
|
ListNotificationConfigs(context.Context, *storagepb.ListNotificationConfigsRequest, ...gax.CallOption) *NotificationConfigIterator
|
||||||
ComposeObject(context.Context, *storagepb.ComposeObjectRequest, ...gax.CallOption) (*storagepb.Object, error)
|
ComposeObject(context.Context, *storagepb.ComposeObjectRequest, ...gax.CallOption) (*storagepb.Object, error)
|
||||||
DeleteObject(context.Context, *storagepb.DeleteObjectRequest, ...gax.CallOption) error
|
DeleteObject(context.Context, *storagepb.DeleteObjectRequest, ...gax.CallOption) error
|
||||||
|
RestoreObject(context.Context, *storagepb.RestoreObjectRequest, ...gax.CallOption) (*storagepb.Object, error)
|
||||||
CancelResumableWrite(context.Context, *storagepb.CancelResumableWriteRequest, ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error)
|
CancelResumableWrite(context.Context, *storagepb.CancelResumableWriteRequest, ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error)
|
||||||
GetObject(context.Context, *storagepb.GetObjectRequest, ...gax.CallOption) (*storagepb.Object, error)
|
GetObject(context.Context, *storagepb.GetObjectRequest, ...gax.CallOption) (*storagepb.Object, error)
|
||||||
ReadObject(context.Context, *storagepb.ReadObjectRequest, ...gax.CallOption) (storagepb.Storage_ReadObjectClient, error)
|
ReadObject(context.Context, *storagepb.ReadObjectRequest, ...gax.CallOption) (storagepb.Storage_ReadObjectClient, error)
|
||||||
UpdateObject(context.Context, *storagepb.UpdateObjectRequest, ...gax.CallOption) (*storagepb.Object, error)
|
UpdateObject(context.Context, *storagepb.UpdateObjectRequest, ...gax.CallOption) (*storagepb.Object, error)
|
||||||
WriteObject(context.Context, ...gax.CallOption) (storagepb.Storage_WriteObjectClient, error)
|
WriteObject(context.Context, ...gax.CallOption) (storagepb.Storage_WriteObjectClient, error)
|
||||||
|
BidiWriteObject(context.Context, ...gax.CallOption) (storagepb.Storage_BidiWriteObjectClient, error)
|
||||||
ListObjects(context.Context, *storagepb.ListObjectsRequest, ...gax.CallOption) *ObjectIterator
|
ListObjects(context.Context, *storagepb.ListObjectsRequest, ...gax.CallOption) *ObjectIterator
|
||||||
RewriteObject(context.Context, *storagepb.RewriteObjectRequest, ...gax.CallOption) (*storagepb.RewriteResponse, error)
|
RewriteObject(context.Context, *storagepb.RewriteObjectRequest, ...gax.CallOption) (*storagepb.RewriteResponse, error)
|
||||||
StartResumableWrite(context.Context, *storagepb.StartResumableWriteRequest, ...gax.CallOption) (*storagepb.StartResumableWriteResponse, error)
|
StartResumableWrite(context.Context, *storagepb.StartResumableWriteRequest, ...gax.CallOption) (*storagepb.StartResumableWriteResponse, error)
|
||||||
|
|
@ -598,16 +627,16 @@ func (c *Client) LockBucketRetentionPolicy(ctx context.Context, req *storagepb.L
|
||||||
|
|
||||||
// GetIamPolicy gets the IAM policy for a specified bucket or object.
|
// GetIamPolicy gets the IAM policy for a specified bucket or object.
|
||||||
// The resource field in the request should be
|
// The resource field in the request should be
|
||||||
// projects//buckets/<bucket_name> for a bucket or
|
// projects/_/buckets/{bucket} for a bucket or
|
||||||
// projects//buckets/<bucket_name>/objects/<object_name> for an object.
|
// projects/_/buckets/{bucket}/objects/{object} for an object.
|
||||||
func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
|
func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
|
||||||
return c.internalClient.GetIamPolicy(ctx, req, opts...)
|
return c.internalClient.GetIamPolicy(ctx, req, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetIamPolicy updates an IAM policy for the specified bucket or object.
|
// SetIamPolicy updates an IAM policy for the specified bucket or object.
|
||||||
// The resource field in the request should be
|
// The resource field in the request should be
|
||||||
// projects//buckets/<bucket_name> for a bucket or
|
// projects/_/buckets/{bucket} for a bucket or
|
||||||
// projects//buckets/<bucket_name>/objects/<object_name> for an object.
|
// projects/_/buckets/{bucket}/objects/{object} for an object.
|
||||||
func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
|
func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
|
||||||
return c.internalClient.SetIamPolicy(ctx, req, opts...)
|
return c.internalClient.SetIamPolicy(ctx, req, opts...)
|
||||||
}
|
}
|
||||||
|
|
@ -615,8 +644,8 @@ func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyReques
|
||||||
// TestIamPermissions tests a set of permissions on the given bucket or object to see which, if
|
// TestIamPermissions tests a set of permissions on the given bucket or object to see which, if
|
||||||
// any, are held by the caller.
|
// any, are held by the caller.
|
||||||
// The resource field in the request should be
|
// The resource field in the request should be
|
||||||
// projects//buckets/<bucket_name> for a bucket or
|
// projects/_/buckets/{bucket} for a bucket or
|
||||||
// projects//buckets/<bucket_name>/objects/<object_name> for an object.
|
// projects/_/buckets/{bucket}/objects/{object} for an object.
|
||||||
func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
|
func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
|
||||||
return c.internalClient.TestIamPermissions(ctx, req, opts...)
|
return c.internalClient.TestIamPermissions(ctx, req, opts...)
|
||||||
}
|
}
|
||||||
|
|
@ -665,6 +694,11 @@ func (c *Client) DeleteObject(ctx context.Context, req *storagepb.DeleteObjectRe
|
||||||
return c.internalClient.DeleteObject(ctx, req, opts...)
|
return c.internalClient.DeleteObject(ctx, req, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RestoreObject restores a soft-deleted object.
|
||||||
|
func (c *Client) RestoreObject(ctx context.Context, req *storagepb.RestoreObjectRequest, opts ...gax.CallOption) (*storagepb.Object, error) {
|
||||||
|
return c.internalClient.RestoreObject(ctx, req, opts...)
|
||||||
|
}
|
||||||
|
|
||||||
// CancelResumableWrite cancels an in-progress resumable upload.
|
// CancelResumableWrite cancels an in-progress resumable upload.
|
||||||
//
|
//
|
||||||
// Any attempts to write to the resumable upload after cancelling the upload
|
// Any attempts to write to the resumable upload after cancelling the upload
|
||||||
|
|
@ -752,10 +786,33 @@ func (c *Client) UpdateObject(ctx context.Context, req *storagepb.UpdateObjectRe
|
||||||
// Attempting to resume an already finalized object will result in an OK
|
// Attempting to resume an already finalized object will result in an OK
|
||||||
// status, with a WriteObjectResponse containing the finalized object’s
|
// status, with a WriteObjectResponse containing the finalized object’s
|
||||||
// metadata.
|
// metadata.
|
||||||
|
//
|
||||||
|
// Alternatively, the BidiWriteObject operation may be used to write an
|
||||||
|
// object with controls over flushing and the ability to fetch the ability to
|
||||||
|
// determine the current persisted size.
|
||||||
func (c *Client) WriteObject(ctx context.Context, opts ...gax.CallOption) (storagepb.Storage_WriteObjectClient, error) {
|
func (c *Client) WriteObject(ctx context.Context, opts ...gax.CallOption) (storagepb.Storage_WriteObjectClient, error) {
|
||||||
return c.internalClient.WriteObject(ctx, opts...)
|
return c.internalClient.WriteObject(ctx, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BidiWriteObject stores a new object and metadata.
|
||||||
|
//
|
||||||
|
// This is similar to the WriteObject call with the added support for
|
||||||
|
// manual flushing of persisted state, and the ability to determine current
|
||||||
|
// persisted size without closing the stream.
|
||||||
|
//
|
||||||
|
// The client may specify one or both of the state_lookup and flush fields
|
||||||
|
// in each BidiWriteObjectRequest. If flush is specified, the data written
|
||||||
|
// so far will be persisted to storage. If state_lookup is specified, the
|
||||||
|
// service will respond with a BidiWriteObjectResponse that contains the
|
||||||
|
// persisted size. If both flush and state_lookup are specified, the flush
|
||||||
|
// will always occur before a state_lookup, so that both may be set in the
|
||||||
|
// same request and the returned state will be the state of the object
|
||||||
|
// post-flush. When the stream is closed, a BidiWriteObjectResponse will
|
||||||
|
// always be sent to the client, regardless of the value of state_lookup.
|
||||||
|
func (c *Client) BidiWriteObject(ctx context.Context, opts ...gax.CallOption) (storagepb.Storage_BidiWriteObjectClient, error) {
|
||||||
|
return c.internalClient.BidiWriteObject(ctx, opts...)
|
||||||
|
}
|
||||||
|
|
||||||
// ListObjects retrieves a list of objects matching the criteria.
|
// ListObjects retrieves a list of objects matching the criteria.
|
||||||
func (c *Client) ListObjects(ctx context.Context, req *storagepb.ListObjectsRequest, opts ...gax.CallOption) *ObjectIterator {
|
func (c *Client) ListObjects(ctx context.Context, req *storagepb.ListObjectsRequest, opts ...gax.CallOption) *ObjectIterator {
|
||||||
return c.internalClient.ListObjects(ctx, req, opts...)
|
return c.internalClient.ListObjects(ctx, req, opts...)
|
||||||
|
|
@ -1375,6 +1432,33 @@ func (c *gRPCClient) DeleteObject(ctx context.Context, req *storagepb.DeleteObje
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *gRPCClient) RestoreObject(ctx context.Context, req *storagepb.RestoreObjectRequest, opts ...gax.CallOption) (*storagepb.Object, error) {
|
||||||
|
routingHeaders := ""
|
||||||
|
routingHeadersMap := make(map[string]string)
|
||||||
|
if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])) > 0 {
|
||||||
|
routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])
|
||||||
|
}
|
||||||
|
for headerName, headerValue := range routingHeadersMap {
|
||||||
|
routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
|
||||||
|
}
|
||||||
|
routingHeaders = strings.TrimSuffix(routingHeaders, "&")
|
||||||
|
hds := []string{"x-goog-request-params", routingHeaders}
|
||||||
|
|
||||||
|
hds = append(c.xGoogHeaders, hds...)
|
||||||
|
ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
|
||||||
|
opts = append((*c.CallOptions).RestoreObject[0:len((*c.CallOptions).RestoreObject):len((*c.CallOptions).RestoreObject)], opts...)
|
||||||
|
var resp *storagepb.Object
|
||||||
|
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
||||||
|
var err error
|
||||||
|
resp, err = c.client.RestoreObject(ctx, req, settings.GRPC...)
|
||||||
|
return err
|
||||||
|
}, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) CancelResumableWrite(ctx context.Context, req *storagepb.CancelResumableWriteRequest, opts ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error) {
|
func (c *gRPCClient) CancelResumableWrite(ctx context.Context, req *storagepb.CancelResumableWriteRequest, opts ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error) {
|
||||||
routingHeaders := ""
|
routingHeaders := ""
|
||||||
routingHeadersMap := make(map[string]string)
|
routingHeadersMap := make(map[string]string)
|
||||||
|
|
@ -1498,6 +1582,21 @@ func (c *gRPCClient) WriteObject(ctx context.Context, opts ...gax.CallOption) (s
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *gRPCClient) BidiWriteObject(ctx context.Context, opts ...gax.CallOption) (storagepb.Storage_BidiWriteObjectClient, error) {
|
||||||
|
ctx = gax.InsertMetadataIntoOutgoingContext(ctx, c.xGoogHeaders...)
|
||||||
|
var resp storagepb.Storage_BidiWriteObjectClient
|
||||||
|
opts = append((*c.CallOptions).BidiWriteObject[0:len((*c.CallOptions).BidiWriteObject):len((*c.CallOptions).BidiWriteObject)], opts...)
|
||||||
|
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
||||||
|
var err error
|
||||||
|
resp, err = c.client.BidiWriteObject(ctx, settings.GRPC...)
|
||||||
|
return err
|
||||||
|
}, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) ListObjects(ctx context.Context, req *storagepb.ListObjectsRequest, opts ...gax.CallOption) *ObjectIterator {
|
func (c *gRPCClient) ListObjects(ctx context.Context, req *storagepb.ListObjectsRequest, opts ...gax.CallOption) *ObjectIterator {
|
||||||
routingHeaders := ""
|
routingHeaders := ""
|
||||||
routingHeadersMap := make(map[string]string)
|
routingHeadersMap := make(map[string]string)
|
||||||
|
|
@ -1822,191 +1921,3 @@ func (c *gRPCClient) UpdateHmacKey(ctx context.Context, req *storagepb.UpdateHma
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// BucketIterator manages a stream of *storagepb.Bucket.
|
|
||||||
type BucketIterator struct {
|
|
||||||
items []*storagepb.Bucket
|
|
||||||
pageInfo *iterator.PageInfo
|
|
||||||
nextFunc func() error
|
|
||||||
|
|
||||||
// Response is the raw response for the current page.
|
|
||||||
// It must be cast to the RPC response type.
|
|
||||||
// Calling Next() or InternalFetch() updates this value.
|
|
||||||
Response interface{}
|
|
||||||
|
|
||||||
// InternalFetch is for use by the Google Cloud Libraries only.
|
|
||||||
// It is not part of the stable interface of this package.
|
|
||||||
//
|
|
||||||
// InternalFetch returns results from a single call to the underlying RPC.
|
|
||||||
// The number of results is no greater than pageSize.
|
|
||||||
// If there are no more results, nextPageToken is empty and err is nil.
|
|
||||||
InternalFetch func(pageSize int, pageToken string) (results []*storagepb.Bucket, nextPageToken string, err error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
|
|
||||||
func (it *BucketIterator) PageInfo() *iterator.PageInfo {
|
|
||||||
return it.pageInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next returns the next result. Its second return value is iterator.Done if there are no more
|
|
||||||
// results. Once Next returns Done, all subsequent calls will return Done.
|
|
||||||
func (it *BucketIterator) Next() (*storagepb.Bucket, error) {
|
|
||||||
var item *storagepb.Bucket
|
|
||||||
if err := it.nextFunc(); err != nil {
|
|
||||||
return item, err
|
|
||||||
}
|
|
||||||
item = it.items[0]
|
|
||||||
it.items = it.items[1:]
|
|
||||||
return item, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (it *BucketIterator) bufLen() int {
|
|
||||||
return len(it.items)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (it *BucketIterator) takeBuf() interface{} {
|
|
||||||
b := it.items
|
|
||||||
it.items = nil
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// HmacKeyMetadataIterator manages a stream of *storagepb.HmacKeyMetadata.
|
|
||||||
type HmacKeyMetadataIterator struct {
|
|
||||||
items []*storagepb.HmacKeyMetadata
|
|
||||||
pageInfo *iterator.PageInfo
|
|
||||||
nextFunc func() error
|
|
||||||
|
|
||||||
// Response is the raw response for the current page.
|
|
||||||
// It must be cast to the RPC response type.
|
|
||||||
// Calling Next() or InternalFetch() updates this value.
|
|
||||||
Response interface{}
|
|
||||||
|
|
||||||
// InternalFetch is for use by the Google Cloud Libraries only.
|
|
||||||
// It is not part of the stable interface of this package.
|
|
||||||
//
|
|
||||||
// InternalFetch returns results from a single call to the underlying RPC.
|
|
||||||
// The number of results is no greater than pageSize.
|
|
||||||
// If there are no more results, nextPageToken is empty and err is nil.
|
|
||||||
InternalFetch func(pageSize int, pageToken string) (results []*storagepb.HmacKeyMetadata, nextPageToken string, err error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
|
|
||||||
func (it *HmacKeyMetadataIterator) PageInfo() *iterator.PageInfo {
|
|
||||||
return it.pageInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next returns the next result. Its second return value is iterator.Done if there are no more
|
|
||||||
// results. Once Next returns Done, all subsequent calls will return Done.
|
|
||||||
func (it *HmacKeyMetadataIterator) Next() (*storagepb.HmacKeyMetadata, error) {
|
|
||||||
var item *storagepb.HmacKeyMetadata
|
|
||||||
if err := it.nextFunc(); err != nil {
|
|
||||||
return item, err
|
|
||||||
}
|
|
||||||
item = it.items[0]
|
|
||||||
it.items = it.items[1:]
|
|
||||||
return item, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (it *HmacKeyMetadataIterator) bufLen() int {
|
|
||||||
return len(it.items)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (it *HmacKeyMetadataIterator) takeBuf() interface{} {
|
|
||||||
b := it.items
|
|
||||||
it.items = nil
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// NotificationConfigIterator manages a stream of *storagepb.NotificationConfig.
|
|
||||||
type NotificationConfigIterator struct {
|
|
||||||
items []*storagepb.NotificationConfig
|
|
||||||
pageInfo *iterator.PageInfo
|
|
||||||
nextFunc func() error
|
|
||||||
|
|
||||||
// Response is the raw response for the current page.
|
|
||||||
// It must be cast to the RPC response type.
|
|
||||||
// Calling Next() or InternalFetch() updates this value.
|
|
||||||
Response interface{}
|
|
||||||
|
|
||||||
// InternalFetch is for use by the Google Cloud Libraries only.
|
|
||||||
// It is not part of the stable interface of this package.
|
|
||||||
//
|
|
||||||
// InternalFetch returns results from a single call to the underlying RPC.
|
|
||||||
// The number of results is no greater than pageSize.
|
|
||||||
// If there are no more results, nextPageToken is empty and err is nil.
|
|
||||||
InternalFetch func(pageSize int, pageToken string) (results []*storagepb.NotificationConfig, nextPageToken string, err error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
|
|
||||||
func (it *NotificationConfigIterator) PageInfo() *iterator.PageInfo {
|
|
||||||
return it.pageInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next returns the next result. Its second return value is iterator.Done if there are no more
|
|
||||||
// results. Once Next returns Done, all subsequent calls will return Done.
|
|
||||||
func (it *NotificationConfigIterator) Next() (*storagepb.NotificationConfig, error) {
|
|
||||||
var item *storagepb.NotificationConfig
|
|
||||||
if err := it.nextFunc(); err != nil {
|
|
||||||
return item, err
|
|
||||||
}
|
|
||||||
item = it.items[0]
|
|
||||||
it.items = it.items[1:]
|
|
||||||
return item, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (it *NotificationConfigIterator) bufLen() int {
|
|
||||||
return len(it.items)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (it *NotificationConfigIterator) takeBuf() interface{} {
|
|
||||||
b := it.items
|
|
||||||
it.items = nil
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// ObjectIterator manages a stream of *storagepb.Object.
|
|
||||||
type ObjectIterator struct {
|
|
||||||
items []*storagepb.Object
|
|
||||||
pageInfo *iterator.PageInfo
|
|
||||||
nextFunc func() error
|
|
||||||
|
|
||||||
// Response is the raw response for the current page.
|
|
||||||
// It must be cast to the RPC response type.
|
|
||||||
// Calling Next() or InternalFetch() updates this value.
|
|
||||||
Response interface{}
|
|
||||||
|
|
||||||
// InternalFetch is for use by the Google Cloud Libraries only.
|
|
||||||
// It is not part of the stable interface of this package.
|
|
||||||
//
|
|
||||||
// InternalFetch returns results from a single call to the underlying RPC.
|
|
||||||
// The number of results is no greater than pageSize.
|
|
||||||
// If there are no more results, nextPageToken is empty and err is nil.
|
|
||||||
InternalFetch func(pageSize int, pageToken string) (results []*storagepb.Object, nextPageToken string, err error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
|
|
||||||
func (it *ObjectIterator) PageInfo() *iterator.PageInfo {
|
|
||||||
return it.pageInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next returns the next result. Its second return value is iterator.Done if there are no more
|
|
||||||
// results. Once Next returns Done, all subsequent calls will return Done.
|
|
||||||
func (it *ObjectIterator) Next() (*storagepb.Object, error) {
|
|
||||||
var item *storagepb.Object
|
|
||||||
if err := it.nextFunc(); err != nil {
|
|
||||||
return item, err
|
|
||||||
}
|
|
||||||
item = it.items[0]
|
|
||||||
it.items = it.items[1:]
|
|
||||||
return item, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (it *ObjectIterator) bufLen() int {
|
|
||||||
return len(it.items)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (it *ObjectIterator) takeBuf() interface{} {
|
|
||||||
b := it.items
|
|
||||||
it.items = nil
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -15,4 +15,4 @@
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
// Version is the current tagged release of the library.
|
// Version is the current tagged release of the library.
|
||||||
const Version = "1.33.0"
|
const Version = "1.35.1"
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
|
@ -29,6 +28,7 @@ import (
|
||||||
sinternal "cloud.google.com/go/storage/internal"
|
sinternal "cloud.google.com/go/storage/internal"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
gax "github.com/googleapis/gax-go/v2"
|
gax "github.com/googleapis/gax-go/v2"
|
||||||
|
"github.com/googleapis/gax-go/v2/callctx"
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
|
|
@ -37,10 +37,15 @@ import (
|
||||||
var defaultRetry *retryConfig = &retryConfig{}
|
var defaultRetry *retryConfig = &retryConfig{}
|
||||||
var xGoogDefaultHeader = fmt.Sprintf("gl-go/%s gccl/%s", version.Go(), sinternal.Version)
|
var xGoogDefaultHeader = fmt.Sprintf("gl-go/%s gccl/%s", version.Go(), sinternal.Version)
|
||||||
|
|
||||||
|
const (
|
||||||
|
xGoogHeaderKey = "x-goog-api-client"
|
||||||
|
idempotencyHeaderKey = "x-goog-gcs-idempotency-token"
|
||||||
|
)
|
||||||
|
|
||||||
// run determines whether a retry is necessary based on the config and
|
// run determines whether a retry is necessary based on the config and
|
||||||
// idempotency information. It then calls the function with or without retries
|
// idempotency information. It then calls the function with or without retries
|
||||||
// as appropriate, using the configured settings.
|
// as appropriate, using the configured settings.
|
||||||
func run(ctx context.Context, call func() error, retry *retryConfig, isIdempotent bool, setHeader func(string, int)) error {
|
func run(ctx context.Context, call func(ctx context.Context) error, retry *retryConfig, isIdempotent bool) error {
|
||||||
attempts := 1
|
attempts := 1
|
||||||
invocationID := uuid.New().String()
|
invocationID := uuid.New().String()
|
||||||
|
|
||||||
|
|
@ -48,8 +53,8 @@ func run(ctx context.Context, call func() error, retry *retryConfig, isIdempoten
|
||||||
retry = defaultRetry
|
retry = defaultRetry
|
||||||
}
|
}
|
||||||
if (retry.policy == RetryIdempotent && !isIdempotent) || retry.policy == RetryNever {
|
if (retry.policy == RetryIdempotent && !isIdempotent) || retry.policy == RetryNever {
|
||||||
setHeader(invocationID, attempts)
|
ctxWithHeaders := setInvocationHeaders(ctx, invocationID, attempts)
|
||||||
return call()
|
return call(ctxWithHeaders)
|
||||||
}
|
}
|
||||||
bo := gax.Backoff{}
|
bo := gax.Backoff{}
|
||||||
if retry.backoff != nil {
|
if retry.backoff != nil {
|
||||||
|
|
@ -63,35 +68,22 @@ func run(ctx context.Context, call func() error, retry *retryConfig, isIdempoten
|
||||||
}
|
}
|
||||||
|
|
||||||
return internal.Retry(ctx, bo, func() (stop bool, err error) {
|
return internal.Retry(ctx, bo, func() (stop bool, err error) {
|
||||||
setHeader(invocationID, attempts)
|
ctxWithHeaders := setInvocationHeaders(ctx, invocationID, attempts)
|
||||||
err = call()
|
err = call(ctxWithHeaders)
|
||||||
attempts++
|
attempts++
|
||||||
return !errorFunc(err), err
|
return !errorFunc(err), err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func setRetryHeaderHTTP(req interface{ Header() http.Header }) func(string, int) {
|
// Sets invocation ID headers on the context which will be propagated as
|
||||||
return func(invocationID string, attempts int) {
|
// headers in the call to the service (for both gRPC and HTTP).
|
||||||
if req == nil {
|
func setInvocationHeaders(ctx context.Context, invocationID string, attempts int) context.Context {
|
||||||
return
|
invocationHeader := fmt.Sprintf("gccl-invocation-id/%v gccl-attempt-count/%v", invocationID, attempts)
|
||||||
}
|
xGoogHeader := strings.Join([]string{invocationHeader, xGoogDefaultHeader}, " ")
|
||||||
header := req.Header()
|
|
||||||
// TODO(b/274504690): Consider dropping gccl-invocation-id key since it
|
|
||||||
// duplicates the X-Goog-Gcs-Idempotency-Token header (added in v1.31.0).
|
|
||||||
invocationHeader := fmt.Sprintf("gccl-invocation-id/%v gccl-attempt-count/%v", invocationID, attempts)
|
|
||||||
xGoogHeader := strings.Join([]string{invocationHeader, xGoogDefaultHeader}, " ")
|
|
||||||
header.Set("x-goog-api-client", xGoogHeader)
|
|
||||||
// Also use the invocationID for the idempotency token header, which will
|
|
||||||
// enable idempotent retries for more operations.
|
|
||||||
header.Set("x-goog-gcs-idempotency-token", invocationID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Implement method setting header via context for gRPC
|
ctx = callctx.SetHeaders(ctx, xGoogHeaderKey, xGoogHeader)
|
||||||
func setRetryHeaderGRPC(_ context.Context) func(string, int) {
|
ctx = callctx.SetHeaders(ctx, idempotencyHeaderKey, invocationID)
|
||||||
return func(_ string, _ int) {
|
return ctx
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ShouldRetry returns true if an error is retryable, based on best practice
|
// ShouldRetry returns true if an error is retryable, based on best practice
|
||||||
|
|
|
||||||
|
|
@ -187,16 +187,6 @@ func setConditionsHeaders(headers http.Header, conds *Conditions) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wrap a request to look similar to an apiary library request, in order to
|
|
||||||
// be used by run().
|
|
||||||
type readerRequestWrapper struct {
|
|
||||||
req *http.Request
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *readerRequestWrapper) Header() http.Header {
|
|
||||||
return w.req.Header
|
|
||||||
}
|
|
||||||
|
|
||||||
var emptyBody = ioutil.NopCloser(strings.NewReader(""))
|
var emptyBody = ioutil.NopCloser(strings.NewReader(""))
|
||||||
|
|
||||||
// Reader reads a Cloud Storage object.
|
// Reader reads a Cloud Storage object.
|
||||||
|
|
|
||||||
|
|
@ -733,13 +733,14 @@ func (s *String) ReadOptionalASN1OctetString(out *[]byte, outPresent *bool, tag
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadOptionalASN1Boolean sets *out to the value of the next ASN.1 BOOLEAN or,
|
// ReadOptionalASN1Boolean attempts to read an optional ASN.1 BOOLEAN
|
||||||
// if the next bytes are not an ASN.1 BOOLEAN, to the value of defaultValue.
|
// explicitly tagged with tag into out and advances. If no element with a
|
||||||
// It reports whether the operation was successful.
|
// matching tag is present, it sets "out" to defaultValue instead. It reports
|
||||||
func (s *String) ReadOptionalASN1Boolean(out *bool, defaultValue bool) bool {
|
// whether the read was successful.
|
||||||
|
func (s *String) ReadOptionalASN1Boolean(out *bool, tag asn1.Tag, defaultValue bool) bool {
|
||||||
var present bool
|
var present bool
|
||||||
var child String
|
var child String
|
||||||
if !s.ReadOptionalASN1(&child, &present, asn1.BOOLEAN) {
|
if !s.ReadOptionalASN1(&child, &present, tag) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -748,7 +749,7 @@ func (s *String) ReadOptionalASN1Boolean(out *bool, defaultValue bool) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.ReadASN1Boolean(out)
|
return child.ReadASN1Boolean(out)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *String) readASN1(out *String, outTag *asn1.Tag, skipHeader bool) bool {
|
func (s *String) readASN1(out *String, outTag *asn1.Tag, skipHeader bool) bool {
|
||||||
|
|
|
||||||
|
|
@ -307,7 +307,10 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand
|
||||||
}
|
}
|
||||||
var methods []string
|
var methods []string
|
||||||
var errSigAlgo error
|
var errSigAlgo error
|
||||||
for _, signer := range signers {
|
|
||||||
|
origSignersLen := len(signers)
|
||||||
|
for idx := 0; idx < len(signers); idx++ {
|
||||||
|
signer := signers[idx]
|
||||||
pub := signer.PublicKey()
|
pub := signer.PublicKey()
|
||||||
as, algo, err := pickSignatureAlgorithm(signer, extensions)
|
as, algo, err := pickSignatureAlgorithm(signer, extensions)
|
||||||
if err != nil && errSigAlgo == nil {
|
if err != nil && errSigAlgo == nil {
|
||||||
|
|
@ -321,6 +324,21 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return authFailure, nil, err
|
return authFailure, nil, err
|
||||||
}
|
}
|
||||||
|
// OpenSSH 7.2-7.7 advertises support for rsa-sha2-256 and rsa-sha2-512
|
||||||
|
// in the "server-sig-algs" extension but doesn't support these
|
||||||
|
// algorithms for certificate authentication, so if the server rejects
|
||||||
|
// the key try to use the obtained algorithm as if "server-sig-algs" had
|
||||||
|
// not been implemented if supported from the algorithm signer.
|
||||||
|
if !ok && idx < origSignersLen && isRSACert(algo) && algo != CertAlgoRSAv01 {
|
||||||
|
if contains(as.Algorithms(), KeyAlgoRSA) {
|
||||||
|
// We retry using the compat algorithm after all signers have
|
||||||
|
// been tried normally.
|
||||||
|
signers = append(signers, &multiAlgorithmSigner{
|
||||||
|
AlgorithmSigner: as,
|
||||||
|
supportedAlgorithms: []string{KeyAlgoRSA},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
if !ok {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,14 @@ func isRSA(algo string) bool {
|
||||||
return contains(algos, underlyingAlgo(algo))
|
return contains(algos, underlyingAlgo(algo))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isRSACert(algo string) bool {
|
||||||
|
_, ok := certKeyAlgoNames[algo]
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return isRSA(algo)
|
||||||
|
}
|
||||||
|
|
||||||
// supportedPubKeyAuthAlgos specifies the supported client public key
|
// supportedPubKeyAuthAlgos specifies the supported client public key
|
||||||
// authentication algorithms. Note that this doesn't include certificate types
|
// authentication algorithms. Note that this doesn't include certificate types
|
||||||
// since those use the underlying algorithm. This list is sent to the client if
|
// since those use the underlying algorithm. This list is sent to the client if
|
||||||
|
|
|
||||||
|
|
@ -337,7 +337,7 @@ func checkSourceAddress(addr net.Addr, sourceAddrs string) error {
|
||||||
return fmt.Errorf("ssh: remote address %v is not allowed because of source-address restriction", addr)
|
return fmt.Errorf("ssh: remote address %v is not allowed because of source-address restriction", addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func gssExchangeToken(gssapiConfig *GSSAPIWithMICConfig, firstToken []byte, s *connection,
|
func gssExchangeToken(gssapiConfig *GSSAPIWithMICConfig, token []byte, s *connection,
|
||||||
sessionID []byte, userAuthReq userAuthRequestMsg) (authErr error, perms *Permissions, err error) {
|
sessionID []byte, userAuthReq userAuthRequestMsg) (authErr error, perms *Permissions, err error) {
|
||||||
gssAPIServer := gssapiConfig.Server
|
gssAPIServer := gssapiConfig.Server
|
||||||
defer gssAPIServer.DeleteSecContext()
|
defer gssAPIServer.DeleteSecContext()
|
||||||
|
|
@ -347,7 +347,7 @@ func gssExchangeToken(gssapiConfig *GSSAPIWithMICConfig, firstToken []byte, s *c
|
||||||
outToken []byte
|
outToken []byte
|
||||||
needContinue bool
|
needContinue bool
|
||||||
)
|
)
|
||||||
outToken, srcName, needContinue, err = gssAPIServer.AcceptSecContext(firstToken)
|
outToken, srcName, needContinue, err = gssAPIServer.AcceptSecContext(token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err, nil, nil
|
return err, nil, nil
|
||||||
}
|
}
|
||||||
|
|
@ -369,6 +369,7 @@ func gssExchangeToken(gssapiConfig *GSSAPIWithMICConfig, firstToken []byte, s *c
|
||||||
if err := Unmarshal(packet, userAuthGSSAPITokenReq); err != nil {
|
if err := Unmarshal(packet, userAuthGSSAPITokenReq); err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
token = userAuthGSSAPITokenReq.Token
|
||||||
}
|
}
|
||||||
packet, err := s.transport.readPacket()
|
packet, err := s.transport.readPacket()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
package ssh
|
package ssh
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
@ -332,6 +333,40 @@ func (l *tcpListener) Addr() net.Addr {
|
||||||
return l.laddr
|
return l.laddr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DialContext initiates a connection to the addr from the remote host.
|
||||||
|
//
|
||||||
|
// The provided Context must be non-nil. If the context expires before the
|
||||||
|
// connection is complete, an error is returned. Once successfully connected,
|
||||||
|
// any expiration of the context will not affect the connection.
|
||||||
|
//
|
||||||
|
// See func Dial for additional information.
|
||||||
|
func (c *Client) DialContext(ctx context.Context, n, addr string) (net.Conn, error) {
|
||||||
|
if err := ctx.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
type connErr struct {
|
||||||
|
conn net.Conn
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
ch := make(chan connErr)
|
||||||
|
go func() {
|
||||||
|
conn, err := c.Dial(n, addr)
|
||||||
|
select {
|
||||||
|
case ch <- connErr{conn, err}:
|
||||||
|
case <-ctx.Done():
|
||||||
|
if conn != nil {
|
||||||
|
conn.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
select {
|
||||||
|
case res := <-ch:
|
||||||
|
return res.conn, res.err
|
||||||
|
case <-ctx.Done():
|
||||||
|
return nil, ctx.Err()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Dial initiates a connection to the addr from the remote host.
|
// Dial initiates a connection to the addr from the remote host.
|
||||||
// The resulting connection has a zero LocalAddr() and RemoteAddr().
|
// The resulting connection has a zero LocalAddr() and RemoteAddr().
|
||||||
func (c *Client) Dial(n, addr string) (net.Conn, error) {
|
func (c *Client) Dial(n, addr string) (net.Conn, error) {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +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 dragonfly || freebsd || linux || netbsd || openbsd
|
//go:build dragonfly || freebsd || linux || netbsd
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -231,3 +231,8 @@ func IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) {
|
||||||
func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error {
|
func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error {
|
||||||
return ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value))
|
return ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IoctlLoopConfigure configures all loop device parameters in a single step
|
||||||
|
func IoctlLoopConfigure(fd int, value *LoopConfig) error {
|
||||||
|
return ioctlPtr(fd, LOOP_CONFIGURE, unsafe.Pointer(value))
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -519,6 +519,7 @@ ccflags="$@"
|
||||||
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
||||||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
||||||
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
||||||
|
$2 == "LOOP_CONFIGURE" ||
|
||||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||
|
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||
|
||||||
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
||||||
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
||||||
|
|
@ -560,7 +561,7 @@ ccflags="$@"
|
||||||
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
|
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
|
||||||
$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
|
$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
|
||||||
$2 ~ /^CLONE_[A-Z_]+/ ||
|
$2 ~ /^CLONE_[A-Z_]+/ ||
|
||||||
$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ &&
|
$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+|BPF_F_LINK)$/ &&
|
||||||
$2 ~ /^(BPF|DLT)_/ ||
|
$2 ~ /^(BPF|DLT)_/ ||
|
||||||
$2 ~ /^AUDIT_/ ||
|
$2 ~ /^AUDIT_/ ||
|
||||||
$2 ~ /^(CLOCK|TIMER)_/ ||
|
$2 ~ /^(CLOCK|TIMER)_/ ||
|
||||||
|
|
|
||||||
|
|
@ -316,7 +316,7 @@ func GetsockoptString(fd, level, opt int) (string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return string(buf[:vallen-1]), nil
|
return ByteSliceToString(buf[:vallen]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
|
//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
|
||||||
|
|
|
||||||
|
|
@ -61,15 +61,23 @@ func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys fchmodat(dirfd int, path string, mode uint32) (err error)
|
//sys fchmodat(dirfd int, path string, mode uint32) (err error)
|
||||||
|
//sys fchmodat2(dirfd int, path string, mode uint32, flags int) (err error)
|
||||||
|
|
||||||
func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
|
func Fchmodat(dirfd int, path string, mode uint32, flags int) error {
|
||||||
// Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior
|
// Linux fchmodat doesn't support the flags parameter, but fchmodat2 does.
|
||||||
// and check the flags. Otherwise the mode would be applied to the symlink
|
// Try fchmodat2 if flags are specified.
|
||||||
// destination which is not what the user expects.
|
if flags != 0 {
|
||||||
if flags&^AT_SYMLINK_NOFOLLOW != 0 {
|
err := fchmodat2(dirfd, path, mode, flags)
|
||||||
return EINVAL
|
if err == ENOSYS {
|
||||||
} else if flags&AT_SYMLINK_NOFOLLOW != 0 {
|
// fchmodat2 isn't available. If the flags are known to be valid,
|
||||||
return EOPNOTSUPP
|
// return EOPNOTSUPP to indicate that fchmodat doesn't support them.
|
||||||
|
if flags&^(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 {
|
||||||
|
return EINVAL
|
||||||
|
} else if flags&(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 {
|
||||||
|
return EOPNOTSUPP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
return fchmodat(dirfd, path, mode)
|
return fchmodat(dirfd, path, mode)
|
||||||
}
|
}
|
||||||
|
|
@ -1302,7 +1310,7 @@ func GetsockoptString(fd, level, opt int) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return string(buf[:vallen-1]), nil
|
return ByteSliceToString(buf[:vallen]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) {
|
func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) {
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,20 @@ func Getresgid() (rgid, egid, sgid int) {
|
||||||
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
||||||
|
|
||||||
|
//sys fcntl(fd int, cmd int, arg int) (n int, err error)
|
||||||
|
//sys fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) = SYS_FCNTL
|
||||||
|
|
||||||
|
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
|
||||||
|
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
|
||||||
|
return fcntl(int(fd), cmd, arg)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
|
||||||
|
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
|
||||||
|
_, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(lk))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
|
//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
|
||||||
|
|
||||||
func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
||||||
|
|
|
||||||
|
|
@ -158,7 +158,7 @@ func GetsockoptString(fd, level, opt int) (string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return string(buf[:vallen-1]), nil
|
return ByteSliceToString(buf[:vallen]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
const ImplementsGetwd = true
|
const ImplementsGetwd = true
|
||||||
|
|
|
||||||
|
|
@ -1104,7 +1104,7 @@ func GetsockoptString(fd, level, opt int) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return string(buf[:vallen-1]), nil
|
return ByteSliceToString(buf[:vallen]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
||||||
|
|
|
||||||
|
|
@ -486,7 +486,6 @@ const (
|
||||||
BPF_F_ANY_ALIGNMENT = 0x2
|
BPF_F_ANY_ALIGNMENT = 0x2
|
||||||
BPF_F_BEFORE = 0x8
|
BPF_F_BEFORE = 0x8
|
||||||
BPF_F_ID = 0x20
|
BPF_F_ID = 0x20
|
||||||
BPF_F_LINK = 0x2000
|
|
||||||
BPF_F_NETFILTER_IP_DEFRAG = 0x1
|
BPF_F_NETFILTER_IP_DEFRAG = 0x1
|
||||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||||
BPF_F_REPLACE = 0x4
|
BPF_F_REPLACE = 0x4
|
||||||
|
|
@ -1802,6 +1801,7 @@ const (
|
||||||
LOCK_SH = 0x1
|
LOCK_SH = 0x1
|
||||||
LOCK_UN = 0x8
|
LOCK_UN = 0x8
|
||||||
LOOP_CLR_FD = 0x4c01
|
LOOP_CLR_FD = 0x4c01
|
||||||
|
LOOP_CONFIGURE = 0x4c0a
|
||||||
LOOP_CTL_ADD = 0x4c80
|
LOOP_CTL_ADD = 0x4c80
|
||||||
LOOP_CTL_GET_FREE = 0x4c82
|
LOOP_CTL_GET_FREE = 0x4c82
|
||||||
LOOP_CTL_REMOVE = 0x4c81
|
LOOP_CTL_REMOVE = 0x4c81
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := Syscall6(SYS_FCHMODAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ioctl(fd int, req uint, arg uintptr) (err error) {
|
func ioctl(fd int, req uint, arg uintptr) (err error) {
|
||||||
_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
|
_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntl(fd int, cmd int, arg int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_fcntl_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
||||||
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fcntl(SB)
|
||||||
|
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_ppoll(SB)
|
JMP libc_ppoll(SB)
|
||||||
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4
|
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntl(fd int, cmd int, arg int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_fcntl_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
||||||
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fcntl(SB)
|
||||||
|
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_ppoll(SB)
|
JMP libc_ppoll(SB)
|
||||||
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntl(fd int, cmd int, arg int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_fcntl_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
||||||
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fcntl(SB)
|
||||||
|
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_ppoll(SB)
|
JMP libc_ppoll(SB)
|
||||||
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4
|
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntl(fd int, cmd int, arg int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_fcntl_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
||||||
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fcntl(SB)
|
||||||
|
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_ppoll(SB)
|
JMP libc_ppoll(SB)
|
||||||
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntl(fd int, cmd int, arg int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_fcntl_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
||||||
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fcntl(SB)
|
||||||
|
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_ppoll(SB)
|
JMP libc_ppoll(SB)
|
||||||
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntl(fd int, cmd int, arg int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_fcntl_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
||||||
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
|
|
|
||||||
|
|
@ -213,6 +213,12 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
CALL libc_fcntl(SB)
|
||||||
|
RET
|
||||||
|
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
CALL libc_ppoll(SB)
|
CALL libc_ppoll(SB)
|
||||||
RET
|
RET
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntl(fd int, cmd int, arg int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_fcntl_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
|
||||||
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fcntl(SB)
|
||||||
|
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_ppoll(SB)
|
JMP libc_ppoll(SB)
|
||||||
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8
|
||||||
|
|
|
||||||
|
|
@ -2671,6 +2671,7 @@ const (
|
||||||
BPF_PROG_TYPE_LSM = 0x1d
|
BPF_PROG_TYPE_LSM = 0x1d
|
||||||
BPF_PROG_TYPE_SK_LOOKUP = 0x1e
|
BPF_PROG_TYPE_SK_LOOKUP = 0x1e
|
||||||
BPF_PROG_TYPE_SYSCALL = 0x1f
|
BPF_PROG_TYPE_SYSCALL = 0x1f
|
||||||
|
BPF_PROG_TYPE_NETFILTER = 0x20
|
||||||
BPF_CGROUP_INET_INGRESS = 0x0
|
BPF_CGROUP_INET_INGRESS = 0x0
|
||||||
BPF_CGROUP_INET_EGRESS = 0x1
|
BPF_CGROUP_INET_EGRESS = 0x1
|
||||||
BPF_CGROUP_INET_SOCK_CREATE = 0x2
|
BPF_CGROUP_INET_SOCK_CREATE = 0x2
|
||||||
|
|
@ -2715,6 +2716,11 @@ const (
|
||||||
BPF_PERF_EVENT = 0x29
|
BPF_PERF_EVENT = 0x29
|
||||||
BPF_TRACE_KPROBE_MULTI = 0x2a
|
BPF_TRACE_KPROBE_MULTI = 0x2a
|
||||||
BPF_LSM_CGROUP = 0x2b
|
BPF_LSM_CGROUP = 0x2b
|
||||||
|
BPF_STRUCT_OPS = 0x2c
|
||||||
|
BPF_NETFILTER = 0x2d
|
||||||
|
BPF_TCX_INGRESS = 0x2e
|
||||||
|
BPF_TCX_EGRESS = 0x2f
|
||||||
|
BPF_TRACE_UPROBE_MULTI = 0x30
|
||||||
BPF_LINK_TYPE_UNSPEC = 0x0
|
BPF_LINK_TYPE_UNSPEC = 0x0
|
||||||
BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1
|
BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1
|
||||||
BPF_LINK_TYPE_TRACING = 0x2
|
BPF_LINK_TYPE_TRACING = 0x2
|
||||||
|
|
@ -2725,6 +2731,18 @@ const (
|
||||||
BPF_LINK_TYPE_PERF_EVENT = 0x7
|
BPF_LINK_TYPE_PERF_EVENT = 0x7
|
||||||
BPF_LINK_TYPE_KPROBE_MULTI = 0x8
|
BPF_LINK_TYPE_KPROBE_MULTI = 0x8
|
||||||
BPF_LINK_TYPE_STRUCT_OPS = 0x9
|
BPF_LINK_TYPE_STRUCT_OPS = 0x9
|
||||||
|
BPF_LINK_TYPE_NETFILTER = 0xa
|
||||||
|
BPF_LINK_TYPE_TCX = 0xb
|
||||||
|
BPF_LINK_TYPE_UPROBE_MULTI = 0xc
|
||||||
|
BPF_PERF_EVENT_UNSPEC = 0x0
|
||||||
|
BPF_PERF_EVENT_UPROBE = 0x1
|
||||||
|
BPF_PERF_EVENT_URETPROBE = 0x2
|
||||||
|
BPF_PERF_EVENT_KPROBE = 0x3
|
||||||
|
BPF_PERF_EVENT_KRETPROBE = 0x4
|
||||||
|
BPF_PERF_EVENT_TRACEPOINT = 0x5
|
||||||
|
BPF_PERF_EVENT_EVENT = 0x6
|
||||||
|
BPF_F_KPROBE_MULTI_RETURN = 0x1
|
||||||
|
BPF_F_UPROBE_MULTI_RETURN = 0x1
|
||||||
BPF_ANY = 0x0
|
BPF_ANY = 0x0
|
||||||
BPF_NOEXIST = 0x1
|
BPF_NOEXIST = 0x1
|
||||||
BPF_EXIST = 0x2
|
BPF_EXIST = 0x2
|
||||||
|
|
@ -2742,6 +2760,8 @@ const (
|
||||||
BPF_F_MMAPABLE = 0x400
|
BPF_F_MMAPABLE = 0x400
|
||||||
BPF_F_PRESERVE_ELEMS = 0x800
|
BPF_F_PRESERVE_ELEMS = 0x800
|
||||||
BPF_F_INNER_MAP = 0x1000
|
BPF_F_INNER_MAP = 0x1000
|
||||||
|
BPF_F_LINK = 0x2000
|
||||||
|
BPF_F_PATH_FD = 0x4000
|
||||||
BPF_STATS_RUN_TIME = 0x0
|
BPF_STATS_RUN_TIME = 0x0
|
||||||
BPF_STACK_BUILD_ID_EMPTY = 0x0
|
BPF_STACK_BUILD_ID_EMPTY = 0x0
|
||||||
BPF_STACK_BUILD_ID_VALID = 0x1
|
BPF_STACK_BUILD_ID_VALID = 0x1
|
||||||
|
|
@ -2762,6 +2782,7 @@ const (
|
||||||
BPF_F_ZERO_CSUM_TX = 0x2
|
BPF_F_ZERO_CSUM_TX = 0x2
|
||||||
BPF_F_DONT_FRAGMENT = 0x4
|
BPF_F_DONT_FRAGMENT = 0x4
|
||||||
BPF_F_SEQ_NUMBER = 0x8
|
BPF_F_SEQ_NUMBER = 0x8
|
||||||
|
BPF_F_NO_TUNNEL_KEY = 0x10
|
||||||
BPF_F_TUNINFO_FLAGS = 0x10
|
BPF_F_TUNINFO_FLAGS = 0x10
|
||||||
BPF_F_INDEX_MASK = 0xffffffff
|
BPF_F_INDEX_MASK = 0xffffffff
|
||||||
BPF_F_CURRENT_CPU = 0xffffffff
|
BPF_F_CURRENT_CPU = 0xffffffff
|
||||||
|
|
@ -2778,6 +2799,8 @@ const (
|
||||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||||
BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20
|
BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20
|
||||||
BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 0x40
|
BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 0x40
|
||||||
|
BPF_F_ADJ_ROOM_DECAP_L3_IPV4 = 0x80
|
||||||
|
BPF_F_ADJ_ROOM_DECAP_L3_IPV6 = 0x100
|
||||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||||
|
|
@ -2866,6 +2889,8 @@ const (
|
||||||
BPF_DEVCG_DEV_CHAR = 0x2
|
BPF_DEVCG_DEV_CHAR = 0x2
|
||||||
BPF_FIB_LOOKUP_DIRECT = 0x1
|
BPF_FIB_LOOKUP_DIRECT = 0x1
|
||||||
BPF_FIB_LOOKUP_OUTPUT = 0x2
|
BPF_FIB_LOOKUP_OUTPUT = 0x2
|
||||||
|
BPF_FIB_LOOKUP_SKIP_NEIGH = 0x4
|
||||||
|
BPF_FIB_LOOKUP_TBID = 0x8
|
||||||
BPF_FIB_LKUP_RET_SUCCESS = 0x0
|
BPF_FIB_LKUP_RET_SUCCESS = 0x0
|
||||||
BPF_FIB_LKUP_RET_BLACKHOLE = 0x1
|
BPF_FIB_LKUP_RET_BLACKHOLE = 0x1
|
||||||
BPF_FIB_LKUP_RET_UNREACHABLE = 0x2
|
BPF_FIB_LKUP_RET_UNREACHABLE = 0x2
|
||||||
|
|
@ -2901,6 +2926,7 @@ const (
|
||||||
BPF_CORE_ENUMVAL_EXISTS = 0xa
|
BPF_CORE_ENUMVAL_EXISTS = 0xa
|
||||||
BPF_CORE_ENUMVAL_VALUE = 0xb
|
BPF_CORE_ENUMVAL_VALUE = 0xb
|
||||||
BPF_CORE_TYPE_MATCHES = 0xc
|
BPF_CORE_TYPE_MATCHES = 0xc
|
||||||
|
BPF_F_TIMER_ABS = 0x1
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -2979,6 +3005,12 @@ type LoopInfo64 struct {
|
||||||
Encrypt_key [32]uint8
|
Encrypt_key [32]uint8
|
||||||
Init [2]uint64
|
Init [2]uint64
|
||||||
}
|
}
|
||||||
|
type LoopConfig struct {
|
||||||
|
Fd uint32
|
||||||
|
Size uint32
|
||||||
|
Info LoopInfo64
|
||||||
|
_ [8]uint64
|
||||||
|
}
|
||||||
|
|
||||||
type TIPCSocketAddr struct {
|
type TIPCSocketAddr struct {
|
||||||
Ref uint32
|
Ref uint32
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,8 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
||||||
//sys GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW
|
//sys GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW
|
||||||
//sys GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW
|
//sys GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW
|
||||||
//sys SetDefaultDllDirectories(directoryFlags uint32) (err error)
|
//sys SetDefaultDllDirectories(directoryFlags uint32) (err error)
|
||||||
|
//sys AddDllDirectory(path *uint16) (cookie uintptr, err error) = kernel32.AddDllDirectory
|
||||||
|
//sys RemoveDllDirectory(cookie uintptr) (err error) = kernel32.RemoveDllDirectory
|
||||||
//sys SetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW
|
//sys SetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW
|
||||||
//sys GetVersion() (ver uint32, err error)
|
//sys GetVersion() (ver uint32, err error)
|
||||||
//sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW
|
//sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW
|
||||||
|
|
|
||||||
|
|
@ -184,6 +184,7 @@ var (
|
||||||
procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo")
|
procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo")
|
||||||
procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx")
|
procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx")
|
||||||
procGetIfEntry = modiphlpapi.NewProc("GetIfEntry")
|
procGetIfEntry = modiphlpapi.NewProc("GetIfEntry")
|
||||||
|
procAddDllDirectory = modkernel32.NewProc("AddDllDirectory")
|
||||||
procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject")
|
procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject")
|
||||||
procCancelIo = modkernel32.NewProc("CancelIo")
|
procCancelIo = modkernel32.NewProc("CancelIo")
|
||||||
procCancelIoEx = modkernel32.NewProc("CancelIoEx")
|
procCancelIoEx = modkernel32.NewProc("CancelIoEx")
|
||||||
|
|
@ -330,6 +331,7 @@ var (
|
||||||
procReadProcessMemory = modkernel32.NewProc("ReadProcessMemory")
|
procReadProcessMemory = modkernel32.NewProc("ReadProcessMemory")
|
||||||
procReleaseMutex = modkernel32.NewProc("ReleaseMutex")
|
procReleaseMutex = modkernel32.NewProc("ReleaseMutex")
|
||||||
procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW")
|
procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW")
|
||||||
|
procRemoveDllDirectory = modkernel32.NewProc("RemoveDllDirectory")
|
||||||
procResetEvent = modkernel32.NewProc("ResetEvent")
|
procResetEvent = modkernel32.NewProc("ResetEvent")
|
||||||
procResizePseudoConsole = modkernel32.NewProc("ResizePseudoConsole")
|
procResizePseudoConsole = modkernel32.NewProc("ResizePseudoConsole")
|
||||||
procResumeThread = modkernel32.NewProc("ResumeThread")
|
procResumeThread = modkernel32.NewProc("ResumeThread")
|
||||||
|
|
@ -1605,6 +1607,15 @@ func GetIfEntry(pIfRow *MibIfRow) (errcode error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddDllDirectory(path *uint16) (cookie uintptr, err error) {
|
||||||
|
r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
|
||||||
|
cookie = uintptr(r0)
|
||||||
|
if cookie == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func AssignProcessToJobObject(job Handle, process Handle) (err error) {
|
func AssignProcessToJobObject(job Handle, process Handle) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procAssignProcessToJobObject.Addr(), 2, uintptr(job), uintptr(process), 0)
|
r1, _, e1 := syscall.Syscall(procAssignProcessToJobObject.Addr(), 2, uintptr(job), uintptr(process), 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
|
@ -2879,6 +2890,14 @@ func RemoveDirectory(path *uint16) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RemoveDllDirectory(cookie uintptr) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procRemoveDllDirectory.Addr(), 1, uintptr(cookie), 0, 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func ResetEvent(event Handle) (err error) {
|
func ResetEvent(event Handle) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0)
|
r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,8 @@ func Every(interval time.Duration) Limit {
|
||||||
// or its associated context.Context is canceled.
|
// or its associated context.Context is canceled.
|
||||||
//
|
//
|
||||||
// The methods AllowN, ReserveN, and WaitN consume n tokens.
|
// The methods AllowN, ReserveN, and WaitN consume n tokens.
|
||||||
|
//
|
||||||
|
// Limiter is safe for simultaneous use by multiple goroutines.
|
||||||
type Limiter struct {
|
type Limiter struct {
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
limit Limit
|
limit Limit
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,4 @@
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
// Version is the current tagged release of the library.
|
// Version is the current tagged release of the library.
|
||||||
const Version = "0.151.0"
|
const Version = "0.152.0"
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
# cloud.google.com/go v0.110.8
|
# cloud.google.com/go v0.110.10
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/internal
|
cloud.google.com/go/internal
|
||||||
cloud.google.com/go/internal/optional
|
cloud.google.com/go/internal/optional
|
||||||
cloud.google.com/go/internal/trace
|
cloud.google.com/go/internal/trace
|
||||||
cloud.google.com/go/internal/version
|
cloud.google.com/go/internal/version
|
||||||
# cloud.google.com/go/compute v1.23.1
|
# cloud.google.com/go/compute v1.23.3
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/compute/internal
|
cloud.google.com/go/compute/internal
|
||||||
# cloud.google.com/go/compute/metadata v0.2.3
|
# cloud.google.com/go/compute/metadata v0.2.3
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/compute/metadata
|
cloud.google.com/go/compute/metadata
|
||||||
# cloud.google.com/go/iam v1.1.3
|
# cloud.google.com/go/iam v1.1.5
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/iam
|
cloud.google.com/go/iam
|
||||||
cloud.google.com/go/iam/apiv1/iampb
|
cloud.google.com/go/iam/apiv1/iampb
|
||||||
# cloud.google.com/go/storage v1.33.0
|
# cloud.google.com/go/storage v1.35.1
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/storage
|
cloud.google.com/go/storage
|
||||||
cloud.google.com/go/storage/internal
|
cloud.google.com/go/storage/internal
|
||||||
|
|
@ -804,8 +804,8 @@ github.com/sirupsen/logrus
|
||||||
# github.com/skeema/knownhosts v1.2.0
|
# github.com/skeema/knownhosts v1.2.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
github.com/skeema/knownhosts
|
github.com/skeema/knownhosts
|
||||||
# github.com/spf13/afero v1.10.0
|
# github.com/spf13/afero v1.11.0
|
||||||
## explicit; go 1.16
|
## explicit; go 1.19
|
||||||
github.com/spf13/afero
|
github.com/spf13/afero
|
||||||
github.com/spf13/afero/internal/common
|
github.com/spf13/afero/internal/common
|
||||||
github.com/spf13/afero/mem
|
github.com/spf13/afero/mem
|
||||||
|
|
@ -866,7 +866,7 @@ go.opencensus.io/trace/propagation
|
||||||
go.opencensus.io/trace/tracestate
|
go.opencensus.io/trace/tracestate
|
||||||
# go.uber.org/goleak v1.2.1
|
# go.uber.org/goleak v1.2.1
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
# golang.org/x/crypto v0.15.0
|
# golang.org/x/crypto v0.16.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/crypto/argon2
|
golang.org/x/crypto/argon2
|
||||||
golang.org/x/crypto/blake2b
|
golang.org/x/crypto/blake2b
|
||||||
|
|
@ -891,7 +891,7 @@ golang.org/x/crypto/ssh/knownhosts
|
||||||
# golang.org/x/mod v0.12.0
|
# golang.org/x/mod v0.12.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/mod/semver
|
golang.org/x/mod/semver
|
||||||
# golang.org/x/net v0.18.0
|
# golang.org/x/net v0.19.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/net/context
|
golang.org/x/net/context
|
||||||
golang.org/x/net/http/httpguts
|
golang.org/x/net/http/httpguts
|
||||||
|
|
@ -903,7 +903,7 @@ golang.org/x/net/internal/socks
|
||||||
golang.org/x/net/internal/timeseries
|
golang.org/x/net/internal/timeseries
|
||||||
golang.org/x/net/proxy
|
golang.org/x/net/proxy
|
||||||
golang.org/x/net/trace
|
golang.org/x/net/trace
|
||||||
# golang.org/x/oauth2 v0.14.0
|
# golang.org/x/oauth2 v0.15.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/oauth2
|
golang.org/x/oauth2
|
||||||
golang.org/x/oauth2/authhandler
|
golang.org/x/oauth2/authhandler
|
||||||
|
|
@ -919,7 +919,7 @@ golang.org/x/oauth2/jwt
|
||||||
golang.org/x/sync/errgroup
|
golang.org/x/sync/errgroup
|
||||||
golang.org/x/sync/semaphore
|
golang.org/x/sync/semaphore
|
||||||
golang.org/x/sync/syncmap
|
golang.org/x/sync/syncmap
|
||||||
# golang.org/x/sys v0.14.0
|
# golang.org/x/sys v0.15.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/sys/cpu
|
golang.org/x/sys/cpu
|
||||||
golang.org/x/sys/execabs
|
golang.org/x/sys/execabs
|
||||||
|
|
@ -933,8 +933,8 @@ golang.org/x/text/secure/bidirule
|
||||||
golang.org/x/text/transform
|
golang.org/x/text/transform
|
||||||
golang.org/x/text/unicode/bidi
|
golang.org/x/text/unicode/bidi
|
||||||
golang.org/x/text/unicode/norm
|
golang.org/x/text/unicode/norm
|
||||||
# golang.org/x/time v0.3.0
|
# golang.org/x/time v0.5.0
|
||||||
## explicit
|
## explicit; go 1.18
|
||||||
golang.org/x/time/rate
|
golang.org/x/time/rate
|
||||||
# golang.org/x/tools v0.13.0
|
# golang.org/x/tools v0.13.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
|
|
@ -959,7 +959,7 @@ golang.org/x/tools/internal/typesinternal
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/xerrors
|
golang.org/x/xerrors
|
||||||
golang.org/x/xerrors/internal
|
golang.org/x/xerrors/internal
|
||||||
# google.golang.org/api v0.151.0
|
# google.golang.org/api v0.152.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/api/googleapi
|
google.golang.org/api/googleapi
|
||||||
google.golang.org/api/googleapi/transport
|
google.golang.org/api/googleapi/transport
|
||||||
|
|
@ -989,16 +989,16 @@ google.golang.org/appengine/internal/modules
|
||||||
google.golang.org/appengine/internal/remote_api
|
google.golang.org/appengine/internal/remote_api
|
||||||
google.golang.org/appengine/internal/urlfetch
|
google.golang.org/appengine/internal/urlfetch
|
||||||
google.golang.org/appengine/urlfetch
|
google.golang.org/appengine/urlfetch
|
||||||
# google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b
|
# google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/genproto/googleapis/type/date
|
google.golang.org/genproto/googleapis/type/date
|
||||||
google.golang.org/genproto/googleapis/type/expr
|
google.golang.org/genproto/googleapis/type/expr
|
||||||
google.golang.org/genproto/internal
|
google.golang.org/genproto/internal
|
||||||
# google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b
|
# google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/genproto/googleapis/api
|
google.golang.org/genproto/googleapis/api
|
||||||
google.golang.org/genproto/googleapis/api/annotations
|
google.golang.org/genproto/googleapis/api/annotations
|
||||||
# google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405
|
# google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/genproto/googleapis/rpc/code
|
google.golang.org/genproto/googleapis/rpc/code
|
||||||
google.golang.org/genproto/googleapis/rpc/errdetails
|
google.golang.org/genproto/googleapis/rpc/errdetails
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue