Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/debian/loader.py
Show First 20 Lines • Show All 66 Lines • ▼ Show 20 Lines | |||||
@attr.s | @attr.s | ||||
class DebianPackageInfo(BasePackageInfo): | class DebianPackageInfo(BasePackageInfo): | ||||
raw_info = attr.ib(type=Dict[str, Any]) | raw_info = attr.ib(type=Dict[str, Any]) | ||||
files = attr.ib(type=Dict[str, DebianFileMetadata]) | files = attr.ib(type=Dict[str, DebianFileMetadata]) | ||||
"""Metadata of the files (.deb, .dsc, ...) of the package.""" | """Metadata of the files (.deb, .dsc, ...) of the package.""" | ||||
name = attr.ib(type=str) | name = attr.ib(type=str) | ||||
full_version = attr.ib(type=str) | intrinsic_version = attr.ib(type=str) | ||||
"""eg. stretch/contrib/0.7.2-3""" | """eg. ``0.7.2-3``, while :attr:`version` would be ``stretch/contrib/0.7.2-3``""" | ||||
@classmethod | @classmethod | ||||
def from_metadata( | def from_metadata( | ||||
cls, a_metadata: Dict[str, Any], url: str, version: str | cls, a_metadata: Dict[str, Any], url: str, version: str | ||||
) -> "DebianPackageInfo": | ) -> "DebianPackageInfo": | ||||
intrinsic_version = a_metadata["version"] | |||||
assert "/" in version and "/" not in intrinsic_version, ( | |||||
version, | |||||
intrinsic_version, | |||||
) | |||||
return cls( | return cls( | ||||
url=url, | url=url, | ||||
filename=None, | filename=None, | ||||
version=version, | version=version, | ||||
raw_info=a_metadata, | raw_info=a_metadata, | ||||
files={ | files={ | ||||
file_name: DebianFileMetadata(**file_metadata) | file_name: DebianFileMetadata(**file_metadata) | ||||
for (file_name, file_metadata) in a_metadata.get("files", {}).items() | for (file_name, file_metadata) in a_metadata.get("files", {}).items() | ||||
}, | }, | ||||
name=a_metadata["name"], | name=a_metadata["name"], | ||||
full_version=a_metadata["version"], | intrinsic_version=intrinsic_version, | ||||
) | ) | ||||
def extid(self) -> Optional[PartialExtID]: | def extid(self) -> Optional[PartialExtID]: | ||||
dsc_files = [ | dsc_files = [ | ||||
file for (name, file) in self.files.items() if name.endswith(".dsc") | file for (name, file) in self.files.items() if name.endswith(".dsc") | ||||
] | ] | ||||
if len(dsc_files) != 1: | if len(dsc_files) != 1: | ||||
▲ Show 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | ) -> Optional[Release]: | ||||
p_info, dsc_path, uncompressed_path | p_info, dsc_path, uncompressed_path | ||||
) | ) | ||||
logger.debug("intrinsic_metadata: %s", intrinsic_metadata) | logger.debug("intrinsic_metadata: %s", intrinsic_metadata) | ||||
logger.debug("p_info: %s", p_info) | logger.debug("p_info: %s", p_info) | ||||
msg = ( | msg = ( | ||||
f"Synthetic release for Debian source package {p_info.name} " | f"Synthetic release for Debian source package {p_info.name} " | ||||
f"version {p_info.full_version}\n" | f"version {p_info.intrinsic_version}\n" | ||||
) | ) | ||||
author = prepare_person(intrinsic_metadata.changelog.person) | author = prepare_person(intrinsic_metadata.changelog.person) | ||||
date = TimestampWithTimezone.from_iso8601(intrinsic_metadata.changelog.date) | date = TimestampWithTimezone.from_iso8601(intrinsic_metadata.changelog.date) | ||||
# inspired from swh.loader.debian.converters.package_metadata_to_revision | # inspired from swh.loader.debian.converters.package_metadata_to_revision | ||||
return Release( | return Release( | ||||
name=p_info.version.encode(), | name=p_info.version.encode(), | ||||
▲ Show 20 Lines • Show All 90 Lines • ▼ Show 20 Lines | def dsc_information(p_info: DebianPackageInfo) -> Tuple[Optional[str], Optional[str]]: | ||||
""" | """ | ||||
dsc_name = None | dsc_name = None | ||||
dsc_url = None | dsc_url = None | ||||
for filename, fileinfo in p_info.files.items(): | for filename, fileinfo in p_info.files.items(): | ||||
if filename.endswith(".dsc"): | if filename.endswith(".dsc"): | ||||
if dsc_name: | if dsc_name: | ||||
raise DscCountError( | raise DscCountError( | ||||
"Package %s_%s references several dsc files." | "Package %s_%s references several dsc files." | ||||
% (p_info.name, p_info.version) | % (p_info.name, p_info.intrinsic_version) | ||||
) | ) | ||||
dsc_url = fileinfo.uri | dsc_url = fileinfo.uri | ||||
dsc_name = filename | dsc_name = filename | ||||
return dsc_url, dsc_name | return dsc_url, dsc_name | ||||
def extract_package(dl_artifacts: List[Tuple[str, Mapping]], dest: str) -> str: | def extract_package(dl_artifacts: List[Tuple[str, Mapping]], dest: str) -> str: | ||||
▲ Show 20 Lines • Show All 108 Lines • ▼ Show 20 Lines | ) -> IntrinsicPackageMetadata: | ||||
] | ] | ||||
maintainers.extend( | maintainers.extend( | ||||
uid_to_person(person) | uid_to_person(person) | ||||
for person in UPLOADERS_SPLIT.split(parsed_dsc.get("Uploaders", "")) | for person in UPLOADERS_SPLIT.split(parsed_dsc.get("Uploaders", "")) | ||||
) | ) | ||||
return IntrinsicPackageMetadata( | return IntrinsicPackageMetadata( | ||||
name=p_info.name, | name=p_info.name, | ||||
version=str(p_info.version), | version=str(p_info.intrinsic_version), | ||||
changelog=changelog, | changelog=changelog, | ||||
maintainers=maintainers, | maintainers=maintainers, | ||||
) | ) |