Skip to content

Commit c061502

Browse files
authored
Add support for metadata in Storage.copyObject (dart-archive/gcloud#194)
1 parent 535244d commit c061502

File tree

5 files changed

+58
-4
lines changed

5 files changed

+58
-4
lines changed

pkgs/gcloud/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 0.8.14
2+
- Support override metadata properties in `copyObject`.
3+
14
## 0.8.13
25
- Support the latest version `^13.0.0` of the `googleapis` package.
36

pkgs/gcloud/lib/src/storage_impl.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,14 @@ class _StorageImpl implements Storage {
106106
}
107107

108108
@override
109-
Future copyObject(String src, String dest) {
109+
Future copyObject(String src, String dest, {ObjectMetadata? metadata}) {
110110
var srcName = _AbsoluteName.parse(src);
111111
var destName = _AbsoluteName.parse(dest);
112+
metadata ??= _ObjectMetadata();
113+
var objectMetadata = metadata as _ObjectMetadata;
114+
final object = objectMetadata._object;
112115
return _api.objects
113-
.copy(storage_api.Object(), srcName.bucketName, srcName.objectName,
116+
.copy(object, srcName.bucketName, srcName.objectName,
114117
destName.bucketName, destName.objectName)
115118
.then((_) => null);
116119
}

pkgs/gcloud/lib/storage.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,9 @@ abstract class Storage {
561561
/// Copy object [src] to object [dest].
562562
///
563563
/// The names of [src] and [dest] must be absolute.
564-
Future copyObject(String src, String dest);
564+
///
565+
/// [metadata] can be used to overwrite metadata properties.
566+
Future copyObject(String src, String dest, {ObjectMetadata? metadata});
565567
}
566568

567569
/// Information on a specific object.

pkgs/gcloud/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: gcloud
2-
version: 0.8.13
2+
version: 0.8.14
33
description: >-
44
High level idiomatic Dart API for Google Cloud Storage, Pub-Sub and Datastore.
55
repository: https://github.com/dart-lang/gcloud

pkgs/gcloud/test/storage/e2e_test.dart

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,52 @@ void main() {
153153
testCreateReadDelete('test-2', bytesResumableUpload);
154154
});
155155

156+
testWithBucket('create-copy-read-delete', (bucket) async {
157+
final bytes = [1, 2, 3];
158+
final info = await bucket.writeBytes('test-for-copy', bytes);
159+
expect(info, isNotNull);
160+
161+
await storage.copyObject(
162+
bucket.absoluteObjectName('test-for-copy'),
163+
bucket.absoluteObjectName('test'),
164+
);
165+
166+
final result =
167+
await bucket.read('test').fold<List<int>>([], (p, e) => p..addAll(e));
168+
expect(result, bytes);
169+
170+
await bucket.delete('test');
171+
await bucket.delete('test-for-copy');
172+
});
173+
174+
testWithBucket('create-copy-metadata-read-delete', (bucket) async {
175+
final bytes = [1, 2, 3];
176+
final info = await bucket.writeBytes(
177+
'test-for-copy',
178+
bytes,
179+
metadata: ObjectMetadata(contentType: 'text/plain'),
180+
);
181+
expect(info, isNotNull);
182+
183+
await storage.copyObject(
184+
bucket.absoluteObjectName('test-for-copy'),
185+
bucket.absoluteObjectName('test'),
186+
metadata: ObjectMetadata(contentType: 'application/octet'),
187+
);
188+
189+
final r1 = await bucket.info('test-for-copy');
190+
expect(r1.metadata.contentType, 'text/plain');
191+
final r2 = await bucket.info('test');
192+
expect(r2.metadata.contentType, 'application/octet');
193+
194+
final result =
195+
await bucket.read('test').fold<List<int>>([], (p, e) => p..addAll(e));
196+
expect(result, bytes);
197+
198+
await bucket.delete('test');
199+
await bucket.delete('test-for-copy');
200+
});
201+
156202
group('create-read-delete-streaming', () {
157203
void testCreateReadDelete(String name, List<int> bytes) {
158204
testWithBucket(name, (bucket) async {

0 commit comments

Comments
 (0)