@@ -20,11 +20,12 @@ type BlamePart struct {
2020
2121// BlameReader returns part of file blame one by one
2222type BlameReader struct {
23- cmd * Command
24- output io.WriteCloser
25- reader io.ReadCloser
26- done chan error
27- lastSha * string
23+ cmd * Command
24+ output io.WriteCloser
25+ reader io.ReadCloser
26+ bufferedReader * bufio.Reader
27+ done chan error
28+ lastSha * string
2829}
2930
3031var shaLineRegex = regexp .MustCompile ("^([a-z0-9]{40})" )
@@ -33,8 +34,6 @@ var shaLineRegex = regexp.MustCompile("^([a-z0-9]{40})")
3334func (r * BlameReader ) NextPart () (* BlamePart , error ) {
3435 var blamePart * BlamePart
3536
36- reader := bufio .NewReader (r .reader )
37-
3837 if r .lastSha != nil {
3938 blamePart = & BlamePart {* r .lastSha , make ([]string , 0 )}
4039 }
@@ -44,7 +43,7 @@ func (r *BlameReader) NextPart() (*BlamePart, error) {
4443 var err error
4544
4645 for err != io .EOF {
47- line , isPrefix , err = reader .ReadLine ()
46+ line , isPrefix , err = r . bufferedReader .ReadLine ()
4847 if err != nil && err != io .EOF {
4948 return blamePart , err
5049 }
@@ -66,7 +65,7 @@ func (r *BlameReader) NextPart() (*BlamePart, error) {
6665 r .lastSha = & sha1
6766 // need to munch to end of line...
6867 for isPrefix {
69- _ , isPrefix , err = reader .ReadLine ()
68+ _ , isPrefix , err = r . bufferedReader .ReadLine ()
7069 if err != nil && err != io .EOF {
7170 return blamePart , err
7271 }
@@ -81,7 +80,7 @@ func (r *BlameReader) NextPart() (*BlamePart, error) {
8180
8281 // need to munch to end of line...
8382 for isPrefix {
84- _ , isPrefix , err = reader .ReadLine ()
83+ _ , isPrefix , err = r . bufferedReader .ReadLine ()
8584 if err != nil && err != io .EOF {
8685 return blamePart , err
8786 }
@@ -96,6 +95,7 @@ func (r *BlameReader) NextPart() (*BlamePart, error) {
9695// Close BlameReader - don't run NextPart after invoking that
9796func (r * BlameReader ) Close () error {
9897 err := <- r .done
98+ r .bufferedReader = nil
9999 _ = r .reader .Close ()
100100 _ = r .output .Close ()
101101 return err
@@ -126,10 +126,13 @@ func CreateBlameReader(ctx context.Context, repoPath, commitID, file string) (*B
126126 done <- err
127127 }(cmd , repoPath , stdout , done )
128128
129+ bufferedReader := bufio .NewReader (reader )
130+
129131 return & BlameReader {
130- cmd : cmd ,
131- output : stdout ,
132- reader : reader ,
133- done : done ,
132+ cmd : cmd ,
133+ output : stdout ,
134+ reader : reader ,
135+ bufferedReader : bufferedReader ,
136+ done : done ,
134137 }, nil
135138}
0 commit comments