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 @@ -176,6 +176,9 @@ seen_snapshots.add(status.snapshot) snapshot = snapshot_get_all_branches(storage, status.snapshot) for (branch_name, branch) in snapshot.branches.items(): + if branch is None: + continue + # If it's the revision passed as argument, then it is indeed in the # origin if branch.target == revision_id: 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 @@ -216,6 +216,16 @@ with patch("snapshot_get_all_branches", return_value=snapshot): assert debian_origins_from_row(revision_row, storage) == [] + snapshot = attr.evolve(snapshot, branches={b"foo": None,},) + + # dangling branch + 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 == [] + snapshot = attr.evolve( snapshot, branches={