@ -7,6 +7,7 @@ package git
import (
"bufio"
"bytes"
"context"
"io"
"math"
"strconv"
@ -28,16 +29,20 @@ type WriteCloserError interface {
func CatFileBatchCheck ( repoPath string ) ( WriteCloserError , * bufio . Reader , func ( ) ) {
batchStdinReader , batchStdinWriter := io . Pipe ( )
batchStdoutReader , batchStdoutWriter := io . Pipe ( )
ctx , ctxCancel := context . WithCancel ( DefaultContext )
closed := make ( chan struct { } )
cancel := func ( ) {
_ = batchStdinReader . Close ( )
_ = batchStdinWriter . Close ( )
_ = batchStdoutReader . Close ( )
_ = batchStdoutWriter . Close ( )
ctxCancel ( )
<- closed
}
go func ( ) {
stderr := strings . Builder { }
err := NewCommand ( "cat-file" , "--batch-check" ) . RunInDirFullPipeline ( repoPath , batchStdoutWriter , & stderr , batchStdinReader )
err := NewCommandContext ( ctx , "cat-file" , "--batch-check" ) . RunInDirFullPipeline ( repoPath , batchStdoutWriter , & stderr , batchStdinReader )
if err != nil {
_ = batchStdoutWriter . CloseWithError ( ConcatenateError ( err , ( & stderr ) . String ( ) ) )
_ = batchStdinReader . CloseWithError ( ConcatenateError ( err , ( & stderr ) . String ( ) ) )
@ -45,6 +50,7 @@ func CatFileBatchCheck(repoPath string) (WriteCloserError, *bufio.Reader, func()
_ = batchStdoutWriter . Close ( )
_ = batchStdinReader . Close ( )
}
close ( closed )
} ( )
// For simplicities sake we'll use a buffered reader to read from the cat-file --batch-check
@ -59,16 +65,20 @@ func CatFileBatch(repoPath string) (WriteCloserError, *bufio.Reader, func()) {
// so let's create a batch stdin and stdout
batchStdinReader , batchStdinWriter := io . Pipe ( )
batchStdoutReader , batchStdoutWriter := nio . Pipe ( buffer . New ( 32 * 1024 ) )
ctx , ctxCancel := context . WithCancel ( DefaultContext )
closed := make ( chan struct { } )
cancel := func ( ) {
_ = batchStdinReader . Close ( )
_ = batchStdinWriter . Close ( )
_ = batchStdoutReader . Close ( )
_ = batchStdoutWriter . Close ( )
ctxCancel ( )
<- closed
}
go func ( ) {
stderr := strings . Builder { }
err := NewCommand ( "cat-file" , "--batch" ) . RunInDirFullPipeline ( repoPath , batchStdoutWriter , & stderr , batchStdinReader )
err := NewCommandContext ( ctx , "cat-file" , "--batch" ) . RunInDirFullPipeline ( repoPath , batchStdoutWriter , & stderr , batchStdinReader )
if err != nil {
_ = batchStdoutWriter . CloseWithError ( ConcatenateError ( err , ( & stderr ) . String ( ) ) )
_ = batchStdinReader . CloseWithError ( ConcatenateError ( err , ( & stderr ) . String ( ) ) )
@ -76,6 +86,7 @@ func CatFileBatch(repoPath string) (WriteCloserError, *bufio.Reader, func()) {
_ = batchStdoutWriter . Close ( )
_ = batchStdinReader . Close ( )
}
close ( closed )
} ( )
// For simplicities sake we'll us a buffered reader to read from the cat-file --batch