Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions plumbing/format/packfile/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -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'}
Expand All @@ -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)
Expand All @@ -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
}
21 changes: 8 additions & 13 deletions plumbing/format/packfile/scanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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 {
Expand All @@ -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
Expand Down Expand Up @@ -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
}

Expand Down
11 changes: 6 additions & 5 deletions storage/filesystem/config.go
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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
}
Expand All @@ -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 {
Expand All @@ -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 {
Expand Down
11 changes: 7 additions & 4 deletions storage/filesystem/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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) {
Expand All @@ -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
}
8 changes: 4 additions & 4 deletions storage/filesystem/internal/dotgit/dotgit.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
28 changes: 26 additions & 2 deletions storage/filesystem/internal/dotgit/writers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

. "gopkg.in/check.v1"
"gopkg.in/src-d/go-billy.v3/osfs"
"gopkg.in/src-d/go-git.v4/plumbing/format/packfile"
)

func (s *SuiteDotGit) TestNewObjectPack(c *C) {
Expand All @@ -35,13 +36,30 @@ func (s *SuiteDotGit) TestNewObjectPack(c *C) {

c.Assert(w.Close(), IsNil)

stat, err := fs.Stat(fmt.Sprintf("objects/pack/pack-%s.pack", f.PackfileHash))
pfPath := fmt.Sprintf("objects/pack/pack-%s.pack", f.PackfileHash)
idxPath := fmt.Sprintf("objects/pack/pack-%s.idx", f.PackfileHash)

stat, err := fs.Stat(pfPath)
c.Assert(err, IsNil)
c.Assert(stat.Size(), Equals, int64(84794))

stat, err = fs.Stat(fmt.Sprintf("objects/pack/pack-%s.idx", f.PackfileHash))
stat, err = fs.Stat(idxPath)
c.Assert(err, IsNil)
c.Assert(stat.Size(), Equals, int64(1940))

pf, err := fs.Open(pfPath)
c.Assert(err, IsNil)
pfs := packfile.NewScanner(pf)
_, objects, err := pfs.Header()
c.Assert(err, IsNil)
for i := uint32(0); i < objects; i++ {
_, err := pfs.NextObjectHeader()
if err != nil {
c.Assert(err, IsNil)
break
}
}
c.Assert(pfs.Close(), IsNil)
}

func (s *SuiteDotGit) TestNewObjectPackUnused(c *C) {
Expand All @@ -63,6 +81,12 @@ func (s *SuiteDotGit) TestNewObjectPackUnused(c *C) {
info, err := fs.ReadDir("objects/pack")
c.Assert(err, IsNil)
c.Assert(info, HasLen, 0)

// check clean up of temporary files
info, err = fs.ReadDir("")
for _, fi := range info {
c.Assert(fi.IsDir(), Equals, true)
}
}

func (s *SuiteDotGit) TestSyncedReader(c *C) {
Expand Down
21 changes: 12 additions & 9 deletions storage/filesystem/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -143,15 +145,15 @@ 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)
if err != nil {
return nil, err
}

defer r.Close()
defer ioutil.CheckClose(r, &err)

t, size, err := r.Header()
if err != nil {
Expand Down Expand Up @@ -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())
Expand All @@ -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) {
Expand Down
5 changes: 3 additions & 2 deletions storage/filesystem/shallow.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
1 change: 1 addition & 0 deletions storage/filesystem/storage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ func (s *StorageSuite) SetUpTest(c *C) {
c.Assert(err, IsNil)

s.BaseStorageSuite = test.NewBaseStorageSuite(storage)
s.BaseStorageSuite.SetUpTest(c)
}

func (s *StorageSuite) TestFilesystem(c *C) {
Expand Down
1 change: 1 addition & 0 deletions storage/memory/storage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ var _ = Suite(&StorageSuite{})

func (s *StorageSuite) SetUpTest(c *C) {
s.BaseStorageSuite = test.NewBaseStorageSuite(NewStorage())
s.BaseStorageSuite.SetUpTest(c)
}
Loading