aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing/format/packfile
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2017-07-19 22:05:00 +0200
committerGitHub <noreply@github.com>2017-07-19 22:05:00 +0200
commit2d10f1023e609894174b21bdf8d3738010099335 (patch)
tree929b050b54039af69b4eae6306429feafa9d8268 /plumbing/format/packfile
parent8738a04708b91683d5804b4c648c871fdeb87f82 (diff)
parent87888eaab1caa52b6b073f610508e0f65b4141f6 (diff)
downloadgo-git-2d10f1023e609894174b21bdf8d3738010099335.tar.gz
Merge pull request #491 from smola/error-checks
*: add more IO error checks
Diffstat (limited to 'plumbing/format/packfile')
-rw-r--r--plumbing/format/packfile/common.go22
-rw-r--r--plumbing/format/packfile/scanner.go21
2 files changed, 22 insertions, 21 deletions
diff --git a/plumbing/format/packfile/common.go b/plumbing/format/packfile/common.go
index 6402cd0..728cb16 100644
--- a/plumbing/format/packfile/common.go
+++ b/plumbing/format/packfile/common.go
@@ -4,6 +4,7 @@ import (
"io"
"gopkg.in/src-d/go-git.v4/plumbing/storer"
+ "gopkg.in/src-d/go-git.v4/utils/ioutil"
)
var signature = []byte{'P', 'A', 'C', 'K'}
@@ -24,14 +25,7 @@ const (
// packfile.
func UpdateObjectStorage(s storer.EncodedObjectStorer, packfile io.Reader) error {
if sw, ok := s.(storer.PackfileWriter); ok {
- w, err := sw.PackfileWriter()
- if err != nil {
- return err
- }
-
- defer w.Close()
- _, err = io.Copy(w, packfile)
- return err
+ return writePackfileToObjectStorage(sw, packfile)
}
stream := NewScanner(packfile)
@@ -43,3 +37,15 @@ func UpdateObjectStorage(s storer.EncodedObjectStorer, packfile io.Reader) error
_, err = d.Decode()
return err
}
+
+func writePackfileToObjectStorage(sw storer.PackfileWriter, packfile io.Reader) error {
+ var err error
+ w, err := sw.PackfileWriter()
+ if err != nil {
+ return err
+ }
+
+ defer ioutil.CheckClose(w, &err)
+ _, err = io.Copy(w, packfile)
+ return err
+}
diff --git a/plumbing/format/packfile/scanner.go b/plumbing/format/packfile/scanner.go
index 97512d1..1dab2f2 100644
--- a/plumbing/format/packfile/scanner.go
+++ b/plumbing/format/packfile/scanner.go
@@ -8,10 +8,11 @@ import (
"hash"
"hash/crc32"
"io"
- "io/ioutil"
+ stdioutil "io/ioutil"
"gopkg.in/src-d/go-git.v4/plumbing"
"gopkg.in/src-d/go-git.v4/utils/binary"
+ "gopkg.in/src-d/go-git.v4/utils/ioutil"
)
var (
@@ -198,7 +199,7 @@ func (s *Scanner) discardObjectIfNeeded() error {
}
h := s.pendingObject
- n, _, err := s.NextObject(ioutil.Discard)
+ n, _, err := s.NextObject(stdioutil.Discard)
if err != nil {
return err
}
@@ -275,8 +276,7 @@ func (s *Scanner) NextObject(w io.Writer) (written int64, crc32 uint32, err erro
// ReadRegularObject reads and write a non-deltified object
// from it zlib stream in an object entry in the packfile.
-func (s *Scanner) copyObject(w io.Writer) (int64, error) {
- var err error
+func (s *Scanner) copyObject(w io.Writer) (n int64, err error) {
if s.zr == nil {
zr, err := zlib.NewReader(s.r)
if err != nil {
@@ -290,14 +290,9 @@ func (s *Scanner) copyObject(w io.Writer) (int64, error) {
}
}
- defer func() {
- closeErr := s.zr.Close()
- if err == nil {
- err = closeErr
- }
- }()
-
- return io.Copy(w, s.zr)
+ defer ioutil.CheckClose(s.zr, &err)
+ n, err = io.Copy(w, s.zr)
+ return
}
// SeekFromStart sets a new offset from start, returns the old position before
@@ -329,7 +324,7 @@ func (s *Scanner) Checksum() (plumbing.Hash, error) {
// Close reads the reader until io.EOF
func (s *Scanner) Close() error {
- _, err := io.Copy(ioutil.Discard, s.r)
+ _, err := io.Copy(stdioutil.Discard, s.r)
return err
}