File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -644,6 +644,41 @@ def build_deb_download_url(purl_str: str) -> str:
644644 return f"{ base_url } { pool_path } /{ filename } "
645645
646646
647+ @download_router .route ("pkg:qpkg/.*" )
648+ def build_qpkg_download_url (purl : str ) -> str :
649+ purl = PackageURL .from_string (purl )
650+ repo_url = purl .qualifiers .get ("repo_url" )
651+
652+ if not repo_url :
653+ raise ValueError ("repository_url qualifier is required for qpkg purl resolution" )
654+
655+ if not purl .namespace or not purl .name or not purl .version :
656+ raise ValueError ("namespace, name, and version must be present in qpkg purl" )
657+
658+ path = f"{ purl .namespace } /{ purl .name } /{ purl .version } .qpkg"
659+ return f"{ repo_url .rstrip ('/' )} /{ path } "
660+
661+
662+ @download_router .route ("pkg:apk/.*" )
663+ def build_apk_download_url (purl ):
664+ """
665+ Return a download URL for a fully qualified Alpine Linux package PURL.
666+
667+ Example:
668+ pkg:apk/acct@6.6.4-r0?arch=x86&alpine_version=v3.11&repo=main
669+ """
670+ purl = PackageURL .from_string (purl )
671+ name = purl .name
672+ version = purl .version
673+ arch = purl .qualifiers .get ("arch" )
674+ repo = purl .qualifiers .get ("repo" )
675+ alpine_version = purl .qualifiers .get ("alpine_version" )
676+
677+ return (
678+ f"https://dl-cdn.alpinelinux.org/alpine/{ alpine_version } /{ repo } /{ arch } /{ name } -{ version } .apk"
679+ )
680+
681+
647682def get_repo_download_url (purl ):
648683 """
649684 Return ``download_url`` if present in ``purl`` qualifiers or
Original file line number Diff line number Diff line change @@ -112,6 +112,8 @@ def test_purl2url_get_download_url():
112112 "pkg:alpm/arch/pacman@6.0.1-1?arch=x86_64" : "https://archive.archlinux.org/packages/p/pacman/pacman-6.0.1-1-x86_64.pkg.tar.zst" ,
113113 "pkg:deb/debian/attr@1:2.4.48-6?arch=amd64" : "https://deb.debian.org/debian/pool/main/a/attr/attr_2.4.48-6_amd64.deb" ,
114114 "pkg:deb/debian/attr@1:2.4.48-6?arch=amd64&repository_url=http://archive.debian.org/debian" : "http://archive.debian.org/debian/pool/main/a/attr/attr_2.4.48-6_amd64.deb" ,
115+ "pkg:qpkg/blackberry/com.qnx.sdp@7.0.0.SGA201702151847?repo_url=http://repo.blackberry.com" : "http://repo.blackberry.com/blackberry/com.qnx.sdp/7.0.0.SGA201702151847.qpkg" ,
116+ "pkg:apk/acct@6.6.4-r0?arch=x86&alpine_version=v3.11&repo=main" : "https://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86/acct-6.6.4-r0.apk" ,
115117 # From `download_url` qualifier
116118 "pkg:github/yarnpkg/yarn@1.3.2?download_url=https://github.com/yarnpkg/yarn/releases/download/v1.3.2/yarn-v1.3.2.tar.gz&version_prefix=v" : "https://github.com/yarnpkg/yarn/releases/download/v1.3.2/yarn-v1.3.2.tar.gz" ,
117119 "pkg:generic/lxc-master.tar.gz?download_url=https://salsa.debian.org/lxc-team/lxc/-/archive/master/lxc-master.tar.gz" : "https://salsa.debian.org/lxc-team/lxc/-/archive/master/lxc-master.tar.gz" ,
You can’t perform that action at this time.
0 commit comments