diff --git a/swh/loader/package/cpan/loader.py b/swh/loader/package/cpan/loader.py --- a/swh/loader/package/cpan/loader.py +++ b/swh/loader/package/cpan/loader.py @@ -15,9 +15,11 @@ from swh.loader.package.loader import ( BasePackageInfo, PackageLoader, + PartialExtID, RawExtrinsicMetadataCore, ) from swh.loader.package.utils import EMPTY_AUTHOR, Person, get_url_body, release_name +from swh.model.hashutil import hash_to_bytes from swh.model.model import ( MetadataAuthority, MetadataAuthorityType, @@ -30,6 +32,9 @@ logger = logging.getLogger(__name__) +EXTID_TYPE = "cpan-archive-sha256" +EXTID_VERSION = 0 + @attr.s class CpanPackageInfo(BasePackageInfo): @@ -46,6 +51,9 @@ author = attr.ib(type=Person) """Author""" + def extid(self) -> PartialExtID: + return (EXTID_TYPE, EXTID_VERSION, hash_to_bytes(self.checksums["sha256"])) + class CpanLoader(PackageLoader[CpanPackageInfo]): visit_type = "cpan" diff --git a/swh/loader/package/cpan/tests/test_cpan.py b/swh/loader/package/cpan/tests/test_cpan.py --- a/swh/loader/package/cpan/tests/test_cpan.py +++ b/swh/loader/package/cpan/tests/test_cpan.py @@ -11,7 +11,7 @@ import pytest from swh.loader.package import __version__ -from swh.loader.package.cpan.loader import CpanLoader +from swh.loader.package.cpan.loader import EXTID_TYPE, EXTID_VERSION, CpanLoader from swh.loader.tests import assert_last_visit_matches, check_snapshot, get_stats from swh.model.hashutil import hash_to_bytes from swh.model.model import ( @@ -207,3 +207,20 @@ ).results == expected_metadata ) + + extids = storage.extid_get_from_extid( + id_type=EXTID_TYPE, + ids=[ + hash_to_bytes(artifact["checksums"]["sha256"]) + for artifact in ORIGIN_ARTIFACTS + ], + version=EXTID_VERSION, + ) + + release_swhids = { + CoreSWHID(object_type=ObjectType.RELEASE, object_id=branch.target) + for branch in expected_snapshot.branches.values() + if branch.target_type == TargetType.RELEASE + } + + assert {extid.target for extid in extids} == release_swhids