mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	* Fix wiki raw view on sub path * Add test for subpath wiki raw file * Fix bug Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -1 +1 @@
 | 
				
			|||||||
0cf15c3f66ec8384480ed9c3cf87c9e97fbb0ec3
 | 
					423313fbd38093bb10d0c8387db9105409c6f196
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,27 +65,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()
 | 
						entry, err := commit.GetTreeEntryByPath(target)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil && !git.IsErrNotExist(err) {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// The longest name should be checked first
 | 
						if entry != nil {
 | 
				
			||||||
	for _, entry := range entries {
 | 
					 | 
				
			||||||
		if entry.IsRegular() && entry.Name() == target {
 | 
					 | 
				
			||||||
		return 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 {
 | 
						return commit.GetTreeEntryByPath(unescapedTarget)
 | 
				
			||||||
		if entry.IsRegular() && entry.Name() == unescapedTarget {
 | 
					 | 
				
			||||||
			return entry, nil
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return nil, nil
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, error) {
 | 
					func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, error) {
 | 
				
			||||||
@@ -122,10 +115,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 := models.WikiNameToFilename(wikiName)
 | 
						pageFilename := models.WikiNameToFilename(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 {
 | 
				
			||||||
@@ -517,7 +509,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
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -530,7 +522,7 @@ func WikiRaw(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			wikiPath := models.WikiNameToFilename(providedPath)
 | 
								wikiPath := models.WikiNameToFilename(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
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -191,6 +191,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",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user