diff --git a/swh/storage/algos/snapshot.py b/swh/storage/algos/snapshot.py --- a/swh/storage/algos/snapshot.py +++ b/swh/storage/algos/snapshot.py @@ -87,8 +87,9 @@ snapshot = storage.snapshot_get_branches( snapshot_id, branches_count=branches_count ) + if snapshot is None: + return None snapshot.pop("next_branch") else: snapshot = snapshot_get_all_branches(storage, snapshot_id) - - return Snapshot.from_dict(snapshot) + return Snapshot.from_dict(snapshot) if snapshot else None diff --git a/swh/storage/tests/algos/test_snapshot.py b/swh/storage/tests/algos/test_snapshot.py --- a/swh/storage/tests/algos/test_snapshot.py +++ b/swh/storage/tests/algos/test_snapshot.py @@ -53,12 +53,13 @@ yield no result """ + # unknown origin so None assert snapshot_get_latest(swh_storage, "unknown-origin") is None - # no snapshot on origin visit then nothing is found + # no snapshot on origin visit so None origin = Origin.from_dict(data.origin) swh_storage.origin_add_one(origin) - swh_storage.origin_visit_add( + ov1 = swh_storage.origin_visit_add( [ OriginVisit( origin=origin.url, @@ -68,8 +69,26 @@ snapshot=None, ) ] + )[0] + assert snapshot_get_latest(swh_storage, origin.url) is None + + # visit references a snapshot but the snapshot does not exist in backend for some + # reason + complete_snapshot = Snapshot.from_dict(data.complete_snapshot) + swh_storage.origin_visit_status_add( + [ + OriginVisitStatus( + origin=origin.url, + visit=ov1.visit, + date=data.date_visit2, + status="partial", + snapshot=complete_snapshot.id, + ) + ] ) + # so we do not find it assert snapshot_get_latest(swh_storage, origin.url) is None + assert snapshot_get_latest(swh_storage, origin.url, branches_count=1) is None def test_snapshot_get_latest(swh_storage):