mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 09:44:21 +00:00 
			
		
		
		
	Fix wiki raw view on sub path (#10002)
* Fix wiki raw view on sub path * Add test for subpath wiki raw file * Fix bug
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -1 +1 @@
 | 
			
		||||
0cf15c3f66ec8384480ed9c3cf87c9e97fbb0ec3
 | 
			
		||||
423313fbd38093bb10d0c8387db9105409c6f196
 | 
			
		||||
 
 | 
			
		||||
@@ -66,27 +66,20 @@ type PageMeta struct {
 | 
			
		||||
 | 
			
		||||
// findEntryForFile finds the tree entry for a target filepath.
 | 
			
		||||
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
 | 
			
		||||
	}
 | 
			
		||||
	// 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
 | 
			
		||||
	var unescapedTarget string
 | 
			
		||||
	if unescapedTarget, err = url.QueryUnescape(target); err != nil {
 | 
			
		||||
		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) {
 | 
			
		||||
@@ -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
 | 
			
		||||
// 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) {
 | 
			
		||||
	var entry *git.TreeEntry
 | 
			
		||||
	var err error
 | 
			
		||||
	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)
 | 
			
		||||
		return nil, nil, "", false
 | 
			
		||||
	} else if entry == nil {
 | 
			
		||||
@@ -518,7 +510,7 @@ func WikiRaw(ctx *context.Context) {
 | 
			
		||||
	if commit != nil {
 | 
			
		||||
		// Try to find a file with that name
 | 
			
		||||
		entry, err = findEntryForFile(commit, providedPath)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
		if err != nil && !git.IsErrNotExist(err) {
 | 
			
		||||
			ctx.ServerError("findFile", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
@@ -531,7 +523,7 @@ func WikiRaw(ctx *context.Context) {
 | 
			
		||||
 | 
			
		||||
			wikiPath := wiki_service.NameToFilename(providedPath)
 | 
			
		||||
			entry, err = findEntryForFile(commit, wikiPath)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
			if err != nil && !git.IsErrNotExist(err) {
 | 
			
		||||
				ctx.ServerError("findFile", err)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -192,6 +192,7 @@ func TestDeleteWikiPagePost(t *testing.T) {
 | 
			
		||||
func TestWikiRaw(t *testing.T) {
 | 
			
		||||
	for filepath, filetype := range map[string]string{
 | 
			
		||||
		"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.md": "text/plain; charset=utf-8",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user