fix(git): keep IPv6 brackets in submodule web links (#39186) (#39198)

Co-authored-by: Zhaoqi Xu <lzy00419@outlook.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
Giteabot
2026-09-01 06:59:58 +00:00
committed by GitHub
co-authored by Zhaoqi Xu wxiaoguang
parent f0b4a4142b
commit e3d9b03f84
2 changed files with 15 additions and 3 deletions
+7 -3
View File
@@ -171,11 +171,15 @@ func MakeRepositoryWebLink(repoURL *RepositoryURL) string {
case "http", "https":
return strings.TrimSuffix(repoURL.GitURL.String(), ".git")
case "ssh", "git+ssh":
hostname, _, _ := net.SplitHostPort(repoURL.GitURL.Host)
hostname = util.IfZero(hostname, repoURL.GitURL.Host)
// only get the hostname part (with IPv6 square brackets)
host, _, _ := net.SplitHostPort(repoURL.GitURL.Host)
host = strings.TrimSuffix(net.JoinHostPort(host, "dummy-port"), ":dummy-port")
// if failed to parse the host, use it as is
host = util.IfZero(host, repoURL.GitURL.Host)
urlPath := strings.TrimSuffix(repoURL.GitURL.Path, ".git")
urlPath = strings.TrimPrefix(urlPath, "/")
urlFull := fmt.Sprintf("https://%s/%s", hostname, urlPath)
urlFull := fmt.Sprintf("https://%s/%s", host, urlPath)
urlFull = strings.TrimSuffix(urlFull, "/")
return urlFull
}
+8
View File
@@ -264,4 +264,12 @@ func TestMakeRepositoryBaseLink(t *testing.T) {
u, err = ParseRepositoryURL(t.Context(), "git+ssh://other:123/owner/repo.git")
assert.NoError(t, err)
assert.Equal(t, "https://other/owner/repo", MakeRepositoryWebLink(u))
u, err = ParseRepositoryURL(t.Context(), "git+ssh://[::1]/owner/repo.git")
assert.NoError(t, err)
assert.Equal(t, "https://[::1]/owner/repo", MakeRepositoryWebLink(u))
u, err = ParseRepositoryURL(t.Context(), "git+ssh://[::1]:2222/owner/repo.git")
assert.NoError(t, err)
assert.Equal(t, "https://[::1]/owner/repo", MakeRepositoryWebLink(u))
}