Add caller to cat-file batch calls (#17082)
Some people still appear to report unclosed cat-files. This PR simply adds the caller to the process descriptor for the CatFileBatch and CatFileBatchCheck calls. Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
parent
693bea9780
commit
25533657f6
2 changed files with 29 additions and 8 deletions
|
@ -8,8 +8,10 @@ import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -40,9 +42,14 @@ func CatFileBatchCheck(repoPath string) (WriteCloserError, *bufio.Reader, func()
|
||||||
<-closed
|
<-closed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, filename, line, _ := runtime.Caller(2)
|
||||||
|
filename = strings.TrimPrefix(filename, callerPrefix)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
stderr := strings.Builder{}
|
stderr := strings.Builder{}
|
||||||
err := NewCommandContext(ctx, "cat-file", "--batch-check").RunInDirFullPipeline(repoPath, batchStdoutWriter, &stderr, batchStdinReader)
|
err := NewCommandContext(ctx, "cat-file", "--batch-check").
|
||||||
|
SetDescription(fmt.Sprintf("%s cat-file --batch-check [repo_path: %s] (%s:%d)", GitExecutable, repoPath, filename, line)).
|
||||||
|
RunInDirFullPipeline(repoPath, batchStdoutWriter, &stderr, batchStdinReader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = batchStdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String()))
|
_ = batchStdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String()))
|
||||||
_ = batchStdinReader.CloseWithError(ConcatenateError(err, (&stderr).String()))
|
_ = batchStdinReader.CloseWithError(ConcatenateError(err, (&stderr).String()))
|
||||||
|
@ -76,9 +83,14 @@ func CatFileBatch(repoPath string) (WriteCloserError, *bufio.Reader, func()) {
|
||||||
<-closed
|
<-closed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, filename, line, _ := runtime.Caller(2)
|
||||||
|
filename = strings.TrimPrefix(filename, callerPrefix)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
stderr := strings.Builder{}
|
stderr := strings.Builder{}
|
||||||
err := NewCommandContext(ctx, "cat-file", "--batch").RunInDirFullPipeline(repoPath, batchStdoutWriter, &stderr, batchStdinReader)
|
err := NewCommandContext(ctx, "cat-file", "--batch").
|
||||||
|
SetDescription(fmt.Sprintf("%s cat-file --batch [repo_path: %s] (%s:%d)", GitExecutable, repoPath, filename, line)).
|
||||||
|
RunInDirFullPipeline(repoPath, batchStdoutWriter, &stderr, batchStdinReader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = batchStdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String()))
|
_ = batchStdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String()))
|
||||||
_ = batchStdinReader.CloseWithError(ConcatenateError(err, (&stderr).String()))
|
_ = batchStdinReader.CloseWithError(ConcatenateError(err, (&stderr).String()))
|
||||||
|
@ -292,3 +304,10 @@ func ParseTreeLine(rd *bufio.Reader, modeBuf, fnameBuf, shaBuf []byte) (mode, fn
|
||||||
sha = shaBuf
|
sha = shaBuf
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var callerPrefix string
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
_, filename, _, _ := runtime.Caller(0)
|
||||||
|
callerPrefix = strings.TrimSuffix(filename, "modules/git/batch_reader.go")
|
||||||
|
}
|
||||||
|
|
|
@ -119,13 +119,15 @@ func GetArchive(ctx *context.APIContext) {
|
||||||
// "$ref": "#/responses/notFound"
|
// "$ref": "#/responses/notFound"
|
||||||
|
|
||||||
repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame"))
|
repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame"))
|
||||||
gitRepo, err := git.OpenRepository(repoPath)
|
if ctx.Repo.GitRepo == nil {
|
||||||
if err != nil {
|
gitRepo, err := git.OpenRepository(repoPath)
|
||||||
ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
|
if err != nil {
|
||||||
return
|
ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Repo.GitRepo = gitRepo
|
||||||
|
defer gitRepo.Close()
|
||||||
}
|
}
|
||||||
ctx.Repo.GitRepo = gitRepo
|
|
||||||
defer gitRepo.Close()
|
|
||||||
|
|
||||||
repo.Download(ctx.Context)
|
repo.Download(ctx.Context)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue