diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go index d82611a5ba..e47bb569b5 100644 --- a/routers/web/repo/wiki.go +++ b/routers/web/repo/wiki.go @@ -154,8 +154,8 @@ func wikiEntryByName(ctx *context.Context, commit *git.Commit, wikiName wiki_ser } if entry == nil { // If .md file not found, try .org file - if strings.HasSuffix(gitFilename, ".md") { - orgFilename := strings.TrimSuffix(gitFilename, ".md") + ".org" + if base, ok := strings.CutSuffix(gitFilename, ".md"); ok { + orgFilename := base + ".org" entry, err = findEntryForFile(commit, orgFilename) if err != nil && !git.IsErrNotExist(err) { ctx.ServerError("findEntryForFile", err) @@ -168,10 +168,10 @@ func wikiEntryByName(ctx *context.Context, commit *git.Commit, wikiName wiki_ser // If still not found, check if the file without extension exists (for raw files) if entry == nil { baseFilename := gitFilename - if strings.HasSuffix(baseFilename, ".md") { - baseFilename = strings.TrimSuffix(baseFilename, ".md") - } else if strings.HasSuffix(baseFilename, ".org") { - baseFilename = strings.TrimSuffix(baseFilename, ".org") + if base, ok := strings.CutSuffix(baseFilename, ".md"); ok { + baseFilename = base + } else if base, ok := strings.CutSuffix(baseFilename, ".org"); ok { + baseFilename = base } entry, err = findEntryForFile(commit, baseFilename) if err != nil && !git.IsErrNotExist(err) { @@ -678,10 +678,12 @@ func WikiRaw(ctx *context.Context) { ctx.ServerError("findFile", err) return } - entry, err = findEntryForFile(commit, providedGitPath) - if err != nil && !git.IsErrNotExist(err) { - ctx.ServerError("findFile", err) - return + if entry == nil { + entry, err = findEntryForFile(commit, providedGitPath) + if err != nil && !git.IsErrNotExist(err) { + ctx.ServerError("findFile", err) + return + } } } } diff --git a/services/wiki/wiki_path.go b/services/wiki/wiki_path.go index 77271d59da..16b1da86ab 100644 --- a/services/wiki/wiki_path.go +++ b/services/wiki/wiki_path.go @@ -114,10 +114,10 @@ func WebPathToGitPath(s WebPath) string { func GitPathToWebPath(s string) (wp WebPath, err error) { // Trim .md or .org suffix if present - if strings.HasSuffix(s, ".md") { - s = strings.TrimSuffix(s, ".md") - } else if strings.HasSuffix(s, ".org") { - s = strings.TrimSuffix(s, ".org") + if before, ok := strings.CutSuffix(s, ".md"); ok { + s = before + } else if before, ok := strings.CutSuffix(s, ".org"); ok { + s = before } else { // If it doesn't end with .md or .org, it's not a valid wiki file return "", repo_model.ErrWikiInvalidFileName{FileName: s} @@ -139,8 +139,8 @@ func WebPathToUserTitle(s WebPath) (dir, display string) { if before, ok := strings.CutSuffix(display, ".md"); ok { display = before display, _ = url.PathUnescape(display) - } else if strings.HasSuffix(display, ".org") { - display = strings.TrimSuffix(display, ".org") + } else if before, ok := strings.CutSuffix(display, ".org"); ok { + display = before display, _ = url.PathUnescape(display) } display, _ = unescapeSegment(display)