Browse Source

Fix wiki raw view on sub path (#10002)

* Fix wiki raw view on sub path

* Add test for subpath wiki raw file

* Fix bug
for-closed-social
Lunny Xiao 4 years ago
committed by zeripath
parent
commit
c58edc7c78
6 changed files with 12 additions and 19 deletions
  1. BIN
     
  2. BIN
     
  3. BIN
     
  4. +1
    -1
      integrations/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master
  5. +10
    -18
      routers/repo/wiki.go
  6. +1
    -0
      routers/repo/wiki_test.go

BIN
View File


BIN
View File


BIN
View File


+ 1
- 1
integrations/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master View File

@ -1 +1 @@
0cf15c3f66ec8384480ed9c3cf87c9e97fbb0ec3
423313fbd38093bb10d0c8387db9105409c6f196

+ 10
- 18
routers/repo/wiki.go View File

@ -66,27 +66,20 @@ type PageMeta struct {
// findEntryForFile finds the tree entry for a target filepath. // findEntryForFile finds the tree entry for a target filepath.
func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error) { func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error) {
entries, err := commit.ListEntries()
if err != nil {
entry, err := commit.GetTreeEntryByPath(target)
if err != nil && !git.IsErrNotExist(err) {
return nil, err return nil, err
} }
// The longest name should be checked first
for _, entry := range entries {
if entry.IsRegular() && entry.Name() == target {
return entry, nil
}
if entry != nil {
return entry, nil
} }
// Then the unescaped, shortest alternative // Then the unescaped, shortest alternative
var unescapedTarget string var unescapedTarget string
if unescapedTarget, err = url.QueryUnescape(target); err != nil { if unescapedTarget, err = url.QueryUnescape(target); err != nil {
return nil, err return nil, err
} }
for _, entry := range entries {
if entry.IsRegular() && entry.Name() == unescapedTarget {
return entry, nil
}
}
return nil, nil
return commit.GetTreeEntryByPath(unescapedTarget)
} }
func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, error) { func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, error) {
@ -123,10 +116,9 @@ func wikiContentsByEntry(ctx *context.Context, entry *git.TreeEntry) []byte {
// wikiContentsByName returns the contents of a wiki page, along with a boolean // wikiContentsByName returns the contents of a wiki page, along with a boolean
// indicating whether the page exists. Writes to ctx if an error occurs. // indicating whether the page exists. Writes to ctx if an error occurs.
func wikiContentsByName(ctx *context.Context, commit *git.Commit, wikiName string) ([]byte, *git.TreeEntry, string, bool) { func wikiContentsByName(ctx *context.Context, commit *git.Commit, wikiName string) ([]byte, *git.TreeEntry, string, bool) {
var entry *git.TreeEntry
var err error
pageFilename := wiki_service.NameToFilename(wikiName) pageFilename := wiki_service.NameToFilename(wikiName)
if entry, err = findEntryForFile(commit, pageFilename); err != nil {
entry, err := findEntryForFile(commit, pageFilename)
if err != nil && !git.IsErrNotExist(err) {
ctx.ServerError("findEntryForFile", err) ctx.ServerError("findEntryForFile", err)
return nil, nil, "", false return nil, nil, "", false
} else if entry == nil { } else if entry == nil {
@ -518,7 +510,7 @@ func WikiRaw(ctx *context.Context) {
if commit != nil { if commit != nil {
// Try to find a file with that name // Try to find a file with that name
entry, err = findEntryForFile(commit, providedPath) entry, err = findEntryForFile(commit, providedPath)
if err != nil {
if err != nil && !git.IsErrNotExist(err) {
ctx.ServerError("findFile", err) ctx.ServerError("findFile", err)
return return
} }
@ -531,7 +523,7 @@ func WikiRaw(ctx *context.Context) {
wikiPath := wiki_service.NameToFilename(providedPath) wikiPath := wiki_service.NameToFilename(providedPath)
entry, err = findEntryForFile(commit, wikiPath) entry, err = findEntryForFile(commit, wikiPath)
if err != nil {
if err != nil && !git.IsErrNotExist(err) {
ctx.ServerError("findFile", err) ctx.ServerError("findFile", err)
return return
} }

+ 1
- 0
routers/repo/wiki_test.go View File

@ -192,6 +192,7 @@ func TestDeleteWikiPagePost(t *testing.T) {
func TestWikiRaw(t *testing.T) { func TestWikiRaw(t *testing.T) {
for filepath, filetype := range map[string]string{ for filepath, filetype := range map[string]string{
"jpeg.jpg": "image/jpeg", "jpeg.jpg": "image/jpeg",
"images/jpeg.jpg": "image/jpeg",
"Page With Spaced Name": "text/plain; charset=utf-8", "Page With Spaced Name": "text/plain; charset=utf-8",
"Page-With-Spaced-Name": "text/plain; charset=utf-8", "Page-With-Spaced-Name": "text/plain; charset=utf-8",
"Page With Spaced Name.md": "text/plain; charset=utf-8", "Page With Spaced Name.md": "text/plain; charset=utf-8",

Loading…
Cancel
Save