From 85c09b8f453f4b6085e9069c83d268dea261178f Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 20 Apr 2026 16:57:08 -0700 Subject: [PATCH] Fix AppFullLink (#37325) Fix a bug the checkout command line hint becomes `git fetch -u https://gitea.combircni/tea` --- services/context/context_template.go | 2 +- services/context/context_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/services/context/context_template.go b/services/context/context_template.go index 2b34681faa..2c8fde6870 100644 --- a/services/context/context_template.go +++ b/services/context/context_template.go @@ -88,7 +88,7 @@ func (c TemplateContext) AppFullLink(link ...string) template.URL { if len(link) == 0 { return template.URL(s) } - return template.URL(s + strings.TrimPrefix(link[0], "/")) + return template.URL(s + "/" + strings.TrimPrefix(link[0], "/")) } var globalVars = sync.OnceValue(func() (ret struct { diff --git a/services/context/context_test.go b/services/context/context_test.go index 54044644f0..aaf79de716 100644 --- a/services/context/context_test.go +++ b/services/context/context_test.go @@ -49,3 +49,17 @@ func TestRedirectToCurrentSite(t *testing.T) { }) } } + +func TestAppFullLink(t *testing.T) { + setting.IsInTesting = true + defer test.MockVariableValue(&setting.AppURL, "https://gitea.example.com/sub/")() + defer test.MockVariableValue(&setting.AppSubURL, "/sub")() + defer test.MockVariableValue(&setting.PublicURLDetection, setting.PublicURLNever)() + + req := httptest.NewRequest(http.MethodGet, "https://gitea.example.com/sub/", nil) + tmplCtx := NewTemplateContext(req.Context(), req) + + assert.Equal(t, "https://gitea.example.com/sub", string(tmplCtx.AppFullLink())) + assert.Equal(t, "https://gitea.example.com/sub/user/repo", string(tmplCtx.AppFullLink("user/repo"))) + assert.Equal(t, "https://gitea.example.com/sub/user/repo", string(tmplCtx.AppFullLink("/user/repo"))) +}