Link to crates.io and rubygems.org if PURLs are available

This commit is contained in:
Christoph Reiter 2025-02-25 08:50:59 +01:00
parent 1bfc1927c8
commit b40daf8b11
3 changed files with 35 additions and 2 deletions

View File

@ -14,6 +14,7 @@ from typing import NamedTuple, Any
from collections.abc import Sequence
from pydantic import BaseModel
from dataclasses import dataclass
from packageurl import PackageURL
from .appconfig import REPOSITORIES
from .utils import vercmp, version_is_newer_than, extract_upstream_version, split_depends, \
@ -600,6 +601,19 @@ class Source:
ext.append((ext_id, infos[realname]))
break
for purl_str in self.pkgextra.references.get("purl", []):
if purl_str is None:
continue
purl = PackageURL.from_string(purl_str)
if purl.type == "cargo":
ext.append((
ExtId("cargo", "crates.io", True, True),
ExtInfo(purl.name, None, 0, f"https://crates.io/crates/{quote(purl.name)}", {})))
elif purl.type == "gem":
ext.append((
ExtId("gem", "RubyGems", True, True),
ExtInfo(purl.name, None, 0, f"https://rubygems.org/gems/{quote(purl.name)}", {})))
# XXX: let repology do the mapping for us
repology_repo = "msys2_msys2" if self._package.repo == "msys" else "msys2_mingw"
ext.append((

22
poetry.lock generated
View File

@ -1,4 +1,4 @@
# This file is automatically @generated by Poetry 2.1.0 and should not be changed by hand.
# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand.
[[package]]
name = "aiolimiter"
@ -786,6 +786,24 @@ files = [
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
]
[[package]]
name = "packageurl-python"
version = "0.16.0"
description = "A purl aka. Package URL parser and builder"
optional = false
python-versions = ">=3.8"
groups = ["main"]
files = [
{file = "packageurl_python-0.16.0-py3-none-any.whl", hash = "sha256:5c3872638b177b0f1cf01c3673017b7b27ebee485693ae12a8bed70fa7fa7c35"},
{file = "packageurl_python-0.16.0.tar.gz", hash = "sha256:69e3bf8a3932fe9c2400f56aaeb9f86911ecee2f9398dbe1b58ec34340be365d"},
]
[package.extras]
build = ["setuptools", "wheel"]
lint = ["black", "isort", "mypy"]
sqlalchemy = ["sqlalchemy (>=2.0.0)"]
test = ["pytest"]
[[package]]
name = "packaging"
version = "24.2"
@ -1650,4 +1668,4 @@ cffi = ["cffi (>=1.11)"]
[metadata]
lock-version = "2.1"
python-versions = "^3.10"
content-hash = "61ccccbb7e5c53529ece0f2344696f8eb2a65e40217b6b8f5d303fad98820e2d"
content-hash = "e1126be5f15426d67aa652315ba641392122b4f0a57f34d227e2217db7043383"

View File

@ -19,6 +19,7 @@ pydantic = "^2.0.3"
zstandard = "^0.23.0"
MarkupSafe = "^3.0.2"
uvicorn-worker = "^0.3.0"
packageurl-python = "^0.16.0"
[tool.poetry.group.dev.dependencies]
reuse = "^5.0.2"