From 6347a33b34f501ef5f788948cb9742fb046f6af5 Mon Sep 17 00:00:00 2001
From: wxiaoguang
Date: Mon, 3 Aug 2026 22:41:38 +0800
Subject: [PATCH] fix: markup link (#38764)
fix #38762
---
models/renderhelper/repo_file.go | 6 +++---
models/renderhelper/repo_file_test.go | 12 ++++++------
models/renderhelper/repo_wiki.go | 4 ++--
models/renderhelper/repo_wiki_test.go | 8 +++++---
4 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/models/renderhelper/repo_file.go b/models/renderhelper/repo_file.go
index c587c39f2b5..9862aa549ef 100644
--- a/models/renderhelper/repo_file.go
+++ b/models/renderhelper/repo_file.go
@@ -35,11 +35,11 @@ func (r *RepoFile) ResolveLink(link, preferLinkType string) (finalLink string) {
case markup.LinkTypeRoot:
finalLink = r.ctx.ResolveLinkRoot(link)
case markup.LinkTypeRaw:
- finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "raw", r.opts.CurrentRefSubURL), r.opts.CurrentTreePath, link)
+ finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "raw", r.opts.CurrentRefSubURL), util.PathEscapeSegments(r.opts.CurrentTreePath), link)
case markup.LinkTypeMedia:
- finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "media", r.opts.CurrentRefSubURL), r.opts.CurrentTreePath, link)
+ finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "media", r.opts.CurrentRefSubURL), util.PathEscapeSegments(r.opts.CurrentTreePath), link)
default:
- finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "src", r.opts.CurrentRefSubURL), r.opts.CurrentTreePath, link)
+ finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "src", r.opts.CurrentRefSubURL), util.PathEscapeSegments(r.opts.CurrentTreePath), link)
}
return finalLink
}
diff --git a/models/renderhelper/repo_file_test.go b/models/renderhelper/repo_file_test.go
index bb95501bec4..45b7006a43e 100644
--- a/models/renderhelper/repo_file_test.go
+++ b/models/renderhelper/repo_file_test.go
@@ -68,7 +68,7 @@ func TestRepoFile(t *testing.T) {
t.Run("WithCurrentRefSubURLByTag", func(t *testing.T) {
rctx := NewRenderContextRepoFile(t.Context(), repo1, RepoFileOptions{
CurrentRefSubURL: "/commit/1234",
- CurrentTreePath: "my-dir",
+ CurrentTreePath: "my dir",
}).
WithMarkupType(markdown.MarkupName)
rendered, err := testRenderString(rctx, `
@@ -76,8 +76,8 @@ func TestRepoFile(t *testing.T) {
`, rendered)
})
diff --git a/models/renderhelper/repo_wiki.go b/models/renderhelper/repo_wiki.go
index ec44e425ba2..95dc618fd01 100644
--- a/models/renderhelper/repo_wiki.go
+++ b/models/renderhelper/repo_wiki.go
@@ -36,9 +36,9 @@ func (r *RepoWiki) ResolveLink(link, preferLinkType string) (finalLink string) {
case markup.LinkTypeRoot:
finalLink = r.ctx.ResolveLinkRoot(link)
case markup.LinkTypeMedia, markup.LinkTypeRaw:
- finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "wiki/raw", r.opts.currentRefSubURL), r.opts.currentTreePath, link)
+ finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "wiki/raw", r.opts.currentRefSubURL), util.PathEscapeSegments(r.opts.currentTreePath), link)
default:
- finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "wiki", r.opts.currentRefSubURL), r.opts.currentTreePath, link)
+ finalLink = r.ctx.ResolveLinkRelative(path.Join(r.repoLink, "wiki", r.opts.currentRefSubURL), util.PathEscapeSegments(r.opts.currentTreePath), link)
}
return finalLink
}
diff --git a/models/renderhelper/repo_wiki_test.go b/models/renderhelper/repo_wiki_test.go
index 2061bcc8f10..712cd473130 100644
--- a/models/renderhelper/repo_wiki_test.go
+++ b/models/renderhelper/repo_wiki_test.go
@@ -50,14 +50,16 @@ func TestRepoWiki(t *testing.T) {
})
t.Run("PathInTag", func(t *testing.T) {
- rctx := NewRenderContextRepoWiki(t.Context(), repo1).WithMarkupType(markdown.MarkupName)
+ rctx := NewRenderContextRepoWiki(t.Context(), repo1, RepoWikiOptions{
+ currentTreePath: "my dir",
+ }).WithMarkupType(markdown.MarkupName)
rendered, err := testRenderString(rctx, `
`)
assert.NoError(t, err)
- assert.Equal(t, `
-
+ assert.Equal(t, `
+
`, rendered)
})
}