From 9bb8751b29dc4acdda06431e61d1eb72f6b19f34 Mon Sep 17 00:00:00 2001 From: KBS Date: Sun, 4 Oct 2026 22:40:27 +0900 Subject: [PATCH] fix(git): return no submodule web link when the URL cannot be parsed (#39274) --- modules/git/commit_submodule_file.go | 4 ++-- modules/git/commit_submodule_file_test.go | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/git/commit_submodule_file.go b/modules/git/commit_submodule_file.go index fe925dda97a..b966db031dc 100644 --- a/modules/git/commit_submodule_file.go +++ b/modules/git/commit_submodule_file.go @@ -46,11 +46,11 @@ func (sf *CommitSubmoduleFile) getWebLinkInTargetRepo(ctx context.Context, moreL return &SubmoduleWebLink{RepoWebLink: targetLink, CommitWebLink: targetLink + moreLinkPath} } if !sf.parsed { - sf.parsed = true parsedURL, err := giturl.ParseRepositoryURL(ctx, sf.refURL) if err != nil { - return nil + return nil // do not mark as parsed, otherwise later calls would return a link with an empty target } + sf.parsed = true sf.parsedTargetLink = giturl.MakeRepositoryWebLink(parsedURL) } return &SubmoduleWebLink{RepoWebLink: sf.parsedTargetLink, CommitWebLink: sf.parsedTargetLink + moreLinkPath} diff --git a/modules/git/commit_submodule_file_test.go b/modules/git/commit_submodule_file_test.go index 33fe1464446..7d2cf67decb 100644 --- a/modules/git/commit_submodule_file_test.go +++ b/modules/git/commit_submodule_file_test.go @@ -37,4 +37,11 @@ func TestCommitSubmoduleLink(t *testing.T) { assert.Equal(t, "/subpath/user/repo", wl.RepoWebLink) assert.Equal(t, "/subpath/user/repo/compare/1111...2222", wl.CommitWebLink) }) + + t.Run("UnparsableURL", func(t *testing.T) { + // both calls share one instance on purpose: the second one used to see the cached parse result + sf := NewCommitSubmoduleFile("/any/repo-link", "full-path", "git@github.com:", "aaaa") + assert.Nil(t, sf.SubmoduleWebLinkTree(t.Context())) + assert.Nil(t, sf.SubmoduleWebLinkCompare(t.Context(), "1111", "2222")) + }) }