Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/opam/loader.py
Show First 20 Lines • Show All 211 Lines • ▼ Show 20 Lines | def get_package_info(self, version: str) -> Iterator[Tuple[str, OpamPackageInfo]]: | ||||
url = self.get_enclosed_single_line_field("url.src:", version) | url = self.get_enclosed_single_line_field("url.src:", version) | ||||
if url is None: | if url is None: | ||||
raise ValueError( | raise ValueError( | ||||
f"can't get field url.src: for version {version} of package" | f"can't get field url.src: for version {version} of package" | ||||
f" {self.opam_package} (at url {self.origin.url}) from `opam show`" | f" {self.opam_package} (at url {self.origin.url}) from `opam show`" | ||||
) | ) | ||||
checksums_str = self.get_enclosed_single_line_field("url.checksum:", version) | |||||
checksums = {} | |||||
if checksums_str: | |||||
for c in checksums_str.strip("[]").split(" "): | |||||
algo, hash = c.strip('"').split("=") | |||||
checksums[algo] = hash | |||||
authors_field = self.get_enclosed_single_line_field("authors:", version) | authors_field = self.get_enclosed_single_line_field("authors:", version) | ||||
fullname = b"" if authors_field is None else str.encode(authors_field) | fullname = b"" if authors_field is None else str.encode(authors_field) | ||||
author = Person.from_fullname(fullname) | author = Person.from_fullname(fullname) | ||||
maintainer_field = self.get_enclosed_single_line_field("maintainer:", version) | maintainer_field = self.get_enclosed_single_line_field("maintainer:", version) | ||||
fullname = b"" if maintainer_field is None else str.encode(maintainer_field) | fullname = b"" if maintainer_field is None else str.encode(maintainer_field) | ||||
committer = Person.from_fullname(fullname) | committer = Person.from_fullname(fullname) | ||||
with Popen(self._opam_show_args(version) + ["--raw"], stdout=PIPE) as proc: | with Popen(self._opam_show_args(version) + ["--raw"], stdout=PIPE) as proc: | ||||
assert proc.stdout is not None | assert proc.stdout is not None | ||||
metadata = proc.stdout.read() | metadata = proc.stdout.read() | ||||
yield self.get_package_name(version), OpamPackageInfo( | yield self.get_package_name(version), OpamPackageInfo( | ||||
url=url, | url=url, | ||||
filename=None, | filename=None, | ||||
author=author, | author=author, | ||||
committer=committer, | committer=committer, | ||||
version=version, | version=version, | ||||
directory_extrinsic_metadata=[ | directory_extrinsic_metadata=[ | ||||
RawExtrinsicMetadataCore( | RawExtrinsicMetadataCore( | ||||
metadata=metadata, | metadata=metadata, | ||||
format="opam-package-definition", | format="opam-package-definition", | ||||
) | ) | ||||
], | ], | ||||
checksums=checksums, | |||||
) | ) | ||||
def build_release( | def build_release( | ||||
self, | self, | ||||
p_info: OpamPackageInfo, | p_info: OpamPackageInfo, | ||||
uncompressed_path: str, | uncompressed_path: str, | ||||
directory: Sha1Git, | directory: Sha1Git, | ||||
) -> Optional[Release]: | ) -> Optional[Release]: | ||||
Show All 14 Lines |