From 2ff32da5fcff6fbfe7bd3d1ebf254f469257b35a Mon Sep 17 00:00:00 2001
From: Antoine Lambert <anlambert@softwareheritage.org>
Date: Mon, 27 May 2024 14:43:15 +0200
Subject: [PATCH] golang: Ensure package version is uppercase encoded in
 download URL

While the package version was properly uppercase encoded in the URL
for fetching package version info, it was not in the download URL
resulting in 404 and partial visit of the golang origin.
---
 swh/loader/package/golang/loader.py                        | 2 +-
 .../github.com_adam-hanna_array!operations_@v_list         | 1 +
 ...ub.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.info | 1 +
 ...hub.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.zip | 1 +
 swh/loader/package/golang/tests/test_golang.py             | 7 ++++++-
 5 files changed, 10 insertions(+), 2 deletions(-)
 create mode 100644 swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.info
 create mode 120000 swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.zip

diff --git a/swh/loader/package/golang/loader.py b/swh/loader/package/golang/loader.py
index bbcd37a3..c1890da1 100644
--- a/swh/loader/package/golang/loader.py
+++ b/swh/loader/package/golang/loader.py
@@ -82,7 +82,7 @@ class GolangLoader(PackageLoader[GolangPackageInfo]):
         filename = f"{encoded_name}-{version}.zip"
         timestamp = TimestampWithTimezone.from_iso8601(self._raw_info(version)["Time"])
         p_info = GolangPackageInfo(
-            url=f"{self.url}/@v/{version}.zip",
+            url=f"{self.url}/@v/{_uppercase_encode(version)}.zip",
             filename=filename,
             version=version,
             timestamp=timestamp,
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
index b18d4654..298de5bf 100644
--- 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
@@ -1 +1,2 @@
 v1.0.1
+v1.0.1-RC1
diff --git a/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.info b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.info
new file mode 100644
index 00000000..369f7943
--- /dev/null
+++ b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.info
@@ -0,0 +1 @@
+{"Version":"v1.0.1-RC1","Time":"2022-02-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-!r!c1.zip b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.zip
new file mode 120000
index 00000000..d8b9df28
--- /dev/null
+++ b/swh/loader/package/golang/tests/data/https_proxy.golang.org/github.com_adam-hanna_array!operations_@v_v1.0.1-!r!c1.zip
@@ -0,0 +1 @@
+github.com_adam-hanna_array!operations_@v_v1.0.1.zip
\ No newline at end of file
diff --git a/swh/loader/package/golang/tests/test_golang.py b/swh/loader/package/golang/tests/test_golang.py
index 5888d9b2..e19864a9 100644
--- a/swh/loader/package/golang/tests/test_golang.py
+++ b/swh/loader/package/golang/tests/test_golang.py
@@ -13,13 +13,18 @@ def test_golang_loader_first_visit(swh_storage, requests_mock_datadir):
     assert loader.load()["status"] == "eventful"
 
 
-def test_golang_loader_package_name_with_uppercase_characters(
+def test_golang_loader_package_or_version_name_with_uppercase_characters(
     swh_storage, requests_mock_datadir
 ):
     url = "https://pkg.go.dev/github.com/adam-hanna/arrayOperations"
     loader = GolangLoader(swh_storage, url)
 
     assert loader.load()["status"] == "eventful"
+    assert set(loader.last_snapshot().branches) == {
+        b"releases/v1.0.1",
+        b"releases/v1.0.1-RC1",
+        b"HEAD",
+    }
 
 
 def test_golang_loader_package_with_dev_version_only(
-- 
GitLab