diff --git a/src/packageurl/contrib/purl2url.py b/src/packageurl/contrib/purl2url.py index 5806251..eb222a3 100644 --- a/src/packageurl/contrib/purl2url.py +++ b/src/packageurl/contrib/purl2url.py @@ -468,7 +468,7 @@ def build_golang_download_url(purl): name = purl_data.name version = purl_data.version - if not name: + if not name or not version: return # TODO: https://github.com/package-url/packageurl-python/issues/197 @@ -481,8 +481,7 @@ def build_golang_download_url(purl): if not eversion.startswith("v"): eversion = "v" + eversion - if name and version: - return f"https://proxy.golang.org/{ename}/@v/{eversion}.zip" + return f"https://proxy.golang.org/{ename}/@v/{eversion}.zip" @download_router.route("pkg:pub/.*") diff --git a/tests/contrib/test_purl2url.py b/tests/contrib/test_purl2url.py index b34348c..fd94a40 100644 --- a/tests/contrib/test_purl2url.py +++ b/tests/contrib/test_purl2url.py @@ -194,3 +194,19 @@ def test_purl2url_get_repo_url_with_invalid_purls(): with pytest.raises(Exception) as e_info: purl2url.get_repo_url(purl) assert "Invalid PURL" == e_info + + +@pytest.mark.parametrize( + "purl", + [ + "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", + "pkg:golang/github.com/gorilla/context", + ], +) +def test_golang_download_without_version(purl): + assert purl2url.get_download_url(purl) is None + + +def test_golang_download_without_version_uses_download_qualifier(): + purl = "pkg:golang/github.com/gorilla/context?download_url=https://example.com/context.zip" + assert purl2url.get_download_url(purl) == "https://example.com/context.zip"