diff options
Diffstat (limited to 'vendor/github.com')
-rw-r--r-- | vendor/github.com/gogits/git-module/blob.go | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/vendor/github.com/gogits/git-module/blob.go b/vendor/github.com/gogits/git-module/blob.go index 478682e7..7731226d 100644 --- a/vendor/github.com/gogits/git-module/blob.go +++ b/vendor/github.com/gogits/git-module/blob.go @@ -18,11 +18,16 @@ type Blob struct { // Data gets content of blob all at once and wrap it as io.Reader. // This can be very slow and memory consuming for huge content. func (b *Blob) Data() (io.Reader, error) { - stdout, err := NewCommand("show", b.ID.String()).RunInDirBytes(b.repo.Path) - if err != nil { - return nil, err + stdout := new(bytes.Buffer) + stderr := new(bytes.Buffer) + + // Preallocate memory to save ~50% memory usage on big files. + stdout.Grow(int(b.Size() + 2048)) + + if err := b.DataPipeline(stdout, stderr); err != nil { + return nil, concatenateError(err, stderr.String()) } - return bytes.NewBuffer(stdout), nil + return stdout, nil } func (b *Blob) DataPipeline(stdout, stderr io.Writer) error { |