aboutsummaryrefslogtreecommitdiffstats
path: root/formats
diff options
context:
space:
mode:
authorAlberto Cortés <alberto@sourced.tech>2016-01-26 02:26:38 +0100
committerAlberto Cortés <alberto@sourced.tech>2016-01-26 02:26:38 +0100
commit3db12e2e2f550ade9670efbe2ad72608845bb88e (patch)
treea53c5a95f3eb35958e3aeff7f778cdaf6a414088 /formats
parent050fb78d77b30014acd0b6eefc88ec8a49c20371 (diff)
downloadgo-git-3db12e2e2f550ade9670efbe2ad72608845bb88e.tar.gz
Speed up packfile reading
By adding a bufio to the trackingReader, otherwise most of the time is spent in syscalls for small reads to the packfile.
Diffstat (limited to 'formats')
-rw-r--r--formats/packfile/common.go7
-rw-r--r--formats/packfile/reader.go2
2 files changed, 8 insertions, 1 deletions
diff --git a/formats/packfile/common.go b/formats/packfile/common.go
index 06c63d4..57bc0b9 100644
--- a/formats/packfile/common.go
+++ b/formats/packfile/common.go
@@ -1,6 +1,7 @@
package packfile
import (
+ "bufio"
"fmt"
"io"
)
@@ -10,6 +11,12 @@ type trackingReader struct {
position int64
}
+func NewTrackingReader(r io.Reader) *trackingReader {
+ return &trackingReader{
+ r: bufio.NewReader(r),
+ }
+}
+
func (t *trackingReader) Read(p []byte) (n int, err error) {
n, err = t.r.Read(p)
if err != nil {
diff --git a/formats/packfile/reader.go b/formats/packfile/reader.go
index 3ff342f..37918b1 100644
--- a/formats/packfile/reader.go
+++ b/formats/packfile/reader.go
@@ -59,7 +59,7 @@ func NewReader(r io.Reader) *Reader {
return &Reader{
MaxObjectsLimit: DefaultMaxObjectsLimit,
- r: &trackingReader{r: r},
+ r: NewTrackingReader(r),
offsets: make(map[int64]core.Hash, 0),
}
}