Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/opam/loader.py
| Show First 20 Lines • Show All 128 Lines • ▼ Show 20 Lines | def _compute_versions(self) -> List[str]: | ||||
| """ | """ | ||||
| # TODO: use `opam show` instead of this workaround when it support the `--repo` | # TODO: use `opam show` instead of this workaround when it support the `--repo` | ||||
| # flag | # flag | ||||
| package_dir = self.get_package_dir() | package_dir = self.get_package_dir() | ||||
| if not os.path.exists(package_dir): | if not os.path.exists(package_dir): | ||||
| raise ValueError( | raise ValueError( | ||||
| f"can't get versions for package {self.opam_package} " | f"can't get versions for package {self.opam_package} " | ||||
| f"(at url {self.url})." | f"(at url {self.origin.url})." | ||||
| ) | ) | ||||
| versions = [ | versions = [ | ||||
| ".".join(version.split(".")[1:]) for version in os.listdir(package_dir) | ".".join(version.split(".")[1:]) for version in os.listdir(package_dir) | ||||
| ] | ] | ||||
| if not versions: | if not versions: | ||||
| raise ValueError( | raise ValueError( | ||||
| f"can't get versions for package {self.opam_package} " | f"can't get versions for package {self.opam_package} " | ||||
| f"(at url {self.url})" | f"(at url {self.origin.url})" | ||||
| ) | ) | ||||
| versions.sort() | versions.sort() | ||||
| return versions | return versions | ||||
| def get_versions(self) -> List[str]: | def get_versions(self) -> List[str]: | ||||
| """First initialize the opam root directory if needed then start listing the | """First initialize the opam root directory if needed then start listing the | ||||
| package versions. | package versions. | ||||
| ▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | def get_enclosed_single_line_field(self, field, version) -> Optional[str]: | ||||
| return result.strip().strip('"') if result else None | return result.strip().strip('"') if result else None | ||||
| def get_package_info(self, version: str) -> Iterator[Tuple[str, OpamPackageInfo]]: | 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 {self.opam_package}" | f"can't get field url.src: for version {version} of package {self.opam_package}" | ||||
| f" (at url {self.url}) from `opam show`" | f" (at url {self.origin.url}) from `opam show`" | ||||
| ) | ) | ||||
| 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) | ||||
| Show All 40 Lines | |||||