diff --git a/swh/loader/package/golang/loader.py b/swh/loader/package/golang/loader.py --- a/swh/loader/package/golang/loader.py +++ b/swh/loader/package/golang/loader.py @@ -5,6 +5,7 @@ import json import logging +import re from typing import Iterator, Optional, Sequence, Tuple import attr @@ -17,6 +18,10 @@ logger = logging.getLogger(__name__) +def _uppercase_encode(url: str) -> str: + return re.sub("([A-Z]{1})", r"!\1", url).lower() + + @attr.s class GolangPackageInfo(BasePackageInfo): name = attr.ib(type=str) @@ -46,6 +51,7 @@ ), "Go package URL (%s) not from %s" % (url, self.GOLANG_PKG_DEV_URL) self.name = url[len(self.GOLANG_PKG_DEV_URL) + 1 :] self.url = url.replace(self.GOLANG_PKG_DEV_URL, self.GOLANG_PROXY_URL) + self.url = _uppercase_encode(self.url) def get_versions(self) -> Sequence[str]: return api_info(f"{self.url}/@v/list").decode().splitlines() @@ -55,7 +61,7 @@ return json.loads(latest)["Version"] def _raw_info(self, version: str) -> dict: - url = f"{self.url}/@v/{version}.info" + url = f"{self.url}/@v/{_uppercase_encode(version)}.info" return json.loads(api_info(url)) def get_package_info(self, version: str) -> Iterator[Tuple[str, GolangPackageInfo]]: diff --git a/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@latest b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@latest new file mode 100644 --- /dev/null +++ b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@latest @@ -0,0 +1 @@ +{"Version":"v1.0.1","Time":"2022-03-23T18:02:43Z"} \ No newline at end of file diff --git a/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_list b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_list new file mode 100644 --- /dev/null +++ b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_list @@ -0,0 +1 @@ +v1.0.1 diff --git a/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1.info b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1.info new file mode 100644 --- /dev/null +++ b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1.info @@ -0,0 +1 @@ +{"Version":"v1.0.1","Time":"2022-03-23T18:02:43Z"} \ No newline at end of file diff --git a/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1.zip b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@