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:
		
							parent
							
								
									a08175ac55
								
							
						
					
					
						commit
						c58edc7c78
					
				
					 6 changed files with 12 additions and 19 deletions
				
			
		
										
											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", | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue