diff options
Diffstat (limited to 'modules/git/batch_reader.go')
-rw-r--r-- | modules/git/batch_reader.go | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/modules/git/batch_reader.go b/modules/git/batch_reader.go index 71045adbc9..7f7272c19e 100644 --- a/modules/git/batch_reader.go +++ b/modules/git/batch_reader.go @@ -27,6 +27,20 @@ type WriteCloserError interface { CloseWithError(err error) error } +// EnsureValidGitRepository runs git rev-parse in the repository path - thus ensuring that the repository is a valid repository. +// Run before opening git cat-file. +// This is needed otherwise the git cat-file will hang for invalid repositories. +func EnsureValidGitRepository(ctx context.Context, repoPath string) error { + stderr := strings.Builder{} + err := NewCommandContext(ctx, "rev-parse"). + SetDescription(fmt.Sprintf("%s rev-parse [repo_path: %s]", GitExecutable, repoPath)). + RunInDirFullPipeline(repoPath, nil, &stderr, nil) + if err != nil { + return ConcatenateError(err, (&stderr).String()) + } + return nil +} + // CatFileBatchCheck opens git cat-file --batch-check in the provided repo and returns a stdin pipe, a stdout reader and cancel function func CatFileBatchCheck(ctx context.Context, repoPath string) (WriteCloserError, *bufio.Reader, func()) { batchStdinReader, batchStdinWriter := io.Pipe() |