From 87888eaab1caa52b6b073f610508e0f65b4141f6 Mon Sep 17 00:00:00 2001 From: "Santiago M. Mola" Date: Wed, 19 Jul 2017 12:59:16 +0200 Subject: storage/filesystem: check all Close errors --- storage/filesystem/config.go | 11 ++++++----- storage/filesystem/index.go | 11 +++++++---- storage/filesystem/internal/dotgit/dotgit.go | 8 ++++---- storage/filesystem/object.go | 21 ++++++++++++--------- storage/filesystem/shallow.go | 5 +++-- 5 files changed, 32 insertions(+), 24 deletions(-) (limited to 'storage') diff --git a/storage/filesystem/config.go b/storage/filesystem/config.go index cad698a..a2cc173 100644 --- a/storage/filesystem/config.go +++ b/storage/filesystem/config.go @@ -1,11 +1,12 @@ package filesystem import ( - "io/ioutil" + stdioutil "io/ioutil" "os" "gopkg.in/src-d/go-git.v4/config" "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit" + "gopkg.in/src-d/go-git.v4/utils/ioutil" ) type ConfigStorage struct { @@ -24,9 +25,9 @@ func (c *ConfigStorage) Config() (*config.Config, error) { return nil, err } - defer f.Close() + defer ioutil.CheckClose(f, &err) - b, err := ioutil.ReadAll(f) + b, err := stdioutil.ReadAll(f) if err != nil { return nil, err } @@ -35,7 +36,7 @@ func (c *ConfigStorage) Config() (*config.Config, error) { return nil, err } - return cfg, nil + return cfg, err } func (c *ConfigStorage) SetConfig(cfg *config.Config) error { @@ -48,7 +49,7 @@ func (c *ConfigStorage) SetConfig(cfg *config.Config) error { return err } - defer f.Close() + defer ioutil.CheckClose(f, &err) b, err := cfg.Marshal() if err != nil { diff --git a/storage/filesystem/index.go b/storage/filesystem/index.go index 456ef0b..14ab09a 100644 --- a/storage/filesystem/index.go +++ b/storage/filesystem/index.go @@ -5,6 +5,7 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing/format/index" "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit" + "gopkg.in/src-d/go-git.v4/utils/ioutil" ) type IndexStorage struct { @@ -17,10 +18,11 @@ func (s *IndexStorage) SetIndex(idx *index.Index) error { return err } - defer f.Close() + defer ioutil.CheckClose(f, &err) e := index.NewEncoder(f) - return e.Encode(idx) + err = e.Encode(idx) + return err } func (s *IndexStorage) Index() (*index.Index, error) { @@ -37,8 +39,9 @@ func (s *IndexStorage) Index() (*index.Index, error) { return nil, err } - defer f.Close() + defer ioutil.CheckClose(f, &err) d := index.NewDecoder(f) - return idx, d.Decode(idx) + err = d.Decode(idx) + return idx, err } diff --git a/storage/filesystem/internal/dotgit/dotgit.go b/storage/filesystem/internal/dotgit/dotgit.go index f3a2308..9bbf4e8 100644 --- a/storage/filesystem/internal/dotgit/dotgit.go +++ b/storage/filesystem/internal/dotgit/dotgit.go @@ -253,10 +253,10 @@ func (d *DotGit) SetRef(r *plumbing.Reference) error { return err } - if _, err := f.Write([]byte(content)); err != nil { - return err - } - return f.Close() + defer ioutil.CheckClose(f, &err) + + _, err = f.Write([]byte(content)) + return err } // Refs scans the git directory collecting references, which it returns. diff --git a/storage/filesystem/object.go b/storage/filesystem/object.go index dc88108..8bf84f2 100644 --- a/storage/filesystem/object.go +++ b/storage/filesystem/object.go @@ -11,6 +11,7 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing/storer" "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit" "gopkg.in/src-d/go-git.v4/storage/memory" + "gopkg.in/src-d/go-git.v4/utils/ioutil" "gopkg.in/src-d/go-billy.v3" ) @@ -53,10 +54,11 @@ func (s *ObjectStorage) loadIdxFile(h plumbing.Hash) error { if err != nil { return err } - defer idxfile.Close() + defer ioutil.CheckClose(idxfile, &err) s.index[h] = make(idx) - return s.index[h].Decode(idxfile) + err = s.index[h].Decode(idxfile) + return err } func (s *ObjectStorage) NewEncodedObject() plumbing.EncodedObject { @@ -94,14 +96,14 @@ func (s *ObjectStorage) SetEncodedObject(o plumbing.EncodedObject) (plumbing.Has return plumbing.ZeroHash, err } - defer ow.Close() + defer ioutil.CheckClose(ow, &err) or, err := o.Reader() if err != nil { return plumbing.ZeroHash, err } - defer or.Close() + defer ioutil.CheckClose(or, &err) if err := ow.WriteHeader(o.Type(), o.Size()); err != nil { return plumbing.ZeroHash, err @@ -111,7 +113,7 @@ func (s *ObjectStorage) SetEncodedObject(o plumbing.EncodedObject) (plumbing.Has return plumbing.ZeroHash, err } - return o.Hash(), nil + return o.Hash(), err } // EncodedObject returns the object with the given hash, by searching for it in @@ -143,7 +145,7 @@ func (s *ObjectStorage) getFromUnpacked(h plumbing.Hash) (obj plumbing.EncodedOb return nil, err } - defer f.Close() + defer ioutil.CheckClose(f, &err) obj = s.NewEncodedObject() r, err := objfile.NewReader(f) @@ -151,7 +153,7 @@ func (s *ObjectStorage) getFromUnpacked(h plumbing.Hash) (obj plumbing.EncodedOb return nil, err } - defer r.Close() + defer ioutil.CheckClose(r, &err) t, size, err := r.Header() if err != nil { @@ -186,7 +188,7 @@ func (s *ObjectStorage) getFromPackfile(h plumbing.Hash) (plumbing.EncodedObject return nil, err } - defer f.Close() + defer ioutil.CheckClose(f, &err) p := packfile.NewScanner(f) d, err := packfile.NewDecoder(p, memory.NewStorage()) @@ -195,7 +197,8 @@ func (s *ObjectStorage) getFromPackfile(h plumbing.Hash) (plumbing.EncodedObject } d.SetOffsets(s.index[pack]) - return d.DecodeObjectAt(offset) + obj, err := d.DecodeObjectAt(offset) + return obj, err } func (s *ObjectStorage) findObjectInPackfile(h plumbing.Hash) (plumbing.Hash, int64) { diff --git a/storage/filesystem/shallow.go b/storage/filesystem/shallow.go index 107818c..394e6ed 100644 --- a/storage/filesystem/shallow.go +++ b/storage/filesystem/shallow.go @@ -6,6 +6,7 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit" + "gopkg.in/src-d/go-git.v4/utils/ioutil" ) // ShallowStorage where the shallow commits are stored, an internal to @@ -23,14 +24,14 @@ func (s *ShallowStorage) SetShallow(commits []plumbing.Hash) error { return err } - defer f.Close() + defer ioutil.CheckClose(f, &err) for _, h := range commits { if _, err := fmt.Fprintf(f, "%s\n", h); err != err { return err } } - return nil + return err } // Shallow return the shallow commits reading from shallo file from .git -- cgit