Skip to content

Commit 158b716

Browse files
lunnyzeripath
andcommitted
Fix wiki raw view on sub path (go-gitea#10002) (go-gitea#10041)
* Fix wiki raw view on sub path * Add test for subpath wiki raw file * Fix bug Co-authored-by: zeripath <[email protected]>
1 parent e611dbb commit 158b716

File tree

6 files changed

+12
-19
lines changed

6 files changed

+12
-19
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0cf15c3f66ec8384480ed9c3cf87c9e97fbb0ec3
1+
423313fbd38093bb10d0c8387db9105409c6f196

routers/repo/wiki.go

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -65,27 +65,20 @@ type PageMeta struct {
6565

6666
// findEntryForFile finds the tree entry for a target filepath.
6767
func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error) {
68-
entries, err := commit.ListEntries()
69-
if err != nil {
68+
entry, err := commit.GetTreeEntryByPath(target)
69+
if err != nil && !git.IsErrNotExist(err) {
7070
return nil, err
7171
}
72-
// The longest name should be checked first
73-
for _, entry := range entries {
74-
if entry.IsRegular() && entry.Name() == target {
75-
return entry, nil
76-
}
72+
if entry != nil {
73+
return entry, nil
7774
}
75+
7876
// Then the unescaped, shortest alternative
7977
var unescapedTarget string
8078
if unescapedTarget, err = url.QueryUnescape(target); err != nil {
8179
return nil, err
8280
}
83-
for _, entry := range entries {
84-
if entry.IsRegular() && entry.Name() == unescapedTarget {
85-
return entry, nil
86-
}
87-
}
88-
return nil, nil
81+
return commit.GetTreeEntryByPath(unescapedTarget)
8982
}
9083

9184
func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, error) {
@@ -122,10 +115,9 @@ func wikiContentsByEntry(ctx *context.Context, entry *git.TreeEntry) []byte {
122115
// wikiContentsByName returns the contents of a wiki page, along with a boolean
123116
// indicating whether the page exists. Writes to ctx if an error occurs.
124117
func wikiContentsByName(ctx *context.Context, commit *git.Commit, wikiName string) ([]byte, *git.TreeEntry, string, bool) {
125-
var entry *git.TreeEntry
126-
var err error
127118
pageFilename := models.WikiNameToFilename(wikiName)
128-
if entry, err = findEntryForFile(commit, pageFilename); err != nil {
119+
entry, err := findEntryForFile(commit, pageFilename)
120+
if err != nil && !git.IsErrNotExist(err) {
129121
ctx.ServerError("findEntryForFile", err)
130122
return nil, nil, "", false
131123
} else if entry == nil {
@@ -517,7 +509,7 @@ func WikiRaw(ctx *context.Context) {
517509
if commit != nil {
518510
// Try to find a file with that name
519511
entry, err = findEntryForFile(commit, providedPath)
520-
if err != nil {
512+
if err != nil && !git.IsErrNotExist(err) {
521513
ctx.ServerError("findFile", err)
522514
return
523515
}
@@ -530,7 +522,7 @@ func WikiRaw(ctx *context.Context) {
530522

531523
wikiPath := models.WikiNameToFilename(providedPath)
532524
entry, err = findEntryForFile(commit, wikiPath)
533-
if err != nil {
525+
if err != nil && !git.IsErrNotExist(err) {
534526
ctx.ServerError("findFile", err)
535527
return
536528
}

routers/repo/wiki_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ func TestDeleteWikiPagePost(t *testing.T) {
191191
func TestWikiRaw(t *testing.T) {
192192
for filepath, filetype := range map[string]string{
193193
"jpeg.jpg": "image/jpeg",
194+
"images/jpeg.jpg": "image/jpeg",
194195
"Page With Spaced Name": "text/plain; charset=utf-8",
195196
"Page-With-Spaced-Name": "text/plain; charset=utf-8",
196197
"Page With Spaced Name.md": "text/plain; charset=utf-8",

0 commit comments

Comments
 (0)