Skip to content

Commit 8ef33d0

Browse files
committed
API to efficiently get SourceObjectInfo for all versions from TarballStorage
1 parent d7eb238 commit 8ef33d0

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

app/lib/package/tarball_storage.dart

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:crypto/crypto.dart';
88
import 'package:gcloud/storage.dart';
99
import 'package:logging/logging.dart';
1010
import 'package:meta/meta.dart';
11+
import 'package:pub_dev/package/api_export/exported_api.dart';
1112
import '../shared/datastore.dart';
1213
import '../shared/storage.dart';
1314
import '../shared/utils.dart';
@@ -52,6 +53,38 @@ class TarballStorage {
5253
return await _canonicalBucket.tryInfo(objectName);
5354
}
5455

56+
/// Gets `gs:/<bucket>/<objectName>` for [package] and [version] in the
57+
/// canonical bucket.
58+
///
59+
/// Returns the absolute objectName on the form created by
60+
/// [Bucket.absoluteObjectName].
61+
String getCanonicalBucketAbsoluteObjectName(String package, String version) =>
62+
_canonicalBucket.absoluteObjectName(tarballObjectName(package, version));
63+
64+
/// Get map from `version` to [SourceObjectInfo] for each version of [package] in
65+
/// canonical bucket.
66+
Future<Map<String, SourceObjectInfo>> listVersionsInCanonicalBucket(
67+
String package,
68+
) async {
69+
final prefix = _tarballObjectNamePackagePrefix(package);
70+
final items = await _canonicalBucket
71+
.list(
72+
prefix: prefix,
73+
delimiter: '',
74+
)
75+
.toList();
76+
return Map.fromEntries(items.whereType<BucketObjectEntry>().map((item) {
77+
final version = item.name.without(prefix: prefix, suffix: '.tar.gz');
78+
return MapEntry(
79+
version,
80+
SourceObjectInfo.fromObjectInfo(
81+
_canonicalBucket,
82+
item,
83+
),
84+
);
85+
}));
86+
}
87+
5588
/// Gets the object info of the archive file from the public bucket.
5689
Future<ObjectInfo?> getPublicBucketArchiveInfo(
5790
String package, String version) async {

0 commit comments

Comments
 (0)