@@ -7,6 +7,7 @@ package git
7
7
import (
8
8
"bufio"
9
9
"bytes"
10
+ "context"
10
11
"io"
11
12
"math"
12
13
"strconv"
@@ -28,23 +29,28 @@ type WriteCloserError interface {
28
29
func CatFileBatchCheck (repoPath string ) (WriteCloserError , * bufio.Reader , func ()) {
29
30
batchStdinReader , batchStdinWriter := io .Pipe ()
30
31
batchStdoutReader , batchStdoutWriter := io .Pipe ()
32
+ ctx , ctxCancel := context .WithCancel (DefaultContext )
33
+ closed := make (chan struct {})
31
34
cancel := func () {
32
35
_ = batchStdinReader .Close ()
33
36
_ = batchStdinWriter .Close ()
34
37
_ = batchStdoutReader .Close ()
35
38
_ = batchStdoutWriter .Close ()
39
+ ctxCancel ()
40
+ <- closed
36
41
}
37
42
38
43
go func () {
39
44
stderr := strings.Builder {}
40
- err := NewCommand ( "cat-file" , "--batch-check" ).RunInDirFullPipeline (repoPath , batchStdoutWriter , & stderr , batchStdinReader )
45
+ err := NewCommandContext ( ctx , "cat-file" , "--batch-check" ).RunInDirFullPipeline (repoPath , batchStdoutWriter , & stderr , batchStdinReader )
41
46
if err != nil {
42
47
_ = batchStdoutWriter .CloseWithError (ConcatenateError (err , (& stderr ).String ()))
43
48
_ = batchStdinReader .CloseWithError (ConcatenateError (err , (& stderr ).String ()))
44
49
} else {
45
50
_ = batchStdoutWriter .Close ()
46
51
_ = batchStdinReader .Close ()
47
52
}
53
+ close (closed )
48
54
}()
49
55
50
56
// For simplicities sake we'll use a buffered reader to read from the cat-file --batch-check
@@ -59,23 +65,28 @@ func CatFileBatch(repoPath string) (WriteCloserError, *bufio.Reader, func()) {
59
65
// so let's create a batch stdin and stdout
60
66
batchStdinReader , batchStdinWriter := io .Pipe ()
61
67
batchStdoutReader , batchStdoutWriter := nio .Pipe (buffer .New (32 * 1024 ))
68
+ ctx , ctxCancel := context .WithCancel (DefaultContext )
69
+ closed := make (chan struct {})
62
70
cancel := func () {
63
71
_ = batchStdinReader .Close ()
64
72
_ = batchStdinWriter .Close ()
65
73
_ = batchStdoutReader .Close ()
66
74
_ = batchStdoutWriter .Close ()
75
+ ctxCancel ()
76
+ <- closed
67
77
}
68
78
69
79
go func () {
70
80
stderr := strings.Builder {}
71
- err := NewCommand ( "cat-file" , "--batch" ).RunInDirFullPipeline (repoPath , batchStdoutWriter , & stderr , batchStdinReader )
81
+ err := NewCommandContext ( ctx , "cat-file" , "--batch" ).RunInDirFullPipeline (repoPath , batchStdoutWriter , & stderr , batchStdinReader )
72
82
if err != nil {
73
83
_ = batchStdoutWriter .CloseWithError (ConcatenateError (err , (& stderr ).String ()))
74
84
_ = batchStdinReader .CloseWithError (ConcatenateError (err , (& stderr ).String ()))
75
85
} else {
76
86
_ = batchStdoutWriter .Close ()
77
87
_ = batchStdinReader .Close ()
78
88
}
89
+ close (closed )
79
90
}()
80
91
81
92
// For simplicities sake we'll us a buffered reader to read from the cat-file --batch
0 commit comments