diff --git a/docs/package-loader-specifications.rst b/docs/package-loader-specifications.rst --- a/docs/package-loader-specifications.rst +++ b/docs/package-loader-specifications.rst @@ -39,14 +39,17 @@ - ``metadata.get(​"Date")`` - metadata is intrinsic * - debian - - passed as arg (eg. ``stretch/contrib/0.7.2-3``) + - =``version`` - ``release_name(​version)`` - - =version - - standard message (using full version) + - =``version`` + - standard message (using ``i_version``) - true - ``metadata​.changelog​.person`` - ``metadata​.changelog​.date`` - metadata is intrinsic. Old revisions have ``dsc`` as type + ``i_version`` is the intrinsic version (eg. ``1.0.0``) while ``version`` + contains the debian suite name (eg. ``stretch/contrib/0.7.2-3``) and is + passed as arg * - deposit - HEAD - only HEAD diff --git a/swh/loader/package/debian/loader.py b/swh/loader/package/debian/loader.py --- a/swh/loader/package/debian/loader.py +++ b/swh/loader/package/debian/loader.py @@ -71,13 +71,18 @@ files = attr.ib(type=Dict[str, DebianFileMetadata]) """Metadata of the files (.deb, .dsc, ...) of the package.""" name = attr.ib(type=str) - full_version = attr.ib(type=str) - """eg. stretch/contrib/0.7.2-3""" + intrinsic_version = attr.ib(type=str) + """eg. ``0.7.2-3``, while :attr:`version` would be ``stretch/contrib/0.7.2-3``""" @classmethod def from_metadata( cls, a_metadata: Dict[str, Any], url: str, version: str ) -> "DebianPackageInfo": + intrinsic_version = a_metadata["version"] + assert "/" in version and "/" not in intrinsic_version, ( + version, + intrinsic_version, + ) return cls( url=url, filename=None, @@ -88,7 +93,7 @@ for (file_name, file_metadata) in a_metadata.get("files", {}).items() }, name=a_metadata["name"], - full_version=a_metadata["version"], + intrinsic_version=intrinsic_version, ) def extid(self) -> Optional[PartialExtID]: @@ -227,7 +232,7 @@ msg = ( 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) @@ -338,7 +343,7 @@ if dsc_name: raise DscCountError( "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_name = filename @@ -463,7 +468,7 @@ return IntrinsicPackageMetadata( name=p_info.name, - version=str(p_info.version), + version=str(p_info.intrinsic_version), changelog=changelog, maintainers=maintainers, ) diff --git a/swh/loader/package/debian/tests/test_debian.py b/swh/loader/package/debian/tests/test_debian.py --- a/swh/loader/package/debian/tests/test_debian.py +++ b/swh/loader/package/debian/tests/test_debian.py @@ -282,7 +282,9 @@ def test_debian_download_package(datadir, tmpdir, requests_mock_datadir): tmpdir = str(tmpdir) # py3.5 work around (LocalPath issue) - p_info = DebianPackageInfo.from_metadata(PACKAGE_FILES, url=URL, version="0.7.2-3") + p_info = DebianPackageInfo.from_metadata( + PACKAGE_FILES, url=URL, version="stretch/contrib/0.7.2-3" + ) all_hashes = download_package(p_info, tmpdir) assert all_hashes == { "cicero_0.7.2-3.diff.gz": { @@ -328,7 +330,9 @@ def test_debian_dsc_information_ok(): fname = "cicero_0.7.2-3.dsc" - p_info = DebianPackageInfo.from_metadata(PACKAGE_FILES, url=URL, version="0.7.2-3") + p_info = DebianPackageInfo.from_metadata( + PACKAGE_FILES, url=URL, version="stretch/contrib/0.7.2-3" + ) dsc_url, dsc_name = dsc_information(p_info) assert dsc_url == PACKAGE_FILES["files"][fname]["uri"] @@ -337,7 +341,9 @@ def test_debian_dsc_information_not_found(): fname = "cicero_0.7.2-3.dsc" - p_info = DebianPackageInfo.from_metadata(PACKAGE_FILES, url=URL, version="0.7.2-3") + p_info = DebianPackageInfo.from_metadata( + PACKAGE_FILES, url=URL, version="stretch/contrib/0.7.2-3" + ) p_info.files.pop(fname) dsc_url, dsc_name = dsc_information(p_info) @@ -352,7 +358,9 @@ for package_metadata in package_files["files"].values(): del package_metadata["md5sum"] - p_info = DebianPackageInfo.from_metadata(package_files, url=URL, version="0.7.2-3") + p_info = DebianPackageInfo.from_metadata( + package_files, url=URL, version="stretch/contrib/0.7.2-3" + ) for debian_file_metadata in p_info.files.values(): assert not debian_file_metadata.md5sum @@ -365,7 +373,9 @@ file_bytes = requests.get(package_metadata["uri"]).content package_metadata["sha1"] = hashlib.sha1(file_bytes).hexdigest() - p_info = DebianPackageInfo.from_metadata(package_files, url=URL, version="0.7.2-3") + p_info = DebianPackageInfo.from_metadata( + package_files, url=URL, version="stretch/contrib/0.7.2-3" + ) for debian_file_metadata in p_info.files.values(): assert debian_file_metadata.sha1 @@ -374,7 +384,9 @@ def test_debian_dsc_information_too_many_dsc_entries(): # craft an extra dsc file fname = "cicero_0.7.2-3.dsc" - p_info = DebianPackageInfo.from_metadata(PACKAGE_FILES, url=URL, version="0.7.2-3") + p_info = DebianPackageInfo.from_metadata( + PACKAGE_FILES, url=URL, version="stretch/contrib/0.7.2-3" + ) data = p_info.files[fname] fname2 = fname.replace("cicero", "ciceroo") p_info.files[fname2] = data @@ -391,7 +403,9 @@ requests_mock_datadir, datadir, tmp_path ): tmp_path = str(tmp_path) # py3.5 compat. - p_info = DebianPackageInfo.from_metadata(PACKAGE_FILES, url=URL, version="0.7.2-3") + p_info = DebianPackageInfo.from_metadata( + PACKAGE_FILES, url=URL, version="stretch/contrib/0.7.2-3" + ) logger.debug("p_info: %s", p_info)