File tree Expand file tree Collapse file tree 2 files changed +36
-7
lines changed
Expand file tree Collapse file tree 2 files changed +36
-7
lines changed Original file line number Diff line number Diff line change 11from __future__ import annotations
22
33import json
4+ import os
45import re
56import subprocess
7+ import urllib .error
68import urllib .request
79
810from packaging import requirements
@@ -41,11 +43,24 @@ def golang_get_package_versions(package_name: str) -> list[str]:
4143 r'[A-Z]' ,
4244 lambda m : f'!{ m .group (0 ).lower ()} ' , package_name ,
4345 )
44- url = f'https://proxy.golang.org/{ escaped } /@v/list'
45- resp = urllib .request .urlopen (url ).read ().decode ()
46- return sorted (
47- (v .removeprefix ('v' ) for v in resp .splitlines ()),
48- key = version .parse ,
46+
47+ while escaped :
48+ url = f'https://proxy.golang.org/{ escaped } /@v/list'
49+ try :
50+ resp = urllib .request .urlopen (url ).read ().decode ()
51+ except urllib .error .HTTPError as exc :
52+ if exc .code == 404 :
53+ escaped = os .path .dirname (escaped )
54+ continue
55+ raise
56+
57+ return sorted (
58+ (v .removeprefix ('v' ) for v in resp .splitlines ()),
59+ key = version .parse ,
60+ )
61+
62+ raise ValueError (
63+ f'Cannot find package name { package_name } on proxy.golang.org' ,
4964 )
5065
5166
Original file line number Diff line number Diff line change 11from __future__ import annotations
22
3+ import pytest
4+
35from pre_commit_mirror_maker .languages import golang_get_package_versions
46from pre_commit_mirror_maker .languages import node_get_package_versions
57from pre_commit_mirror_maker .languages import python_get_package_versions
@@ -42,8 +44,20 @@ def test_rust_get_package_version_output():
4244 assert_all_text (ret )
4345
4446
45- def test_golang_get_package_version_output ():
46- ret = golang_get_package_versions ('mvdan.cc/gofumpt' )
47+ @pytest .mark .parametrize (
48+ 'package_name' ,
49+ (
50+ 'mvdan.cc/gofumpt' ,
51+ 'mvdan.cc/sh/v3/cmd/shfmt' ,
52+ ),
53+ )
54+ def test_golang_get_package_version_output (package_name ):
55+ ret = golang_get_package_versions (package_name )
4756 assert ret
4857 assert not any (v .startswith ('v' ) for v in ret )
4958 assert_all_text (ret )
59+
60+
61+ def test_golang_get_package_version_invalid_package ():
62+ with pytest .raises (ValueError ):
63+ golang_get_package_versions ('mvdan.cc/foo' )
You can’t perform that action at this time.
0 commit comments