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> Co-authored-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
							parent
							
								
									58f4a4114e
								
							
						
					
					
						commit
						49a71a6461
					
				
					 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) { | ||||
| 	wikiRepo, commit, err := findWikiRepoCommit(ctx) | ||||
| 	if err != nil { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 		if !git.IsErrNotExist(err) { | ||||
| 			ctx.ServerError("GetBranchCommit", err) | ||||
| 		} | ||||
|  | @ -222,6 +225,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { | |||
| 
 | ||||
| 	var buf strings.Builder | ||||
| 	if err := markdown.Render(rctx, bytes.NewReader(data), &buf); err != nil { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 		ctx.ServerError("Render", err) | ||||
| 		return nil, nil | ||||
| 	} | ||||
|  | @ -229,6 +235,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { | |||
| 
 | ||||
| 	buf.Reset() | ||||
| 	if err := markdown.Render(rctx, bytes.NewReader(sidebarContent), &buf); err != nil { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 		ctx.ServerError("Render", err) | ||||
| 		return nil, nil | ||||
| 	} | ||||
|  | @ -237,6 +246,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { | |||
| 
 | ||||
| 	buf.Reset() | ||||
| 	if err := markdown.Render(rctx, bytes.NewReader(footerContent), &buf); err != nil { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 		ctx.ServerError("Render", err) | ||||
| 		return nil, nil | ||||
| 	} | ||||
|  | @ -380,17 +392,14 @@ func Wiki(ctx *context.Context) { | |||
| 	} | ||||
| 
 | ||||
| 	wikiRepo, entry := renderViewPage(ctx) | ||||
| 	if ctx.Written() { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 	defer func() { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 	}() | ||||
| 	if ctx.Written() { | ||||
| 		return | ||||
| 	} | ||||
| 	if entry == nil { | ||||
| 		ctx.Data["Title"] = ctx.Tr("repo.wiki") | ||||
| 		ctx.HTML(http.StatusOK, tplWikiStart) | ||||
|  | @ -425,17 +434,15 @@ func WikiRevision(ctx *context.Context) { | |||
| 	} | ||||
| 
 | ||||
| 	wikiRepo, entry := renderRevisionPage(ctx) | ||||
| 	if ctx.Written() { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 	defer func() { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	if ctx.Written() { | ||||
| 		return | ||||
| 	} | ||||
| 	if entry == nil { | ||||
| 		ctx.Data["Title"] = ctx.Tr("repo.wiki") | ||||
| 		ctx.HTML(http.StatusOK, tplWikiStart) | ||||
|  | @ -472,13 +479,14 @@ func WikiPages(ctx *context.Context) { | |||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	entries, err := commit.ListEntries() | ||||
| 	if err != nil { | ||||
| 	defer func() { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	entries, err := commit.ListEntries() | ||||
| 	if err != nil { | ||||
| 		ctx.ServerError("ListEntries", err) | ||||
| 		return | ||||
| 	} | ||||
|  | @ -489,10 +497,6 @@ func WikiPages(ctx *context.Context) { | |||
| 		} | ||||
| 		c, err := wikiRepo.GetCommitByPath(entry.Name()) | ||||
| 		if err != nil { | ||||
| 			if wikiRepo != nil { | ||||
| 				wikiRepo.Close() | ||||
| 			} | ||||
| 
 | ||||
| 			ctx.ServerError("GetCommit", err) | ||||
| 			return | ||||
| 		} | ||||
|  | @ -501,10 +505,6 @@ func WikiPages(ctx *context.Context) { | |||
| 			if models.IsErrWikiInvalidFileName(err) { | ||||
| 				continue | ||||
| 			} | ||||
| 			if wikiRepo != nil { | ||||
| 				wikiRepo.Close() | ||||
| 			} | ||||
| 
 | ||||
| 			ctx.ServerError("WikiFilenameToName", err) | ||||
| 			return | ||||
| 		} | ||||
|  | @ -516,21 +516,25 @@ func WikiPages(ctx *context.Context) { | |||
| 	} | ||||
| 	ctx.Data["Pages"] = pages | ||||
| 
 | ||||
| 	defer func() { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 	}() | ||||
| 	ctx.HTML(http.StatusOK, tplWikiPages) | ||||
| } | ||||
| 
 | ||||
| // WikiRaw outputs raw blob requested by user (image for example)
 | ||||
| func WikiRaw(ctx *context.Context) { | ||||
| 	wikiRepo, commit, err := findWikiRepoCommit(ctx) | ||||
| 	if err != nil { | ||||
| 	defer func() { | ||||
| 		if wikiRepo != nil { | ||||
| 			wikiRepo.Close() | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		if git.IsErrNotExist(err) { | ||||
| 			ctx.NotFound("findEntryForFile", nil) | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.ServerError("findEntryForfile", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	providedPath := ctx.Params("*") | ||||
|  | @ -546,9 +550,7 @@ func WikiRaw(ctx *context.Context) { | |||
| 
 | ||||
| 		if entry == nil { | ||||
| 			// Try to find a wiki page with that name
 | ||||
| 			if strings.HasSuffix(providedPath, ".md") { | ||||
| 				providedPath = providedPath[:len(providedPath)-3] | ||||
| 			} | ||||
| 			providedPath = strings.TrimSuffix(providedPath, ".md") | ||||
| 
 | ||||
| 			wikiPath := wiki_service.NameToFilename(providedPath) | ||||
| 			entry, err = findEntryForFile(commit, wikiPath) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue