Changeset View
Changeset View
Standalone View
Standalone View
swh/provenance/storage/archive.py
from typing import Any, Dict, Iterable, Set | from datetime import datetime | ||||
from typing import Any, Dict, Iterable, Set, Tuple | |||||
from swh.model.model import ObjectType, Sha1Git, TargetType | from swh.model.model import ObjectType, Sha1Git, TargetType | ||||
from swh.storage.interface import StorageInterface | from swh.storage.interface import StorageInterface | ||||
class ArchiveStorage: | class ArchiveStorage: | ||||
def __init__(self, storage: StorageInterface): | def __init__(self, storage: StorageInterface): | ||||
self.storage = storage | self.storage = storage | ||||
Show All 31 Lines | def snapshot_get_heads(self, id: Sha1Git) -> Iterable[Sha1Git]: | ||||
batchsize = 100 | batchsize = 100 | ||||
for releases in grouper(releases_set, batchsize): | for releases in grouper(releases_set, batchsize): | ||||
targets_set.update( | targets_set.update( | ||||
release.target | release.target | ||||
for release in self.storage.release_get(list(releases)) | for release in self.storage.release_get(list(releases)) | ||||
if release is not None and release.target_type == ObjectType.REVISION | if release is not None and release.target_type == ObjectType.REVISION | ||||
) | ) | ||||
revisions: Set[Sha1Git] = set() | revisions: Set[Tuple[datetime, Sha1Git]] = set() | ||||
for targets in grouper(targets_set, batchsize): | for targets in grouper(targets_set, batchsize): | ||||
revisions.update( | revisions.update( | ||||
revision.id | (revision.date.to_datetime(), revision.id) | ||||
for revision in self.storage.revision_get(list(targets)) | for revision in self.storage.revision_get(list(targets)) | ||||
if revision is not None | if revision is not None and revision.date is not None | ||||
) | ) | ||||
yield from revisions | yield from (head for _, head in sorted(revisions)) |