chore(deps): bump cloud.google.com/go/storage from 1.30.1 to 1.31.0 (#2611)
Bumps [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) from 1.30.1 to 1.31.0. - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.30.1...pubsub/v1.31.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage 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
							
								
									9a30501c44
								
							
						
					
					
						commit
						27300967a0
					
				
							
								
								
									
										8
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										8
									
								
								go.mod
								
								
								
								
							|  | @ -3,7 +3,7 @@ module github.com/GoogleContainerTools/kaniko | |||
| go 1.19 | ||||
| 
 | ||||
| require ( | ||||
| 	cloud.google.com/go/storage v1.30.1 | ||||
| 	cloud.google.com/go/storage v1.31.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. | ||||
| 	// See https://github.com/GoogleCloudPlatform/docker-credential-gcr/issues/128 | ||||
|  | @ -48,10 +48,10 @@ require ( | |||
| ) | ||||
| 
 | ||||
| require ( | ||||
| 	cloud.google.com/go v0.110.0 // indirect | ||||
| 	cloud.google.com/go v0.110.2 // indirect | ||||
| 	cloud.google.com/go/compute v1.19.3 // indirect | ||||
| 	cloud.google.com/go/compute/metadata v0.2.3 // indirect | ||||
| 	cloud.google.com/go/iam v0.13.0 // indirect | ||||
| 	cloud.google.com/go/iam v1.1.0 // 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-autorest v14.2.0+incompatible // indirect | ||||
|  | @ -106,7 +106,7 @@ require ( | |||
| 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||||
| 	github.com/golang/protobuf v1.5.3 // indirect | ||||
| 	github.com/google/uuid v1.3.0 // indirect | ||||
| 	github.com/googleapis/gax-go/v2 v2.10.0 // indirect | ||||
| 	github.com/googleapis/gax-go/v2 v2.11.0 // indirect | ||||
| 	github.com/hashicorp/go-immutable-radix v1.3.1 // indirect | ||||
| 	github.com/hashicorp/go-memdb v1.3.2 // indirect | ||||
| 	github.com/hashicorp/golang-lru v0.5.4 // indirect | ||||
|  |  | |||
							
								
								
									
										16
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										16
									
								
								go.sum
								
								
								
								
							|  | @ -20,8 +20,8 @@ cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPT | |||
| 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.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= | ||||
| cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= | ||||
| cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= | ||||
| cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA= | ||||
| cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= | ||||
| 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.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= | ||||
|  | @ -35,8 +35,8 @@ cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2Aawl | |||
| 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/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= | ||||
| cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= | ||||
| cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= | ||||
| cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= | ||||
| cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= | ||||
| 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.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= | ||||
|  | @ -47,8 +47,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl | |||
| 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.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= | ||||
| cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= | ||||
| cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= | ||||
| cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= | ||||
| cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= | ||||
| dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= | ||||
| github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= | ||||
| github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= | ||||
|  | @ -387,8 +387,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+ | |||
| github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= | ||||
| github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | ||||
| github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= | ||||
| github.com/googleapis/gax-go/v2 v2.10.0 h1:ebSgKfMxynOdxw8QQuFOKMgomqeLGPqNLQox2bo42zg= | ||||
| github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= | ||||
| github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= | ||||
| github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= | ||||
| 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/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
|  |  | |||
|  | @ -1,5 +1,27 @@ | |||
| # Changes | ||||
| 
 | ||||
| 
 | ||||
| ## [1.1.0](https://github.com/googleapis/google-cloud-go/compare/iam/v1.0.1...iam/v1.1.0) (2023-05-30) | ||||
| 
 | ||||
| 
 | ||||
| ### Features | ||||
| 
 | ||||
| * **iam:** Update all direct dependencies ([b340d03](https://github.com/googleapis/google-cloud-go/commit/b340d030f2b52a4ce48846ce63984b28583abde6)) | ||||
| 
 | ||||
| ## [1.0.1](https://github.com/googleapis/google-cloud-go/compare/iam/v1.0.0...iam/v1.0.1) (2023-05-08) | ||||
| 
 | ||||
| 
 | ||||
| ### Bug Fixes | ||||
| 
 | ||||
| * **iam:** Update grpc to v1.55.0 ([1147ce0](https://github.com/googleapis/google-cloud-go/commit/1147ce02a990276ca4f8ab7a1ab65c14da4450ef)) | ||||
| 
 | ||||
| ## [1.0.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.13.0...iam/v1.0.0) (2023-04-04) | ||||
| 
 | ||||
| 
 | ||||
| ### Features | ||||
| 
 | ||||
| * **iam:** Promote to GA ([#7627](https://github.com/googleapis/google-cloud-go/issues/7627)) ([b351906](https://github.com/googleapis/google-cloud-go/commit/b351906a10e17a02d7f7e2551bc1585fd9dc3742)) | ||||
| 
 | ||||
| ## [0.13.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.12.0...iam/v0.13.0) (2023-03-15) | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,8 +14,8 @@ | |||
| 
 | ||||
| // Code generated by protoc-gen-go. DO NOT EDIT.
 | ||||
| // versions:
 | ||||
| // 	protoc-gen-go v1.26.0
 | ||||
| // 	protoc        v3.21.9
 | ||||
| // 	protoc-gen-go v1.30.0
 | ||||
| // 	protoc        v4.23.1
 | ||||
| // source: google/iam/v1/iam_policy.proto
 | ||||
| 
 | ||||
| package iampb | ||||
|  | @ -342,37 +342,37 @@ var file_google_iam_v1_iam_policy_proto_rawDesc = []byte{ | |||
| 	0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, | ||||
| 	0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, | ||||
| 	0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, | ||||
| 	0x02, 0x23, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, | ||||
| 	0x63, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, | ||||
| 	0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, | ||||
| 	0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, | ||||
| 	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x74, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, | ||||
| 	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, | ||||
| 	0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, | ||||
| 	0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, | ||||
| 	0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, | ||||
| 	0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, | ||||
| 	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x67, 0x65, 0x74, 0x49, | ||||
| 	0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x12, | ||||
| 	0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, | ||||
| 	0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x67, | ||||
| 	0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x9a, 0x01, 0x0a, 0x12, | ||||
| 	0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, | ||||
| 	0x6e, 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, | ||||
| 	0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, | ||||
| 	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, | ||||
| 	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, | ||||
| 	0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, | ||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, | ||||
| 	0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, | ||||
| 	0x2a, 0x7d, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, | ||||
| 	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x1a, 0x1e, 0xca, 0x41, 0x1b, 0x69, 0x61, 0x6d, | ||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, | ||||
| 	0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, | ||||
| 	0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1e, 0xca, 0x41, 0x1b, 0x69, 0x61, 0x6d, | ||||
| 	0x2d, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, | ||||
| 	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0x86, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, | ||||
| 	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0e, | ||||
| 	0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, | ||||
| 	0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, | ||||
| 	0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, | ||||
| 	0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69, | ||||
| 	0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, | ||||
| 	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, | ||||
| 	0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, | ||||
| 	0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| 	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0x7f, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, | ||||
| 	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x49, | ||||
| 	0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, | ||||
| 	0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, | ||||
| 	0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69, | ||||
| 	0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, | ||||
| 	0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, | ||||
| 	0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, | ||||
| 	0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||
| 	0x33, | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
|  |  | |||
|  | @ -14,8 +14,8 @@ | |||
| 
 | ||||
| // Code generated by protoc-gen-go. DO NOT EDIT.
 | ||||
| // versions:
 | ||||
| // 	protoc-gen-go v1.26.0
 | ||||
| // 	protoc        v3.21.9
 | ||||
| // 	protoc-gen-go v1.30.0
 | ||||
| // 	protoc        v4.23.1
 | ||||
| // source: google/iam/v1/options.proto
 | ||||
| 
 | ||||
| package iampb | ||||
|  | @ -111,16 +111,16 @@ var file_google_iam_v1_options_proto_rawDesc = []byte{ | |||
| 	0x12, 0x38, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x6f, | ||||
| 	0x6c, 0x69, 0x63, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, | ||||
| 	0x28, 0x05, 0x52, 0x16, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x6c, | ||||
| 	0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x84, 0x01, 0x0a, 0x11, 0x63, | ||||
| 	0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, | ||||
| 	0x42, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, | ||||
| 	0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, | ||||
| 	0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, | ||||
| 	0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69, | ||||
| 	0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, | ||||
| 	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, | ||||
| 	0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, | ||||
| 	0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| 	0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x7d, 0x0a, 0x11, 0x63, 0x6f, | ||||
| 	0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, | ||||
| 	0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, | ||||
| 	0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, | ||||
| 	0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69, | ||||
| 	0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, | ||||
| 	0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, | ||||
| 	0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, | ||||
| 	0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||
| 	0x33, | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
|  |  | |||
|  | @ -14,8 +14,8 @@ | |||
| 
 | ||||
| // Code generated by protoc-gen-go. DO NOT EDIT.
 | ||||
| // versions:
 | ||||
| // 	protoc-gen-go v1.26.0
 | ||||
| // 	protoc        v3.21.9
 | ||||
| // 	protoc-gen-go v1.30.0
 | ||||
| // 	protoc        v4.23.1
 | ||||
| // source: google/iam/v1/policy.proto
 | ||||
| 
 | ||||
| package iampb | ||||
|  | @ -214,7 +214,8 @@ func (AuditConfigDelta_Action) EnumDescriptor() ([]byte, []int) { | |||
| // only if the expression evaluates to `true`. A condition can add constraints
 | ||||
| // based on attributes of the request, the resource, or both. To learn which
 | ||||
| // resources support conditions in their IAM policies, see the
 | ||||
| // [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
 | ||||
| // [IAM
 | ||||
| // documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
 | ||||
| //
 | ||||
| // **JSON example:**
 | ||||
| //
 | ||||
|  | @ -237,7 +238,8 @@ func (AuditConfigDelta_Action) EnumDescriptor() ([]byte, []int) { | |||
| //	      "condition": {
 | ||||
| //	        "title": "expirable access",
 | ||||
| //	        "description": "Does not grant access after Sep 2020",
 | ||||
| //	        "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
 | ||||
| //	        "expression": "request.time <
 | ||||
| //	        timestamp('2020-10-01T00:00:00.000Z')",
 | ||||
| //	      }
 | ||||
| //	    }
 | ||||
| //	  ],
 | ||||
|  | @ -279,10 +281,10 @@ type Policy struct { | |||
| 	// Any operation that affects conditional role bindings must specify version
 | ||||
| 	// `3`. This requirement applies to the following operations:
 | ||||
| 	//
 | ||||
| 	//   - Getting a policy that includes a conditional role binding
 | ||||
| 	//   - Adding a conditional role binding to a policy
 | ||||
| 	//   - Changing a conditional role binding in a policy
 | ||||
| 	//   - Removing any role binding, with or without a condition, from a policy
 | ||||
| 	// * Getting a policy that includes a conditional role binding
 | ||||
| 	// * Adding a conditional role binding to a policy
 | ||||
| 	// * Changing a conditional role binding in a policy
 | ||||
| 	// * Removing any role binding, with or without a condition, from a policy
 | ||||
| 	//   that includes conditions
 | ||||
| 	//
 | ||||
| 	// **Important:** If you use IAM Conditions, you must include the `etag` field
 | ||||
|  | @ -294,7 +296,8 @@ type Policy struct { | |||
| 	// specify any valid version or leave the field unset.
 | ||||
| 	//
 | ||||
| 	// To learn which resources support conditions in their IAM policies, see the
 | ||||
| 	// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
 | ||||
| 	// [IAM
 | ||||
| 	// documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
 | ||||
| 	Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` | ||||
| 	// Associates a list of `members`, or principals, with a `role`. Optionally,
 | ||||
| 	// may specify a `condition` that determines how and when the `bindings` are
 | ||||
|  | @ -396,28 +399,29 @@ type Binding struct { | |||
| 	// Specifies the principals requesting access for a Cloud Platform resource.
 | ||||
| 	// `members` can have the following values:
 | ||||
| 	//
 | ||||
| 	//   - `allUsers`: A special identifier that represents anyone who is
 | ||||
| 	// * `allUsers`: A special identifier that represents anyone who is
 | ||||
| 	//    on the internet; with or without a Google account.
 | ||||
| 	//
 | ||||
| 	//   - `allAuthenticatedUsers`: A special identifier that represents anyone
 | ||||
| 	// * `allAuthenticatedUsers`: A special identifier that represents anyone
 | ||||
| 	//    who is authenticated with a Google account or a service account.
 | ||||
| 	//
 | ||||
| 	//   - `user:{emailid}`: An email address that represents a specific Google
 | ||||
| 	// * `user:{emailid}`: An email address that represents a specific Google
 | ||||
| 	//    account. For example, `alice@example.com` .
 | ||||
| 	//
 | ||||
| 	//   - `serviceAccount:{emailid}`: An email address that represents a service
 | ||||
| 	//
 | ||||
| 	// * `serviceAccount:{emailid}`: An email address that represents a service
 | ||||
| 	//    account. For example, `my-other-app@appspot.gserviceaccount.com`.
 | ||||
| 	//
 | ||||
| 	//   - `group:{emailid}`: An email address that represents a Google group.
 | ||||
| 	// * `group:{emailid}`: An email address that represents a Google group.
 | ||||
| 	//    For example, `admins@example.com`.
 | ||||
| 	//
 | ||||
| 	//   - `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique
 | ||||
| 	// * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique
 | ||||
| 	//    identifier) representing a user that has been recently deleted. For
 | ||||
| 	//    example, `alice@example.com?uid=123456789012345678901`. If the user is
 | ||||
| 	//    recovered, this value reverts to `user:{emailid}` and the recovered user
 | ||||
| 	//    retains the role in the binding.
 | ||||
| 	//
 | ||||
| 	//   - `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus
 | ||||
| 	// * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus
 | ||||
| 	//    unique identifier) representing a service account that has been recently
 | ||||
| 	//    deleted. For example,
 | ||||
| 	//    `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`.
 | ||||
|  | @ -425,14 +429,17 @@ type Binding struct { | |||
| 	//    `serviceAccount:{emailid}` and the undeleted service account retains the
 | ||||
| 	//    role in the binding.
 | ||||
| 	//
 | ||||
| 	//   - `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique
 | ||||
| 	// * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique
 | ||||
| 	//    identifier) representing a Google group that has been recently
 | ||||
| 	//    deleted. For example, `admins@example.com?uid=123456789012345678901`. If
 | ||||
| 	//    the group is recovered, this value reverts to `group:{emailid}` and the
 | ||||
| 	//    recovered group retains the role in the binding.
 | ||||
| 	//
 | ||||
| 	//   - `domain:{domain}`: The G Suite domain (primary) that represents all the
 | ||||
| 	//
 | ||||
| 	// * `domain:{domain}`: The G Suite domain (primary) that represents all the
 | ||||
| 	//    users of that domain. For example, `google.com` or `example.com`.
 | ||||
| 	//
 | ||||
| 	//
 | ||||
| 	Members []string `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"` | ||||
| 	// The condition that is associated with this binding.
 | ||||
| 	//
 | ||||
|  | @ -640,7 +647,8 @@ type AuditLogConfig struct { | |||
| 	LogType AuditLogConfig_LogType `protobuf:"varint,1,opt,name=log_type,json=logType,proto3,enum=google.iam.v1.AuditLogConfig_LogType" json:"log_type,omitempty"` | ||||
| 	// Specifies the identities that do not cause logging for this type of
 | ||||
| 	// permission.
 | ||||
| 	// Follows the same format of [Binding.members][google.iam.v1.Binding.members].
 | ||||
| 	// Follows the same format of
 | ||||
| 	// [Binding.members][google.iam.v1.Binding.members].
 | ||||
| 	ExemptedMembers []string `protobuf:"bytes,2,rep,name=exempted_members,json=exemptedMembers,proto3" json:"exempted_members,omitempty"` | ||||
| } | ||||
| 
 | ||||
|  | @ -999,16 +1007,15 @@ var file_google_iam_v1_policy_proto_rawDesc = []byte{ | |||
| 	0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, | ||||
| 	0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, | ||||
| 	0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, | ||||
| 	0x45, 0x10, 0x02, 0x42, 0x83, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, | ||||
| 	0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, | ||||
| 	0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, | ||||
| 	0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, | ||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, | ||||
| 	0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, | ||||
| 	0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, | ||||
| 	0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, | ||||
| 	0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||
| 	0x33, | ||||
| 	0x45, 0x10, 0x02, 0x42, 0x7c, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, | ||||
| 	0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, | ||||
| 	0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, | ||||
| 	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d, | ||||
| 	0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69, 0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d, | ||||
| 	0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, | ||||
| 	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, | ||||
| 	0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, | ||||
| 	0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -19,25 +19,26 @@ metadata required. For now, `.repo-metadata-full.json` includes everything. | |||
| 
 | ||||
| ## cloudbuild.yaml | ||||
| 
 | ||||
| To kick off a build locally run from the repo root: | ||||
| The `cloudbuild.yaml` Cloud Build configuration currently supports: | ||||
| 
 | ||||
| * Building a docker container from the `internal/postprocessor/Dockerfile`. | ||||
| 
 | ||||
| The build can be run locally in the `google-cloud-go` root directory: | ||||
| 
 | ||||
| ```bash | ||||
| gcloud builds submit --project=cloud-devrel-kokoro-resources --config=internal/cloudbuild.yaml | ||||
| ``` | ||||
| 
 | ||||
| See the [postprocessor/README](postprocessor/README.md) for instructions | ||||
| regarding updating the post-processor docker container. | ||||
| 
 | ||||
| ### Updating OwlBot SHA | ||||
| 
 | ||||
| You may want to manually update the which version of the post processor will be | ||||
| used -- to do this you need to update the SHA in the OwlBot lock file. Start by | ||||
| running the following commands: | ||||
| You may want to manually update the which version of the post-processor will be | ||||
| used -- to do this you need to update the SHA in the OwlBot lock file. | ||||
| 
 | ||||
| ```bash | ||||
| docker pull gcr.io/cloud-devrel-public-resources/owlbot-go:latest | ||||
| docker inspect --format='{{index .RepoDigests 0}}' gcr.io/cloud-devrel-public-resources/owlbot-go:latest | ||||
| ``` | ||||
| 
 | ||||
| This will give you a SHA. You can use this value to update the value in | ||||
| `.github/.OwlBot.lock.yaml`. | ||||
| See the [postprocessor/README](postprocessor/README.md) for detailed | ||||
| instructions. | ||||
| 
 | ||||
| *Note*: OwlBot will eventually open a pull request to update this value if it | ||||
| discovers a new version of the container. | ||||
|  |  | |||
|  | @ -1,6 +1,35 @@ | |||
| # Changes | ||||
| 
 | ||||
| 
 | ||||
| ## [1.31.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.30.1...storage/v1.31.0) (2023-06-27) | ||||
| 
 | ||||
| 
 | ||||
| ### Features | ||||
| 
 | ||||
| * **storage/internal:** Add ctype=CORD for ChecksummedData.content ([ca94e27](https://github.com/googleapis/google-cloud-go/commit/ca94e2724f9e2610b46aefd0a3b5ddc06102e91b)) | ||||
| * **storage:** Add support for MatchGlob ([#8097](https://github.com/googleapis/google-cloud-go/issues/8097)) ([9426a5a](https://github.com/googleapis/google-cloud-go/commit/9426a5a45d4c2fd07f84261f6d602680e79cdc48)), refs [#7727](https://github.com/googleapis/google-cloud-go/issues/7727) [#7728](https://github.com/googleapis/google-cloud-go/issues/7728) | ||||
| * **storage:** Respect WithEndpoint for SignedURLs and PostPolicy ([#8113](https://github.com/googleapis/google-cloud-go/issues/8113)) ([f918f23](https://github.com/googleapis/google-cloud-go/commit/f918f23a3cda4fbc8d709e32b914ead8b735d664)) | ||||
| * **storage:** Update all direct dependencies ([b340d03](https://github.com/googleapis/google-cloud-go/commit/b340d030f2b52a4ce48846ce63984b28583abde6)) | ||||
| 
 | ||||
| 
 | ||||
| ### Bug Fixes | ||||
| 
 | ||||
| * **storage:** Fix CreateBucket logic for gRPC ([#8165](https://github.com/googleapis/google-cloud-go/issues/8165)) ([8424e7e](https://github.com/googleapis/google-cloud-go/commit/8424e7e145a117c91006318fa924a8b2643c1c7e)), refs [#8162](https://github.com/googleapis/google-cloud-go/issues/8162) | ||||
| * **storage:** Fix reads with "./" in object names [XML] ([#8017](https://github.com/googleapis/google-cloud-go/issues/8017)) ([6b7b21f](https://github.com/googleapis/google-cloud-go/commit/6b7b21f8a334b6ad3a25e1f66ae1265b4d1f0995)) | ||||
| * **storage:** Fix routing header for writes ([#8159](https://github.com/googleapis/google-cloud-go/issues/8159)) ([42a59f5](https://github.com/googleapis/google-cloud-go/commit/42a59f5a23ab9b4743ab032ad92304922c801d93)), refs [#8142](https://github.com/googleapis/google-cloud-go/issues/8142) [#8143](https://github.com/googleapis/google-cloud-go/issues/8143) [#8144](https://github.com/googleapis/google-cloud-go/issues/8144) [#8145](https://github.com/googleapis/google-cloud-go/issues/8145) [#8149](https://github.com/googleapis/google-cloud-go/issues/8149) | ||||
| * **storage:** REST query UpdateMask bug ([df52820](https://github.com/googleapis/google-cloud-go/commit/df52820b0e7721954809a8aa8700b93c5662dc9b)) | ||||
| * **storage:** Update grpc to v1.55.0 ([1147ce0](https://github.com/googleapis/google-cloud-go/commit/1147ce02a990276ca4f8ab7a1ab65c14da4450ef)) | ||||
| 
 | ||||
| 
 | ||||
| ### Documentation | ||||
| 
 | ||||
| * **storage/internal:** Clarifications about behavior of DeleteObject RPC ([3f1ed9c](https://github.com/googleapis/google-cloud-go/commit/3f1ed9c63fb115f47607a3ab478842fe5ba0df11)) | ||||
| * **storage/internal:** Clarified the behavior of supplying bucket.name field in CreateBucket to reflect actual implementation ([ebae64d](https://github.com/googleapis/google-cloud-go/commit/ebae64d53397ec5dfe851f098754eaa1f5df7cb1)) | ||||
| * **storage/internal:** Revert ChecksummedData message definition not to specify ctype=CORD, because it would be a breaking change. ([ef61e47](https://github.com/googleapis/google-cloud-go/commit/ef61e4799280a355b960da8ae240ceb2efbe71ac)) | ||||
| * **storage/internal:** Update routing annotations for CancelResumableWriteRequest and QueryWriteStatusRequest ([4900851](https://github.com/googleapis/google-cloud-go/commit/49008518e168fe6f7891b907d6fc14eecdef758c)) | ||||
| * **storage/internal:** Updated ChecksummedData message definition to specify ctype=CORD, and removed incorrect earlier attempt that set that annotation in the ReadObjectResponse message definition ([ef61e47](https://github.com/googleapis/google-cloud-go/commit/ef61e4799280a355b960da8ae240ceb2efbe71ac)) | ||||
| * **storage:** WithXMLReads should mention XML instead of JSON API ([#7881](https://github.com/googleapis/google-cloud-go/issues/7881)) ([36f56c8](https://github.com/googleapis/google-cloud-go/commit/36f56c80c456ca74ffc03df76844ce15980ced82)) | ||||
| 
 | ||||
| ## [1.30.1](https://github.com/googleapis/google-cloud-go/compare/storage/v1.30.0...storage/v1.30.1) (2023-03-21) | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ import ( | |||
| 	"reflect" | ||||
| 
 | ||||
| 	"cloud.google.com/go/internal/trace" | ||||
| 	storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" | ||||
| 	"cloud.google.com/go/storage/internal/apiv2/storagepb" | ||||
| 	raw "google.golang.org/api/storage/v1" | ||||
| ) | ||||
| 
 | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ import ( | |||
| 	"cloud.google.com/go/compute/metadata" | ||||
| 	"cloud.google.com/go/internal/optional" | ||||
| 	"cloud.google.com/go/internal/trace" | ||||
| 	storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" | ||||
| 	"cloud.google.com/go/storage/internal/apiv2/storagepb" | ||||
| 	"google.golang.org/api/googleapi" | ||||
| 	"google.golang.org/api/iamcredentials/v1" | ||||
| 	"google.golang.org/api/iterator" | ||||
|  | @ -173,12 +173,18 @@ func (b *BucketHandle) Update(ctx context.Context, uattrs BucketAttrsToUpdate) ( | |||
| // [Overview of access control]: https://cloud.google.com/storage/docs/accesscontrol#signed_urls_query_string_authentication
 | ||||
| // [automatic detection of credentials]: https://pkg.go.dev/cloud.google.com/go/storage#hdr-Credential_requirements_for_signing
 | ||||
| func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string, error) { | ||||
| 	if opts.GoogleAccessID != "" && (opts.SignBytes != nil || len(opts.PrivateKey) > 0) { | ||||
| 		return SignedURL(b.name, object, opts) | ||||
| 	} | ||||
| 	// Make a copy of opts so we don't modify the pointer parameter.
 | ||||
| 	newopts := opts.clone() | ||||
| 
 | ||||
| 	if newopts.Hostname == "" { | ||||
| 		// Extract the correct host from the readhost set on the client
 | ||||
| 		newopts.Hostname = b.c.xmlHost | ||||
| 	} | ||||
| 
 | ||||
| 	if opts.GoogleAccessID != "" && (opts.SignBytes != nil || len(opts.PrivateKey) > 0) { | ||||
| 		return SignedURL(b.name, object, newopts) | ||||
| 	} | ||||
| 
 | ||||
| 	if newopts.GoogleAccessID == "" { | ||||
| 		id, err := b.detectDefaultGoogleAccessID() | ||||
| 		if err != nil { | ||||
|  | @ -215,12 +221,18 @@ func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string, | |||
| //
 | ||||
| // [automatic detection of credentials]: https://pkg.go.dev/cloud.google.com/go/storage#hdr-Credential_requirements_for_signing
 | ||||
| func (b *BucketHandle) GenerateSignedPostPolicyV4(object string, opts *PostPolicyV4Options) (*PostPolicyV4, error) { | ||||
| 	if opts.GoogleAccessID != "" && (opts.SignRawBytes != nil || opts.SignBytes != nil || len(opts.PrivateKey) > 0) { | ||||
| 		return GenerateSignedPostPolicyV4(b.name, object, opts) | ||||
| 	} | ||||
| 	// Make a copy of opts so we don't modify the pointer parameter.
 | ||||
| 	newopts := opts.clone() | ||||
| 
 | ||||
| 	if newopts.Hostname == "" { | ||||
| 		// Extract the correct host from the readhost set on the client
 | ||||
| 		newopts.Hostname = b.c.xmlHost | ||||
| 	} | ||||
| 
 | ||||
| 	if opts.GoogleAccessID != "" && (opts.SignRawBytes != nil || opts.SignBytes != nil || len(opts.PrivateKey) > 0) { | ||||
| 		return GenerateSignedPostPolicyV4(b.name, object, newopts) | ||||
| 	} | ||||
| 
 | ||||
| 	if newopts.GoogleAccessID == "" { | ||||
| 		id, err := b.detectDefaultGoogleAccessID() | ||||
| 		if err != nil { | ||||
|  | @ -921,8 +933,6 @@ func (ua *BucketAttrsToUpdate) toProtoBucket() *storagepb.Bucket { | |||
| 		return &storagepb.Bucket{} | ||||
| 	} | ||||
| 
 | ||||
| 	// TODO(cathyo): Handle labels. Pending b/230510191.
 | ||||
| 
 | ||||
| 	var v *storagepb.Bucket_Versioning | ||||
| 	if ua.VersioningEnabled != nil { | ||||
| 		v = &storagepb.Bucket_Versioning{Enabled: optional.ToBool(ua.VersioningEnabled)} | ||||
|  | @ -996,6 +1006,7 @@ func (ua *BucketAttrsToUpdate) toProtoBucket() *storagepb.Bucket { | |||
| 		IamConfig:             bktIAM, | ||||
| 		Rpo:                   ua.RPO.String(), | ||||
| 		Autoclass:             ua.Autoclass.toProtoAutoclass(), | ||||
| 		Labels:                ua.setLabels, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -1264,7 +1275,9 @@ func (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket { | |||
| } | ||||
| 
 | ||||
| // If returns a new BucketHandle that applies a set of preconditions.
 | ||||
| // Preconditions already set on the BucketHandle are ignored.
 | ||||
| // Preconditions already set on the BucketHandle are ignored. The supplied
 | ||||
| // BucketConditions must have exactly one field set to a non-zero value;
 | ||||
| // otherwise an error will be returned from any operation on the BucketHandle.
 | ||||
| // Operations on the new handle will return an error if the preconditions are not
 | ||||
| // satisfied. The only valid preconditions for buckets are MetagenerationMatch
 | ||||
| // and MetagenerationNotMatch.
 | ||||
|  |  | |||
|  | @ -26,8 +26,9 @@ import ( | |||
| 	"cloud.google.com/go/iam/apiv1/iampb" | ||||
| 	"cloud.google.com/go/internal/trace" | ||||
| 	gapic "cloud.google.com/go/storage/internal/apiv2" | ||||
| 	storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" | ||||
| 	"cloud.google.com/go/storage/internal/apiv2/storagepb" | ||||
| 	"github.com/googleapis/gax-go/v2" | ||||
| 	"google.golang.org/api/googleapi" | ||||
| 	"google.golang.org/api/iterator" | ||||
| 	"google.golang.org/api/option" | ||||
| 	"google.golang.org/api/option/internaloption" | ||||
|  | @ -153,7 +154,7 @@ func (c *grpcStorageClient) GetServiceAccount(ctx context.Context, project strin | |||
| func (c *grpcStorageClient) CreateBucket(ctx context.Context, project, bucket string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) { | ||||
| 	s := callSettings(c.settings, opts...) | ||||
| 	b := attrs.toProtoBucket() | ||||
| 	b.Name = bucket | ||||
| 	b.Project = toProjectResource(project) | ||||
| 	// If there is lifecycle information but no location, explicitly set
 | ||||
| 	// the location. This is a GCS quirk/bug.
 | ||||
| 	if b.GetLocation() == "" && b.GetLifecycle() != nil { | ||||
|  | @ -161,9 +162,9 @@ func (c *grpcStorageClient) CreateBucket(ctx context.Context, project, bucket st | |||
| 	} | ||||
| 
 | ||||
| 	req := &storagepb.CreateBucketRequest{ | ||||
| 		Parent:   toProjectResource(project), | ||||
| 		Parent:   fmt.Sprintf("projects/%s", globalProjectAlias), | ||||
| 		Bucket:   b, | ||||
| 		BucketId: b.GetName(), | ||||
| 		BucketId: bucket, | ||||
| 	} | ||||
| 	if attrs != nil { | ||||
| 		req.PredefinedAcl = attrs.PredefinedACL | ||||
|  | @ -354,7 +355,16 @@ func (c *grpcStorageClient) UpdateBucket(ctx context.Context, bucket string, uat | |||
| 	if uattrs.Autoclass != nil { | ||||
| 		fieldMask.Paths = append(fieldMask.Paths, "autoclass") | ||||
| 	} | ||||
| 	// TODO(cathyo): Handle labels. Pending b/230510191.
 | ||||
| 
 | ||||
| 	for label := range uattrs.setLabels { | ||||
| 		fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("labels.%s", label)) | ||||
| 	} | ||||
| 
 | ||||
| 	// Delete a label by not including it in Bucket.Labels but adding the key to the update mask.
 | ||||
| 	for label := range uattrs.deleteLabels { | ||||
| 		fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("labels.%s", label)) | ||||
| 	} | ||||
| 
 | ||||
| 	req.UpdateMask = fieldMask | ||||
| 
 | ||||
| 	var battrs *BucketAttrs | ||||
|  | @ -404,6 +414,11 @@ func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Q | |||
| 	} | ||||
| 	gitr := c.raw.ListObjects(it.ctx, req, s.gax...) | ||||
| 	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 | ||||
| 		err = run(it.ctx, func() error { | ||||
| 			objects, token, err = gitr.InternalFetch(pageSize, pageToken) | ||||
|  | @ -540,7 +555,19 @@ func (c *grpcStorageClient) UpdateObject(ctx context.Context, bucket, object str | |||
| 	if uattrs.ACL != nil || len(uattrs.PredefinedACL) > 0 { | ||||
| 		fieldMask.Paths = append(fieldMask.Paths, "acl") | ||||
| 	} | ||||
| 	// TODO(cathyo): Handle metadata. Pending b/230510191.
 | ||||
| 
 | ||||
| 	if uattrs.Metadata != nil { | ||||
| 		// We don't support deleting a specific metadata key; metadata is deleted
 | ||||
| 		// as a whole if provided an empty map, so we do not use dot notation here
 | ||||
| 		if len(uattrs.Metadata) == 0 { | ||||
| 			fieldMask.Paths = append(fieldMask.Paths, "metadata") | ||||
| 		} else { | ||||
| 			// We can, however, use dot notation for adding keys
 | ||||
| 			for key := range uattrs.Metadata { | ||||
| 				fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("metadata.%s", key)) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	req.UpdateMask = fieldMask | ||||
| 
 | ||||
|  | @ -885,15 +912,8 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange | |||
| 
 | ||||
| 		req.ReadOffset = params.offset + seen | ||||
| 
 | ||||
| 		// A negative length means "read to the end of the object", but the
 | ||||
| 		// read_limit field it corresponds to uses zero to mean the same thing. Thus
 | ||||
| 		// we coerce the length to 0 to read to the end of the object.
 | ||||
| 		if params.length < 0 { | ||||
| 			params.length = 0 | ||||
| 		} | ||||
| 
 | ||||
| 		// Only set a ReadLimit if length is greater than zero, because zero
 | ||||
| 		// means read it all.
 | ||||
| 		// Only set a ReadLimit if length is greater than zero, because <= 0 means
 | ||||
| 		// to read it all.
 | ||||
| 		if params.length > 0 { | ||||
| 			req.ReadLimit = params.length - seen | ||||
| 		} | ||||
|  | @ -963,6 +983,7 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange | |||
| 			// client buffer for reading later.
 | ||||
| 			leftovers: msg.GetChecksummedData().GetContent(), | ||||
| 			settings:  s, | ||||
| 			zeroRange: params.length == 0, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
|  | @ -974,8 +995,15 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange | |||
| 		r.remain = size | ||||
| 	} | ||||
| 
 | ||||
| 	// For a zero-length request, explicitly close the stream and set remaining
 | ||||
| 	// bytes to zero.
 | ||||
| 	if params.length == 0 { | ||||
| 		r.remain = 0 | ||||
| 		r.reader.Close() | ||||
| 	} | ||||
| 
 | ||||
| 	// Only support checksums when reading an entire object, not a range.
 | ||||
| 	if checksums := msg.GetObjectChecksums(); checksums != nil && checksums.Crc32C != nil && params.offset == 0 && params.length == 0 { | ||||
| 	if checksums := msg.GetObjectChecksums(); checksums != nil && checksums.Crc32C != nil && params.offset == 0 && params.length < 0 { | ||||
| 		r.wantCRC = checksums.GetCrc32C() | ||||
| 		r.checkCRC = true | ||||
| 	} | ||||
|  | @ -1036,11 +1064,13 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage | |||
| 				pr.CloseWithError(err) | ||||
| 				return | ||||
| 			} | ||||
| 			// At this point, the current buffer has been uploaded. Capture the
 | ||||
| 			// committed offset here in case the upload was not finalized and
 | ||||
| 			// another chunk is to be uploaded.
 | ||||
| 			// At this point, the current buffer has been uploaded. For resumable
 | ||||
| 			// uploads, capture the committed offset here in case the upload was not
 | ||||
| 			// finalized and another chunk is to be uploaded.
 | ||||
| 			if gw.upid != "" { | ||||
| 				offset = off | ||||
| 				progress(offset) | ||||
| 			} | ||||
| 
 | ||||
| 			// When we are done reading data and the chunk has been finalized,
 | ||||
| 			// we are done.
 | ||||
|  | @ -1335,6 +1365,7 @@ type readStreamResponse struct { | |||
| 
 | ||||
| type gRPCReader struct { | ||||
| 	seen, size int64 | ||||
| 	zeroRange  bool | ||||
| 	stream     storagepb.Storage_ReadObjectClient | ||||
| 	reopen     func(seen int64) (*readStreamResponse, context.CancelFunc, error) | ||||
| 	leftovers  []byte | ||||
|  | @ -1344,7 +1375,12 @@ type gRPCReader struct { | |||
| 
 | ||||
| // Read reads bytes into the user's buffer from an open gRPC stream.
 | ||||
| func (r *gRPCReader) Read(p []byte) (int, error) { | ||||
| 	// No stream to read from, either never initiliazed or Close was called.
 | ||||
| 	// The entire object has been read by this reader, return EOF.
 | ||||
| 	if r.size == r.seen || r.zeroRange { | ||||
| 		return 0, io.EOF | ||||
| 	} | ||||
| 
 | ||||
| 	// No stream to read from, either never initialized or Close was called.
 | ||||
| 	// Note: There is a potential concurrency issue if multiple routines are
 | ||||
| 	// using the same reader. One encounters an error and the stream is closed
 | ||||
| 	// and then reopened while the other routine attempts to read from it.
 | ||||
|  | @ -1352,11 +1388,6 @@ func (r *gRPCReader) Read(p []byte) (int, error) { | |||
| 		return 0, fmt.Errorf("reader has been closed") | ||||
| 	} | ||||
| 
 | ||||
| 	// The entire object has been read by this reader, return EOF.
 | ||||
| 	if r.size != 0 && r.size == r.seen { | ||||
| 		return 0, io.EOF | ||||
| 	} | ||||
| 
 | ||||
| 	var n int | ||||
| 	// Read leftovers and return what was available to conform to the Reader
 | ||||
| 	// interface: https://pkg.go.dev/io#Reader.
 | ||||
|  | @ -1447,6 +1478,12 @@ func (r *gRPCReader) reopenStream() (*storagepb.ReadObjectResponse, error) { | |||
| 
 | ||||
| func newGRPCWriter(c *grpcStorageClient, params *openWriterParams, r io.Reader) *gRPCWriter { | ||||
| 	size := params.chunkSize | ||||
| 
 | ||||
| 	// Round up chunksize to nearest 256KiB
 | ||||
| 	if size%googleapi.MinUploadChunkSize != 0 { | ||||
| 		size += googleapi.MinUploadChunkSize - (size % googleapi.MinUploadChunkSize) | ||||
| 	} | ||||
| 
 | ||||
| 	if params.chunkSize == 0 { | ||||
| 		// TODO: Should we actually use the minimum of 256 KB here when the user
 | ||||
| 		// indicates they want minimal memory usage? We cannot do a zero-copy,
 | ||||
|  | @ -1578,7 +1615,7 @@ func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*st | |||
| 		// The first message on the WriteObject stream must either be the
 | ||||
| 		// Object or the Resumable Upload ID.
 | ||||
| 		if first { | ||||
| 			ctx := gapic.InsertMetadata(w.ctx, metadata.Pairs("x-goog-request-params", "bucket="+url.QueryEscape(w.bucket))) | ||||
| 			ctx := gapic.InsertMetadata(w.ctx, metadata.Pairs("x-goog-request-params", fmt.Sprintf("bucket=projects/_/buckets/%s", url.QueryEscape(w.bucket)))) | ||||
| 			w.stream, err = w.c.raw.WriteObject(ctx) | ||||
| 			if err != nil { | ||||
| 				return nil, 0, false, err | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ import ( | |||
| 	"fmt" | ||||
| 	"time" | ||||
| 
 | ||||
| 	storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" | ||||
| 	"cloud.google.com/go/storage/internal/apiv2/storagepb" | ||||
| 	"google.golang.org/api/iterator" | ||||
| 	raw "google.golang.org/api/storage/v1" | ||||
| ) | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ import ( | |||
| type httpStorageClient struct { | ||||
| 	creds    *google.Credentials | ||||
| 	hc       *http.Client | ||||
| 	readHost string | ||||
| 	xmlHost  string | ||||
| 	raw      *raw.Service | ||||
| 	scheme   string | ||||
| 	settings *settings | ||||
|  | @ -123,7 +123,7 @@ func newHTTPStorageClient(ctx context.Context, opts ...storageOption) (storageCl | |||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("storage client: %w", err) | ||||
| 	} | ||||
| 	// Update readHost and scheme with the chosen endpoint.
 | ||||
| 	// Update xmlHost and scheme with the chosen endpoint.
 | ||||
| 	u, err := url.Parse(ep) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("supplied endpoint %q is not valid: %w", ep, err) | ||||
|  | @ -132,7 +132,7 @@ func newHTTPStorageClient(ctx context.Context, opts ...storageOption) (storageCl | |||
| 	return &httpStorageClient{ | ||||
| 		creds:    creds, | ||||
| 		hc:       hc, | ||||
| 		readHost: u.Host, | ||||
| 		xmlHost:  u.Host, | ||||
| 		raw:      rawService, | ||||
| 		scheme:   u.Scheme, | ||||
| 		settings: s, | ||||
|  | @ -347,6 +347,7 @@ func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Q | |||
| 		req.EndOffset(it.query.EndOffset) | ||||
| 		req.Versions(it.query.Versions) | ||||
| 		req.IncludeTrailingDelimiter(it.query.IncludeTrailingDelimiter) | ||||
| 		req.MatchGlob(it.query.MatchGlob) | ||||
| 		if selection := it.query.toFieldSelection(); selection != "" { | ||||
| 			req.Fields("nextPageToken", googleapi.Field(selection)) | ||||
| 		} | ||||
|  | @ -791,8 +792,9 @@ func (c *httpStorageClient) NewRangeReader(ctx context.Context, params *newRange | |||
| func (c *httpStorageClient) newRangeReaderXML(ctx context.Context, params *newRangeReaderParams, s *settings) (r *Reader, err error) { | ||||
| 	u := &url.URL{ | ||||
| 		Scheme:  c.scheme, | ||||
| 		Host:   c.readHost, | ||||
| 		Host:    c.xmlHost, | ||||
| 		Path:    fmt.Sprintf("/%s/%s", params.bucket, params.object), | ||||
| 		RawPath: fmt.Sprintf("/%s/%s", params.bucket, url.PathEscape(params.object)), | ||||
| 	} | ||||
| 	verb := "GET" | ||||
| 	if params.length == 0 { | ||||
|  | @ -1373,6 +1375,8 @@ func parseReadResponse(res *http.Response, params *newRangeReaderParams, reopen | |||
| 
 | ||||
| 	remain := res.ContentLength | ||||
| 	body := res.Body | ||||
| 	// If the user requested zero bytes, explicitly close and remove the request
 | ||||
| 	// body.
 | ||||
| 	if params.length == 0 { | ||||
| 		remain = 0 | ||||
| 		body.Close() | ||||
|  |  | |||
|  | @ -19,8 +19,6 @@ | |||
| //
 | ||||
| // Lets you store and retrieve potentially-large, immutable data objects.
 | ||||
| //
 | ||||
| //	NOTE: This package is in alpha. It is not stable, and is likely to change.
 | ||||
| //
 | ||||
| // # General documentation
 | ||||
| //
 | ||||
| // For information about setting deadlines, reusing contexts, and more
 | ||||
|  | @ -64,13 +62,18 @@ | |||
| //
 | ||||
| //	req := &storagepb.DeleteBucketRequest{
 | ||||
| //		// TODO: Fill request struct fields.
 | ||||
| //		// See https://pkg.go.dev/cloud.google.com/go/storage/internal/apiv2/stubs#DeleteBucketRequest.
 | ||||
| //		// See https://pkg.go.dev/cloud.google.com/go/storage/internal/apiv2/storagepb#DeleteBucketRequest.
 | ||||
| //	}
 | ||||
| //	err = c.DeleteBucket(ctx, req)
 | ||||
| //	if err != nil {
 | ||||
| //		// TODO: Handle error.
 | ||||
| //	}
 | ||||
| //
 | ||||
| // # Inspecting errors
 | ||||
| //
 | ||||
| // To see examples of how to inspect errors returned by this package please reference
 | ||||
| // [Inspecting errors](https://pkg.go.dev/cloud.google.com/go#hdr-Inspecting_errors).
 | ||||
| //
 | ||||
| // # Use of Context
 | ||||
| //
 | ||||
| // The ctx passed to NewClient is used for authentication requests and
 | ||||
|  | @ -82,11 +85,6 @@ package storage // import "cloud.google.com/go/storage/internal/apiv2" | |||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"os" | ||||
| 	"runtime" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"unicode" | ||||
| 
 | ||||
| 	"google.golang.org/api/option" | ||||
| 	"google.golang.org/grpc/metadata" | ||||
|  | @ -117,16 +115,6 @@ func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context { | |||
| 	return metadata.NewOutgoingContext(ctx, out) | ||||
| } | ||||
| 
 | ||||
| func checkDisableDeadlines() (bool, error) { | ||||
| 	raw, ok := os.LookupEnv("GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE") | ||||
| 	if !ok { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	b, err := strconv.ParseBool(raw) | ||||
| 	return b, err | ||||
| } | ||||
| 
 | ||||
| // DefaultAuthScopes reports the default set of authentication scopes to use with this package.
 | ||||
| func DefaultAuthScopes() []string { | ||||
| 	return []string{ | ||||
|  | @ -137,40 +125,3 @@ func DefaultAuthScopes() []string { | |||
| 		"https://www.googleapis.com/auth/devstorage.read_write", | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // versionGo returns the Go runtime version. The returned string
 | ||||
| // has no whitespace, suitable for reporting in header.
 | ||||
| func versionGo() string { | ||||
| 	const develPrefix = "devel +" | ||||
| 
 | ||||
| 	s := runtime.Version() | ||||
| 	if strings.HasPrefix(s, develPrefix) { | ||||
| 		s = s[len(develPrefix):] | ||||
| 		if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 { | ||||
| 			s = s[:p] | ||||
| 		} | ||||
| 		return s | ||||
| 	} | ||||
| 
 | ||||
| 	notSemverRune := func(r rune) bool { | ||||
| 		return !strings.ContainsRune("0123456789.", r) | ||||
| 	} | ||||
| 
 | ||||
| 	if strings.HasPrefix(s, "go1") { | ||||
| 		s = s[2:] | ||||
| 		var prerelease string | ||||
| 		if p := strings.IndexFunc(s, notSemverRune); p >= 0 { | ||||
| 			s, prerelease = s[:p], s[p:] | ||||
| 		} | ||||
| 		if strings.HasSuffix(s, ".") { | ||||
| 			s += "0" | ||||
| 		} else if strings.Count(s, ".") < 2 { | ||||
| 			s += ".0" | ||||
| 		} | ||||
| 		if prerelease != "" { | ||||
| 			s += "-" + prerelease | ||||
| 		} | ||||
| 		return s | ||||
| 	} | ||||
| 	return "UNKNOWN" | ||||
| } | ||||
|  |  | |||
|  | @ -23,15 +23,17 @@ import ( | |||
| 	"net/url" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| 
 | ||||
| 	iampb "cloud.google.com/go/iam/apiv1/iampb" | ||||
| 	storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" | ||||
| 	storagepb "cloud.google.com/go/storage/internal/apiv2/storagepb" | ||||
| 	gax "github.com/googleapis/gax-go/v2" | ||||
| 	"google.golang.org/api/iterator" | ||||
| 	"google.golang.org/api/option" | ||||
| 	"google.golang.org/api/option/internaloption" | ||||
| 	gtransport "google.golang.org/api/transport/grpc" | ||||
| 	"google.golang.org/grpc" | ||||
| 	"google.golang.org/grpc/codes" | ||||
| 	"google.golang.org/grpc/metadata" | ||||
| 	"google.golang.org/protobuf/proto" | ||||
| ) | ||||
|  | @ -86,36 +88,394 @@ func defaultGRPCClientOptions() []option.ClientOption { | |||
| 
 | ||||
| func defaultCallOptions() *CallOptions { | ||||
| 	return &CallOptions{ | ||||
| 		DeleteBucket:              []gax.CallOption{}, | ||||
| 		GetBucket:                 []gax.CallOption{}, | ||||
| 		CreateBucket:              []gax.CallOption{}, | ||||
| 		ListBuckets:               []gax.CallOption{}, | ||||
| 		LockBucketRetentionPolicy: []gax.CallOption{}, | ||||
| 		GetIamPolicy:              []gax.CallOption{}, | ||||
| 		SetIamPolicy:              []gax.CallOption{}, | ||||
| 		TestIamPermissions:        []gax.CallOption{}, | ||||
| 		UpdateBucket:              []gax.CallOption{}, | ||||
| 		DeleteNotificationConfig:  []gax.CallOption{}, | ||||
| 		GetNotificationConfig:     []gax.CallOption{}, | ||||
| 		CreateNotificationConfig:  []gax.CallOption{}, | ||||
| 		ListNotificationConfigs:   []gax.CallOption{}, | ||||
| 		ComposeObject:             []gax.CallOption{}, | ||||
| 		DeleteObject:              []gax.CallOption{}, | ||||
| 		CancelResumableWrite:      []gax.CallOption{}, | ||||
| 		GetObject:                 []gax.CallOption{}, | ||||
| 		ReadObject:                []gax.CallOption{}, | ||||
| 		UpdateObject:              []gax.CallOption{}, | ||||
| 		WriteObject:               []gax.CallOption{}, | ||||
| 		ListObjects:               []gax.CallOption{}, | ||||
| 		RewriteObject:             []gax.CallOption{}, | ||||
| 		StartResumableWrite:       []gax.CallOption{}, | ||||
| 		QueryWriteStatus:          []gax.CallOption{}, | ||||
| 		GetServiceAccount:         []gax.CallOption{}, | ||||
| 		CreateHmacKey:             []gax.CallOption{}, | ||||
| 		DeleteHmacKey:             []gax.CallOption{}, | ||||
| 		GetHmacKey:                []gax.CallOption{}, | ||||
| 		ListHmacKeys:              []gax.CallOption{}, | ||||
| 		UpdateHmacKey:             []gax.CallOption{}, | ||||
| 		DeleteBucket: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		GetBucket: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		CreateBucket: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		ListBuckets: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		LockBucketRetentionPolicy: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		GetIamPolicy: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		SetIamPolicy: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		TestIamPermissions: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		UpdateBucket: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		DeleteNotificationConfig: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		GetNotificationConfig: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		CreateNotificationConfig: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		ListNotificationConfigs: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		ComposeObject: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		DeleteObject: []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{ | ||||
| 			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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		GetObject: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		ReadObject: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		UpdateObject: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		WriteObject: []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{ | ||||
| 			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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		RewriteObject: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		StartResumableWrite: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		QueryWriteStatus: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		GetServiceAccount: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		CreateHmacKey: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		DeleteHmacKey: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		GetHmacKey: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		ListHmacKeys: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 		UpdateHmacKey: []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, | ||||
| 				}) | ||||
| 			}), | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -296,13 +656,24 @@ func (c *Client) ComposeObject(ctx context.Context, req *storagepb.ComposeObject | |||
| 	return c.internalClient.ComposeObject(ctx, req, opts...) | ||||
| } | ||||
| 
 | ||||
| // DeleteObject deletes an object and its metadata. Deletions are permanent if versioning
 | ||||
| // is not enabled for the bucket, or if the generation parameter is used.
 | ||||
| // DeleteObject deletes an object and its metadata.
 | ||||
| //
 | ||||
| // Deletions are normally permanent when versioning is disabled or whenever
 | ||||
| // the generation parameter is used. However, if soft delete is enabled for
 | ||||
| // the bucket, deleted objects can be restored using RestoreObject until the
 | ||||
| // soft delete retention period has passed.
 | ||||
| func (c *Client) DeleteObject(ctx context.Context, req *storagepb.DeleteObjectRequest, opts ...gax.CallOption) error { | ||||
| 	return c.internalClient.DeleteObject(ctx, req, opts...) | ||||
| } | ||||
| 
 | ||||
| // CancelResumableWrite cancels an in-progress resumable upload.
 | ||||
| //
 | ||||
| // Any attempts to write to the resumable upload after cancelling the upload
 | ||||
| // will fail.
 | ||||
| //
 | ||||
| // The behavior for currently in progress write operations is not guaranteed -
 | ||||
| // they could either complete before the cancellation or fail if the
 | ||||
| // cancellation completes first.
 | ||||
| func (c *Client) CancelResumableWrite(ctx context.Context, req *storagepb.CancelResumableWriteRequest, opts ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error) { | ||||
| 	return c.internalClient.CancelResumableWrite(ctx, req, opts...) | ||||
| } | ||||
|  | @ -369,6 +740,9 @@ func (c *Client) UpdateObject(ctx context.Context, req *storagepb.UpdateObjectRe | |||
| //	incur a performance cost over resuming at the correct write offset.
 | ||||
| //	This behavior can make client-side handling simpler in some cases.
 | ||||
| //
 | ||||
| //	Clients must only send data that is a multiple of 256 KiB per message,
 | ||||
| //	unless the object is being finished with finish_write set to true.
 | ||||
| //
 | ||||
| // The service will not view the object as complete until the client has
 | ||||
| // sent a WriteObjectRequest with finish_write set to true. Sending any
 | ||||
| // requests on a stream after sending a request with finish_write set to
 | ||||
|  | @ -455,9 +829,6 @@ type gRPCClient struct { | |||
| 	// Connection pool of gRPC connections to the service.
 | ||||
| 	connPool gtransport.ConnPool | ||||
| 
 | ||||
| 	// flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
 | ||||
| 	disableDeadlines bool | ||||
| 
 | ||||
| 	// Points back to the CallOptions field of the containing Client
 | ||||
| 	CallOptions **CallOptions | ||||
| 
 | ||||
|  | @ -503,11 +874,6 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error | |||
| 		clientOpts = append(clientOpts, hookOpts...) | ||||
| 	} | ||||
| 
 | ||||
| 	disableDeadlines, err := checkDisableDeadlines() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|  | @ -516,7 +882,6 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error | |||
| 
 | ||||
| 	c := &gRPCClient{ | ||||
| 		connPool:    connPool, | ||||
| 		disableDeadlines: disableDeadlines, | ||||
| 		client:      storagepb.NewStorageClient(connPool), | ||||
| 		CallOptions: &client.CallOptions, | ||||
| 	} | ||||
|  | @ -539,7 +904,7 @@ func (c *gRPCClient) Connection() *grpc.ClientConn { | |||
| // the `x-goog-api-client` header passed on each request. Intended for
 | ||||
| // use by Google-written clients.
 | ||||
| func (c *gRPCClient) setGoogleClientInfo(keyval ...string) { | ||||
| 	kv := append([]string{"gl-go", versionGo()}, keyval...) | ||||
| 	kv := append([]string{"gl-go", gax.GoVersion}, keyval...) | ||||
| 	kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "grpc", grpc.Version) | ||||
| 	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) | ||||
| } | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -15,4 +15,4 @@ | |||
| package internal | ||||
| 
 | ||||
| // Version is the current tagged release of the library.
 | ||||
| const Version = "1.30.1" | ||||
| const Version = "1.31.0" | ||||
|  |  | |||
|  | @ -76,9 +76,14 @@ func setRetryHeaderHTTP(req interface{ Header() http.Header }) func(string, int) | |||
| 			return | ||||
| 		} | ||||
| 		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) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ import ( | |||
| 	"regexp" | ||||
| 
 | ||||
| 	"cloud.google.com/go/internal/trace" | ||||
| 	storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" | ||||
| 	"cloud.google.com/go/storage/internal/apiv2/storagepb" | ||||
| 	raw "google.golang.org/api/storage/v1" | ||||
| ) | ||||
| 
 | ||||
|  |  | |||
|  | @ -57,7 +57,7 @@ func WithJSONReads() option.ClientOption { | |||
| } | ||||
| 
 | ||||
| // WithXMLReads is an option that may be passed to a Storage Client on creation.
 | ||||
| // It sets the client to use the JSON API for object reads.
 | ||||
| // It sets the client to use the XML API for object reads.
 | ||||
| //
 | ||||
| // This is the current default.
 | ||||
| func WithXMLReads() option.ClientOption { | ||||
|  |  | |||
|  | @ -113,6 +113,12 @@ type PostPolicyV4Options struct { | |||
| 	// Optional.
 | ||||
| 	Conditions []PostPolicyV4Condition | ||||
| 
 | ||||
| 	// Hostname sets the host of the signed post policy. This field overrides
 | ||||
| 	// any endpoint set on a storage Client or through STORAGE_EMULATOR_HOST.
 | ||||
| 	// Only compatible with PathStyle URLStyle.
 | ||||
| 	// Optional.
 | ||||
| 	Hostname string | ||||
| 
 | ||||
| 	shouldHashSignBytes bool | ||||
| } | ||||
| 
 | ||||
|  | @ -128,6 +134,7 @@ func (opts *PostPolicyV4Options) clone() *PostPolicyV4Options { | |||
| 		Fields:              opts.Fields, | ||||
| 		Conditions:          opts.Conditions, | ||||
| 		shouldHashSignBytes: opts.shouldHashSignBytes, | ||||
| 		Hostname:            opts.Hostname, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -370,7 +377,7 @@ func GenerateSignedPostPolicyV4(bucket, object string, opts *PostPolicyV4Options | |||
| 	u := &url.URL{ | ||||
| 		Path:    path, | ||||
| 		RawPath: pathEncodeV4(path), | ||||
| 		Host:    opts.Style.host(bucket), | ||||
| 		Host:    opts.Style.host(opts.Hostname, bucket), | ||||
| 		Scheme:  scheme, | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ import ( | |||
| 	"cloud.google.com/go/internal/optional" | ||||
| 	"cloud.google.com/go/internal/trace" | ||||
| 	"cloud.google.com/go/storage/internal" | ||||
| 	storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" | ||||
| 	"cloud.google.com/go/storage/internal/apiv2/storagepb" | ||||
| 	"github.com/googleapis/gax-go/v2" | ||||
| 	"golang.org/x/oauth2/google" | ||||
| 	"google.golang.org/api/googleapi" | ||||
|  | @ -109,8 +109,8 @@ type Client struct { | |||
| 	raw *raw.Service | ||||
| 	// Scheme describes the scheme under the current host.
 | ||||
| 	scheme string | ||||
| 	// ReadHost is the default host used on the reader.
 | ||||
| 	readHost string | ||||
| 	// xmlHost is the default host used for XML requests.
 | ||||
| 	xmlHost string | ||||
| 	// May be nil.
 | ||||
| 	creds *google.Credentials | ||||
| 	retry *retryConfig | ||||
|  | @ -199,7 +199,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error | |||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("storage client: %w", err) | ||||
| 	} | ||||
| 	// Update readHost and scheme with the chosen endpoint.
 | ||||
| 	// Update xmlHost and scheme with the chosen endpoint.
 | ||||
| 	u, err := url.Parse(ep) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("supplied endpoint %q is not valid: %w", ep, err) | ||||
|  | @ -214,7 +214,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error | |||
| 		hc:      hc, | ||||
| 		raw:     rawService, | ||||
| 		scheme:  u.Scheme, | ||||
| 		readHost: u.Host, | ||||
| 		xmlHost: u.Host, | ||||
| 		creds:   creds, | ||||
| 		tc:      tc, | ||||
| 	}, nil | ||||
|  | @ -262,13 +262,13 @@ const ( | |||
| 	SigningSchemeV4 | ||||
| ) | ||||
| 
 | ||||
| // URLStyle determines the style to use for the signed URL. pathStyle is the
 | ||||
| // URLStyle determines the style to use for the signed URL. PathStyle is the
 | ||||
| // default. All non-default options work with V4 scheme only. See
 | ||||
| // https://cloud.google.com/storage/docs/request-endpoints for details.
 | ||||
| type URLStyle interface { | ||||
| 	// host should return the host portion of the signed URL, not including
 | ||||
| 	// the scheme (e.g. storage.googleapis.com).
 | ||||
| 	host(bucket string) string | ||||
| 	host(hostname, bucket string) string | ||||
| 
 | ||||
| 	// path should return the path portion of the signed URL, which may include
 | ||||
| 	// both the bucket and object name or only the object name depending on the
 | ||||
|  | @ -284,7 +284,11 @@ type bucketBoundHostname struct { | |||
| 	hostname string | ||||
| } | ||||
| 
 | ||||
| func (s pathStyle) host(bucket string) string { | ||||
| func (s pathStyle) host(hostname, bucket string) string { | ||||
| 	if hostname != "" { | ||||
| 		return stripScheme(hostname) | ||||
| 	} | ||||
| 
 | ||||
| 	if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" { | ||||
| 		return stripScheme(host) | ||||
| 	} | ||||
|  | @ -292,7 +296,7 @@ func (s pathStyle) host(bucket string) string { | |||
| 	return "storage.googleapis.com" | ||||
| } | ||||
| 
 | ||||
| func (s virtualHostedStyle) host(bucket string) string { | ||||
| func (s virtualHostedStyle) host(_, bucket string) string { | ||||
| 	if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" { | ||||
| 		return bucket + "." + stripScheme(host) | ||||
| 	} | ||||
|  | @ -300,7 +304,7 @@ func (s virtualHostedStyle) host(bucket string) string { | |||
| 	return bucket + ".storage.googleapis.com" | ||||
| } | ||||
| 
 | ||||
| func (s bucketBoundHostname) host(bucket string) string { | ||||
| func (s bucketBoundHostname) host(_, bucket string) string { | ||||
| 	return s.hostname | ||||
| } | ||||
| 
 | ||||
|  | @ -321,7 +325,10 @@ func (s bucketBoundHostname) path(bucket, object string) string { | |||
| } | ||||
| 
 | ||||
| // PathStyle is the default style, and will generate a URL of the form
 | ||||
| // "storage.googleapis.com/<bucket-name>/<object-name>".
 | ||||
| // "<host-name>/<bucket-name>/<object-name>". By default, <host-name> is
 | ||||
| // storage.googleapis.com, but setting an endpoint on the storage Client or
 | ||||
| // through STORAGE_EMULATOR_HOST overrides this. Setting Hostname on
 | ||||
| // SignedURLOptions or PostPolicyV4Options overrides everything else.
 | ||||
| func PathStyle() URLStyle { | ||||
| 	return pathStyle{} | ||||
| } | ||||
|  | @ -442,6 +449,12 @@ type SignedURLOptions struct { | |||
| 	// Scheme determines the version of URL signing to use. Default is
 | ||||
| 	// SigningSchemeV2.
 | ||||
| 	Scheme SigningScheme | ||||
| 
 | ||||
| 	// Hostname sets the host of the signed URL. This field overrides any
 | ||||
| 	// endpoint set on a storage Client or through STORAGE_EMULATOR_HOST.
 | ||||
| 	// Only compatible with PathStyle URLStyle.
 | ||||
| 	// Optional.
 | ||||
| 	Hostname string | ||||
| } | ||||
| 
 | ||||
| func (opts *SignedURLOptions) clone() *SignedURLOptions { | ||||
|  | @ -458,6 +471,7 @@ func (opts *SignedURLOptions) clone() *SignedURLOptions { | |||
| 		Style:           opts.Style, | ||||
| 		Insecure:        opts.Insecure, | ||||
| 		Scheme:          opts.Scheme, | ||||
| 		Hostname:        opts.Hostname, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -716,7 +730,7 @@ func signedURLV4(bucket, name string, opts *SignedURLOptions, now time.Time) (st | |||
| 	fmt.Fprintf(buf, "%s\n", escapedQuery) | ||||
| 
 | ||||
| 	// Fill in the hostname based on the desired URL style.
 | ||||
| 	u.Host = opts.Style.host(bucket) | ||||
| 	u.Host = opts.Style.host(opts.Hostname, bucket) | ||||
| 
 | ||||
| 	// Fill in the URL scheme.
 | ||||
| 	if opts.Insecure { | ||||
|  | @ -850,7 +864,7 @@ func signedURLV2(bucket, name string, opts *SignedURLOptions) (string, error) { | |||
| 	} | ||||
| 	encoded := base64.StdEncoding.EncodeToString(b) | ||||
| 	u.Scheme = "https" | ||||
| 	u.Host = PathStyle().host(bucket) | ||||
| 	u.Host = PathStyle().host(opts.Hostname, bucket) | ||||
| 	q := u.Query() | ||||
| 	q.Set("GoogleAccessId", opts.GoogleAccessID) | ||||
| 	q.Set("Expires", fmt.Sprintf("%d", opts.Expires.Unix())) | ||||
|  | @ -893,7 +907,9 @@ func (o *ObjectHandle) Generation(gen int64) *ObjectHandle { | |||
| } | ||||
| 
 | ||||
| // If returns a new ObjectHandle that applies a set of preconditions.
 | ||||
| // Preconditions already set on the ObjectHandle are ignored.
 | ||||
| // Preconditions already set on the ObjectHandle are ignored. The supplied
 | ||||
| // Conditions must have at least one field set to a non-default value;
 | ||||
| // otherwise an error will be returned from any operation on the ObjectHandle.
 | ||||
| // Operations on the new handle will return an error if the preconditions are not
 | ||||
| // satisfied. See https://cloud.google.com/storage/docs/generations-preconditions
 | ||||
| // for more details.
 | ||||
|  | @ -1163,7 +1179,7 @@ func (uattrs *ObjectAttrsToUpdate) toProtoObject(bucket, object string) *storage | |||
| 		o.Acl = toProtoObjectACL(uattrs.ACL) | ||||
| 	} | ||||
| 
 | ||||
| 	// TODO(cathyo): Handle metadata. Pending b/230510191.
 | ||||
| 	o.Metadata = uattrs.Metadata | ||||
| 
 | ||||
| 	return o | ||||
| } | ||||
|  | @ -1484,6 +1500,8 @@ type Query struct { | |||
| 	// aside from the prefix, contain delimiter will have their name,
 | ||||
| 	// truncated after the delimiter, returned in prefixes.
 | ||||
| 	// Duplicate prefixes are omitted.
 | ||||
| 	// Must be set to / when used with the MatchGlob parameter to filter results
 | ||||
| 	// in a directory-like mode.
 | ||||
| 	// Optional.
 | ||||
| 	Delimiter string | ||||
| 
 | ||||
|  | @ -1497,9 +1515,9 @@ type Query struct { | |||
| 	Versions bool | ||||
| 
 | ||||
| 	// attrSelection is used to select only specific fields to be returned by
 | ||||
| 	// the query. It is set by the user calling calling SetAttrSelection. These
 | ||||
| 	// the query. It is set by the user calling SetAttrSelection. These
 | ||||
| 	// are used by toFieldMask and toFieldSelection for gRPC and HTTP/JSON
 | ||||
| 	// clients repsectively.
 | ||||
| 	// clients respectively.
 | ||||
| 	attrSelection []string | ||||
| 
 | ||||
| 	// StartOffset is used to filter results to objects whose names are
 | ||||
|  | @ -1525,6 +1543,12 @@ type Query struct { | |||
| 	// true, they will also be included as objects and their metadata will be
 | ||||
| 	// populated in the returned ObjectAttrs.
 | ||||
| 	IncludeTrailingDelimiter bool | ||||
| 
 | ||||
| 	// MatchGlob is a glob pattern used to filter results (for example, foo*bar). See
 | ||||
| 	// https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-object-glob
 | ||||
| 	// for syntax details. When Delimiter is set in conjunction with MatchGlob,
 | ||||
| 	// it must be set to /.
 | ||||
| 	MatchGlob string | ||||
| } | ||||
| 
 | ||||
| // attrToFieldMap maps the field names of ObjectAttrs to the underlying field
 | ||||
|  |  | |||
|  | @ -86,7 +86,7 @@ type Writer struct { | |||
| 	// cancellation.
 | ||||
| 	ChunkRetryDeadline time.Duration | ||||
| 
 | ||||
| 	// ProgressFunc can be used to monitor the progress of a large write.
 | ||||
| 	// ProgressFunc can be used to monitor the progress of a large write
 | ||||
| 	// operation. If ProgressFunc is not nil and writing requires multiple
 | ||||
| 	// calls to the underlying service (see
 | ||||
| 	// https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload),
 | ||||
|  |  | |||
|  | @ -1,3 +1,3 @@ | |||
| { | ||||
|     "v2": "2.10.0" | ||||
|     "v2": "2.11.0" | ||||
| } | ||||
|  |  | |||
|  | @ -1,5 +1,17 @@ | |||
| # Changelog | ||||
| 
 | ||||
| ## [2.11.0](https://github.com/googleapis/gax-go/compare/v2.10.0...v2.11.0) (2023-06-13) | ||||
| 
 | ||||
| 
 | ||||
| ### Features | ||||
| 
 | ||||
| * **v2:** add GoVersion package variable ([#283](https://github.com/googleapis/gax-go/issues/283)) ([26553cc](https://github.com/googleapis/gax-go/commit/26553ccadb4016b189881f52e6c253b68bb3e3d5)) | ||||
| 
 | ||||
| 
 | ||||
| ### Bug Fixes | ||||
| 
 | ||||
| * **v2:** handle space in non-devel go version ([#288](https://github.com/googleapis/gax-go/issues/288)) ([fd7bca0](https://github.com/googleapis/gax-go/commit/fd7bca029a1c5e63def8f0a5fd1ec3f725d92f75)) | ||||
| 
 | ||||
| ## [2.10.0](https://github.com/googleapis/gax-go/compare/v2.9.1...v2.10.0) (2023-05-30) | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,7 +29,73 @@ | |||
| 
 | ||||
| package gax | ||||
| 
 | ||||
| import "bytes" | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| 	"unicode" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	// GoVersion is a header-safe representation of the current runtime
 | ||||
| 	// environment's Go version. This is for GAX consumers that need to
 | ||||
| 	// report the Go runtime version in API calls.
 | ||||
| 	GoVersion string | ||||
| 	// version is a package internal global variable for testing purposes.
 | ||||
| 	version = runtime.Version | ||||
| ) | ||||
| 
 | ||||
| // versionUnknown is only used when the runtime version cannot be determined.
 | ||||
| const versionUnknown = "UNKNOWN" | ||||
| 
 | ||||
| func init() { | ||||
| 	GoVersion = goVersion() | ||||
| } | ||||
| 
 | ||||
| // goVersion returns a Go runtime version derived from the runtime environment
 | ||||
| // that is modified to be suitable for reporting in a header, meaning it has no
 | ||||
| // whitespace. If it is unable to determine the Go runtime version, it returns
 | ||||
| // versionUnknown.
 | ||||
| func goVersion() string { | ||||
| 	const develPrefix = "devel +" | ||||
| 
 | ||||
| 	s := version() | ||||
| 	if strings.HasPrefix(s, develPrefix) { | ||||
| 		s = s[len(develPrefix):] | ||||
| 		if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 { | ||||
| 			s = s[:p] | ||||
| 		} | ||||
| 		return s | ||||
| 	} else if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 { | ||||
| 		s = s[:p] | ||||
| 	} | ||||
| 
 | ||||
| 	notSemverRune := func(r rune) bool { | ||||
| 		return !strings.ContainsRune("0123456789.", r) | ||||
| 	} | ||||
| 
 | ||||
| 	if strings.HasPrefix(s, "go1") { | ||||
| 		s = s[2:] | ||||
| 		var prerelease string | ||||
| 		if p := strings.IndexFunc(s, notSemverRune); p >= 0 { | ||||
| 			s, prerelease = s[:p], s[p:] | ||||
| 		} | ||||
| 		if strings.HasSuffix(s, ".") { | ||||
| 			s += "0" | ||||
| 		} else if strings.Count(s, ".") < 2 { | ||||
| 			s += ".0" | ||||
| 		} | ||||
| 		if prerelease != "" { | ||||
| 			// Some release candidates already have a dash in them.
 | ||||
| 			if !strings.HasPrefix(prerelease, "-") { | ||||
| 				prerelease = "-" + prerelease | ||||
| 			} | ||||
| 			s += prerelease | ||||
| 		} | ||||
| 		return s | ||||
| 	} | ||||
| 	return "UNKNOWN" | ||||
| } | ||||
| 
 | ||||
| // XGoogHeader is for use by the Google Cloud Libraries only.
 | ||||
| //
 | ||||
|  |  | |||
|  | @ -30,4 +30,4 @@ | |||
| package internal | ||||
| 
 | ||||
| // Version is the current tagged release of the library.
 | ||||
| const Version = "2.10.0" | ||||
| const Version = "2.11.0" | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| # cloud.google.com/go v0.110.0 | ||||
| # cloud.google.com/go v0.110.2 | ||||
| ## explicit; go 1.19 | ||||
| cloud.google.com/go/internal | ||||
| cloud.google.com/go/internal/optional | ||||
|  | @ -10,16 +10,16 @@ cloud.google.com/go/compute/internal | |||
| # cloud.google.com/go/compute/metadata v0.2.3 | ||||
| ## explicit; go 1.19 | ||||
| cloud.google.com/go/compute/metadata | ||||
| # cloud.google.com/go/iam v0.13.0 | ||||
| # cloud.google.com/go/iam v1.1.0 | ||||
| ## explicit; go 1.19 | ||||
| cloud.google.com/go/iam | ||||
| cloud.google.com/go/iam/apiv1/iampb | ||||
| # cloud.google.com/go/storage v1.30.1 | ||||
| # cloud.google.com/go/storage v1.31.0 | ||||
| ## explicit; go 1.19 | ||||
| cloud.google.com/go/storage | ||||
| cloud.google.com/go/storage/internal | ||||
| cloud.google.com/go/storage/internal/apiv2 | ||||
| cloud.google.com/go/storage/internal/apiv2/stubs | ||||
| cloud.google.com/go/storage/internal/apiv2/storagepb | ||||
| # github.com/Azure/azure-pipeline-go v0.2.3 | ||||
| ## explicit; go 1.14 | ||||
| github.com/Azure/azure-pipeline-go/pipeline | ||||
|  | @ -600,7 +600,7 @@ github.com/google/uuid | |||
| ## explicit; go 1.19 | ||||
| github.com/googleapis/enterprise-certificate-proxy/client | ||||
| github.com/googleapis/enterprise-certificate-proxy/client/util | ||||
| # github.com/googleapis/gax-go/v2 v2.10.0 | ||||
| # github.com/googleapis/gax-go/v2 v2.11.0 | ||||
| ## explicit; go 1.19 | ||||
| github.com/googleapis/gax-go/v2 | ||||
| github.com/googleapis/gax-go/v2/apierror | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue