diff --git a/swh/storage/migrate_extrinsic_metadata.py b/swh/storage/migrate_extrinsic_metadata.py --- a/swh/storage/migrate_extrinsic_metadata.py +++ b/swh/storage/migrate_extrinsic_metadata.py @@ -189,6 +189,10 @@ seen_revisions.add(branch.target) revision = storage.revision_get([branch.target])[0] + if revision is None: + # https://forge.softwareheritage.org/T997 + continue + # Check it's DSC (we only support those for now) assert ( revision.type == RevisionType.DSC diff --git a/swh/storage/tests/migrate_extrinsic_metadata/test_debian.py b/swh/storage/tests/migrate_extrinsic_metadata/test_debian.py --- a/swh/storage/tests/migrate_extrinsic_metadata/test_debian.py +++ b/swh/storage/tests/migrate_extrinsic_metadata/test_debian.py @@ -214,6 +214,27 @@ with patch("snapshot_get_all_branches", return_value=snapshot): assert debian_origins_from_row(revision_row, storage) == [] + snapshot = attr.evolve( + snapshot, + branches={ + b"foo": SnapshotBranch(target_type=TargetType.REVISION, target=b"21" * 10,) + }, + ) + storage.revision_get.return_value = [None] + + # branch points to unknown revision + with patch("iter_origin_visits", return_value=[visit]): + with patch("iter_origin_visit_statuses", return_value=[status]): + with patch("snapshot_get_all_branches", return_value=snapshot): + assert debian_origins_from_row(revision_row, storage) == [] + + assert storage.method_calls == [ + call.revision_get([b"21212121212121212121"]), + call.revision_get([b"21212121212121212121"]), + call.revision_get([b"21212121212121212121"]), + ] + storage.reset_mock() + revision = Revision( id=b"21" * 10, message=b"foo", @@ -245,7 +266,11 @@ with patch("snapshot_get_all_branches", return_value=snapshot): assert debian_origins_from_row(revision_row, storage) == [] - assert storage.method_calls == [] + assert storage.method_calls == [ + call.revision_get([b"21212121212121212121"]), + call.revision_get([b"21212121212121212121"]), + call.revision_get([b"21212121212121212121"]), + ] def test_debian_origins_from_row__check_revisions():