aboutsummaryrefslogtreecommitdiffstats
path: root/storage/memory
diff options
context:
space:
mode:
authorJoshua Sjoding <joshua.sjoding@scjalliance.com>2016-02-24 22:40:30 -0800
committerJoshua Sjoding <joshua.sjoding@scjalliance.com>2016-02-25 00:38:51 -0800
commit0d999e1db6cd8736ab697de8ce848fa3a5274b9f (patch)
tree6107f49405bb605793f1bcd7ef4961ceadcb11e9 /storage/memory
parent07ca1ac7f3058ea6d3274a01973541fb84782f5e (diff)
downloadgo-git-0d999e1db6cd8736ab697de8ce848fa3a5274b9f.tar.gz
Refactor to use core.ObjectReader and core.ObjectWriter
* New function signatures provide the necessary interface to stream data from disk when using filesystem-based storage in the future * New function signatures provide proper error handling * ObjectReader and ObjectWriter interfaces added to avoid future refactoring, currently are type aliases for io.ReadCloser and io.WriteCloser respectively * Object.Reader now returns (ObjectReader, error) * Object.Writer now returns (ObjectWriter, error) * File.Contents now returns (string, error) * File.Lines now returns ([]string, error) * Blob.Reader now returns (core.ObjectReader, error) * Added internal close helper function for deferred calls to Close that need to check the return value
Diffstat (limited to 'storage/memory')
-rw-r--r--storage/memory/object.go18
-rw-r--r--storage/memory/object_test.go12
-rw-r--r--storage/memory/storage_test.go14
3 files changed, 33 insertions, 11 deletions
diff --git a/storage/memory/object.go b/storage/memory/object.go
index eda6ab7..125e887 100644
--- a/storage/memory/object.go
+++ b/storage/memory/object.go
@@ -2,7 +2,7 @@ package memory
import (
"bytes"
- "io"
+ "io/ioutil"
"gopkg.in/src-d/go-git.v3/core"
)
@@ -39,17 +39,21 @@ func (o *Object) Size() int64 { return o.size }
// SetSize set the object size, the given size should be written afterwards
func (o *Object) SetSize(s int64) { o.size = s }
-// Reader returns a io.Reader used to read the object content
-func (o *Object) Reader() io.Reader {
- return bytes.NewBuffer(o.content)
+// Reader returns a core.ObjectReader used to read the object's content.
+func (o *Object) Reader() (core.ObjectReader, error) {
+ return ioutil.NopCloser(bytes.NewBuffer(o.content)), nil
}
-// Writer returns a io.Writed used to write the object content
-func (o *Object) Writer() io.Writer {
- return o
+// Writer returns a core.ObjectWriter used to write the object's content.
+func (o *Object) Writer() (core.ObjectWriter, error) {
+ return o, nil
}
func (o *Object) Write(p []byte) (n int, err error) {
o.content = append(o.content, p...)
return len(p), nil
}
+
+// Close releases any resources consumed by the object when it is acting as a
+// core.ObjectWriter.
+func (o *Object) Close() error { return nil }
diff --git a/storage/memory/object_test.go b/storage/memory/object_test.go
index f9dd25d..f2873fa 100644
--- a/storage/memory/object_test.go
+++ b/storage/memory/object_test.go
@@ -51,7 +51,11 @@ func (s *ObjectSuite) TestSize(c *C) {
func (s *ObjectSuite) TestReader(c *C) {
o := &Object{content: []byte("foo")}
- b, err := ioutil.ReadAll(o.Reader())
+ reader, err := o.Reader()
+ c.Assert(err, IsNil)
+ defer func() { c.Assert(reader.Close(), IsNil) }()
+
+ b, err := ioutil.ReadAll(reader)
c.Assert(err, IsNil)
c.Assert(b, DeepEquals, []byte("foo"))
}
@@ -59,7 +63,11 @@ func (s *ObjectSuite) TestReader(c *C) {
func (s *ObjectSuite) TestWriter(c *C) {
o := &Object{}
- n, err := o.Writer().Write([]byte("foo"))
+ writer, err := o.Writer()
+ c.Assert(err, IsNil)
+ defer func() { c.Assert(writer.Close(), IsNil) }()
+
+ n, err := writer.Write([]byte("foo"))
c.Assert(err, IsNil)
c.Assert(n, Equals, 3)
diff --git a/storage/memory/storage_test.go b/storage/memory/storage_test.go
index ba7e224..f2fd3da 100644
--- a/storage/memory/storage_test.go
+++ b/storage/memory/storage_test.go
@@ -25,7 +25,12 @@ func (s *ObjectStorageSuite) TestSet(c *C) {
o.SetType(core.CommitObject)
o.SetSize(3)
- o.Writer().Write([]byte("foo"))
+
+ writer, err := o.Writer()
+ c.Assert(err, IsNil)
+ defer func() { c.Assert(writer.Close(), IsNil) }()
+
+ writer.Write([]byte("foo"))
h, err := os.Set(o)
c.Assert(h.String(), Equals, "bc9968d75e48de59f0870ffb71f5e160bbbdcf52")
@@ -39,7 +44,12 @@ func (s *ObjectStorageSuite) TestGet(c *C) {
o.SetType(core.CommitObject)
o.SetSize(3)
- o.Writer().Write([]byte("foo"))
+
+ writer, err := o.Writer()
+ c.Assert(err, IsNil)
+ defer func() { c.Assert(writer.Close(), IsNil) }()
+
+ writer.Write([]byte("foo"))
h, err := os.Set(o)
c.Assert(err, IsNil)