|
|
|
@ -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 |
|
|
|
|
} |
|
|
|
|