mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-28 12:16:17 +01:00
Ensure wiki repos are all closed (#16886)
There are multiple places where wiki git repositories are not properly closed. This PR ensures they are closed. Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
parent
73394f435c
commit
9119d24573
1 changed files with 34 additions and 32 deletions
|
@ -135,6 +135,9 @@ func wikiContentsByName(ctx *context.Context, commit *git.Commit, wikiName strin
|
||||||
func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
||||||
wikiRepo, commit, err := findWikiRepoCommit(ctx)
|
wikiRepo, commit, err := findWikiRepoCommit(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if wikiRepo != nil {
|
||||||
|
wikiRepo.Close()
|
||||||
|
}
|
||||||
if !git.IsErrNotExist(err) {
|
if !git.IsErrNotExist(err) {
|
||||||
ctx.ServerError("GetBranchCommit", err)
|
ctx.ServerError("GetBranchCommit", err)
|
||||||
}
|
}
|
||||||
|
@ -222,6 +225,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
||||||
|
|
||||||
var buf strings.Builder
|
var buf strings.Builder
|
||||||
if err := markdown.Render(rctx, bytes.NewReader(data), &buf); err != nil {
|
if err := markdown.Render(rctx, bytes.NewReader(data), &buf); err != nil {
|
||||||
|
if wikiRepo != nil {
|
||||||
|
wikiRepo.Close()
|
||||||
|
}
|
||||||
ctx.ServerError("Render", err)
|
ctx.ServerError("Render", err)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
@ -229,6 +235,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
||||||
|
|
||||||
buf.Reset()
|
buf.Reset()
|
||||||
if err := markdown.Render(rctx, bytes.NewReader(sidebarContent), &buf); err != nil {
|
if err := markdown.Render(rctx, bytes.NewReader(sidebarContent), &buf); err != nil {
|
||||||
|
if wikiRepo != nil {
|
||||||
|
wikiRepo.Close()
|
||||||
|
}
|
||||||
ctx.ServerError("Render", err)
|
ctx.ServerError("Render", err)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
@ -237,6 +246,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
||||||
|
|
||||||
buf.Reset()
|
buf.Reset()
|
||||||
if err := markdown.Render(rctx, bytes.NewReader(footerContent), &buf); err != nil {
|
if err := markdown.Render(rctx, bytes.NewReader(footerContent), &buf); err != nil {
|
||||||
|
if wikiRepo != nil {
|
||||||
|
wikiRepo.Close()
|
||||||
|
}
|
||||||
ctx.ServerError("Render", err)
|
ctx.ServerError("Render", err)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
@ -377,17 +389,14 @@ func Wiki(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
wikiRepo, entry := renderViewPage(ctx)
|
wikiRepo, entry := renderViewPage(ctx)
|
||||||
if ctx.Written() {
|
|
||||||
if wikiRepo != nil {
|
|
||||||
wikiRepo.Close()
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if wikiRepo != nil {
|
if wikiRepo != nil {
|
||||||
wikiRepo.Close()
|
wikiRepo.Close()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
if ctx.Written() {
|
||||||
|
return
|
||||||
|
}
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.wiki")
|
ctx.Data["Title"] = ctx.Tr("repo.wiki")
|
||||||
ctx.HTML(http.StatusOK, tplWikiStart)
|
ctx.HTML(http.StatusOK, tplWikiStart)
|
||||||
|
@ -422,17 +431,15 @@ func WikiRevision(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
wikiRepo, entry := renderRevisionPage(ctx)
|
wikiRepo, entry := renderRevisionPage(ctx)
|
||||||
if ctx.Written() {
|
|
||||||
if wikiRepo != nil {
|
|
||||||
wikiRepo.Close()
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if wikiRepo != nil {
|
if wikiRepo != nil {
|
||||||
wikiRepo.Close()
|
wikiRepo.Close()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
if ctx.Written() {
|
||||||
|
return
|
||||||
|
}
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.wiki")
|
ctx.Data["Title"] = ctx.Tr("repo.wiki")
|
||||||
ctx.HTML(http.StatusOK, tplWikiStart)
|
ctx.HTML(http.StatusOK, tplWikiStart)
|
||||||
|
@ -469,13 +476,14 @@ func WikiPages(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer func() {
|
||||||
entries, err := commit.ListEntries()
|
|
||||||
if err != nil {
|
|
||||||
if wikiRepo != nil {
|
if wikiRepo != nil {
|
||||||
wikiRepo.Close()
|
wikiRepo.Close()
|
||||||
}
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
entries, err := commit.ListEntries()
|
||||||
|
if err != nil {
|
||||||
ctx.ServerError("ListEntries", err)
|
ctx.ServerError("ListEntries", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -486,10 +494,6 @@ func WikiPages(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
c, err := wikiRepo.GetCommitByPath(entry.Name())
|
c, err := wikiRepo.GetCommitByPath(entry.Name())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if wikiRepo != nil {
|
|
||||||
wikiRepo.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.ServerError("GetCommit", err)
|
ctx.ServerError("GetCommit", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -498,10 +502,6 @@ func WikiPages(ctx *context.Context) {
|
||||||
if models.IsErrWikiInvalidFileName(err) {
|
if models.IsErrWikiInvalidFileName(err) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if wikiRepo != nil {
|
|
||||||
wikiRepo.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.ServerError("WikiFilenameToName", err)
|
ctx.ServerError("WikiFilenameToName", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -513,21 +513,25 @@ func WikiPages(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
ctx.Data["Pages"] = pages
|
ctx.Data["Pages"] = pages
|
||||||
|
|
||||||
defer func() {
|
|
||||||
if wikiRepo != nil {
|
|
||||||
wikiRepo.Close()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
ctx.HTML(http.StatusOK, tplWikiPages)
|
ctx.HTML(http.StatusOK, tplWikiPages)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WikiRaw outputs raw blob requested by user (image for example)
|
// WikiRaw outputs raw blob requested by user (image for example)
|
||||||
func WikiRaw(ctx *context.Context) {
|
func WikiRaw(ctx *context.Context) {
|
||||||
wikiRepo, commit, err := findWikiRepoCommit(ctx)
|
wikiRepo, commit, err := findWikiRepoCommit(ctx)
|
||||||
if err != nil {
|
defer func() {
|
||||||
if wikiRepo != nil {
|
if wikiRepo != nil {
|
||||||
|
wikiRepo.Close()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if git.IsErrNotExist(err) {
|
||||||
|
ctx.NotFound("findEntryForFile", nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
ctx.ServerError("findEntryForfile", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
providedPath := ctx.Params("*")
|
providedPath := ctx.Params("*")
|
||||||
|
@ -543,9 +547,7 @@ func WikiRaw(ctx *context.Context) {
|
||||||
|
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
// Try to find a wiki page with that name
|
// Try to find a wiki page with that name
|
||||||
if strings.HasSuffix(providedPath, ".md") {
|
providedPath = strings.TrimSuffix(providedPath, ".md")
|
||||||
providedPath = providedPath[:len(providedPath)-3]
|
|
||||||
}
|
|
||||||
|
|
||||||
wikiPath := wiki_service.NameToFilename(providedPath)
|
wikiPath := wiki_service.NameToFilename(providedPath)
|
||||||
entry, err = findEntryForFile(commit, wikiPath)
|
entry, err = findEntryForFile(commit, wikiPath)
|
||||||
|
|
Loading…
Reference in a new issue