mirror of
https://github.com/go-gitea/gitea.git
synced 2026-09-06 04:53:22 +09:00
fix(git): keep IPv6 brackets in submodule web links (#39186)
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
@@ -171,11 +171,15 @@ func MakeRepositoryWebLink(repoURL *RepositoryURL) string {
|
|||||||
case "http", "https":
|
case "http", "https":
|
||||||
return strings.TrimSuffix(repoURL.GitURL.String(), ".git")
|
return strings.TrimSuffix(repoURL.GitURL.String(), ".git")
|
||||||
case "ssh", "git+ssh":
|
case "ssh", "git+ssh":
|
||||||
hostname, _, _ := net.SplitHostPort(repoURL.GitURL.Host)
|
// only get the hostname part (with IPv6 square brackets)
|
||||||
hostname = util.IfZero(hostname, repoURL.GitURL.Host)
|
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.TrimSuffix(repoURL.GitURL.Path, ".git")
|
||||||
urlPath = strings.TrimPrefix(urlPath, "/")
|
urlPath = strings.TrimPrefix(urlPath, "/")
|
||||||
urlFull := fmt.Sprintf("https://%s/%s", hostname, urlPath)
|
urlFull := fmt.Sprintf("https://%s/%s", host, urlPath)
|
||||||
urlFull = strings.TrimSuffix(urlFull, "/")
|
urlFull = strings.TrimSuffix(urlFull, "/")
|
||||||
return urlFull
|
return urlFull
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -264,4 +264,12 @@ func TestMakeRepositoryBaseLink(t *testing.T) {
|
|||||||
u, err = ParseRepositoryURL(t.Context(), "git+ssh://other:123/owner/repo.git")
|
u, err = ParseRepositoryURL(t.Context(), "git+ssh://other:123/owner/repo.git")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "https://other/owner/repo", MakeRepositoryWebLink(u))
|
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))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user