aboutsummaryrefslogtreecommitdiffstats
path: root/formats
diff options
context:
space:
mode:
authorsona-tar <sona.zip@gmail.com>2016-08-31 05:13:12 +0900
committerMáximo Cuadros <mcuadros@gmail.com>2016-08-30 22:13:12 +0200
commitd72a19796ef0f556db93b553547f2ac085b59a1a (patch)
tree0c5cc404852b0fd46d35f50cbb3afddff49f7018 /formats
parent6d846503013f5a9cde0597698c998b6c0e0dc055 (diff)
downloadgo-git-d72a19796ef0f556db93b553547f2ac085b59a1a.tar.gz
Support non packed objects (#68)
* Support non packed git objects * Support non packed git objects for Iterator * Fix error handling from Writer() in FillObject() * Fix format in func (r *Reader) FillObject(obj core.Object) error * Fix to return d.addRefsFromPackedRefs() error And if packed-refs dosen't exist not to return error in d.addRefsFromPackedRefs * Remove debug code * Add GoDoc for func (d *DotGit) Objectfile(h core.Hash) (fs.FS, string, error) * Add GoDoc for func (r *Reader) FillObject(obj core.Object) error * Add GoDoc for func (d *DotGit) Objectfiles() (fs.FS, []core.Hash, error) * Fix format in func (d *DotGit) Objectfile(h core.Hash) (fs.FS, string, error) * Rename value dotGitobjcts -> objsDir * Change regexp.Compile -> regexp.MustCompile * Move regexp to variable initialization * Rename regexp value to be more coherent * Fix object directory name and object file name to correct character * Faster Objectfiles func * Add test for FillObject * Add GoDoc for func (s *ObjectStorage) Get(h core.Hash) (core.Object, error) * defer Close() * Return name values for defer function overwrite the error value. * Fix error handling in func (s *ObjectStorage) Get() Return error that gets error except for ErrObjfileNotFound from getFromUnpacked() * Rename getFromObject -> getFromUnpacked * Add test for func (d *DotGit) Objectfile(h core.Hash) (fs.FS, string, error) * Add test for func (d *DotGit) Objectfiles() (fs.FS, []core.Hash, error) * Faster check git object name * Faster dotgit_test.go * Fix Godoc for Objectfiles func * Refactor variable name in Objectfiles func * Fix GoDoc for objectfile func * Fix TestObjectfile func and TestObjectfiles func * Rename fixobj -> fixObj in Test Objectfile func * Fix test compare method * Refactor Get func in object.go * Refactor getFromUnpacked func in object.go * Fix GoDoc for ErrObjfileNotFound * Fix TestObjectfiles for not guarantee the slice order * Change error no such file or directory to target file not found * Change spec func (s *ObjectStorage) Get(h core.Hash) (core.Object, error) return core.ErrObjectNotFound, if index pointer is nil. * Add space * storage: Add object type hint parameter to ObjectStorage.getFromUnpacked
Diffstat (limited to 'formats')
-rw-r--r--formats/objfile/reader.go13
-rw-r--r--formats/objfile/reader_test.go32
2 files changed, 45 insertions, 0 deletions
diff --git a/formats/objfile/reader.go b/formats/objfile/reader.go
index 5b17da0..99ed754 100644
--- a/formats/objfile/reader.go
+++ b/formats/objfile/reader.go
@@ -121,3 +121,16 @@ func (r *Reader) Close() (err error) {
return
}
+
+// FillObject fills the given object from an object entry
+func (r *Reader) FillObject(obj core.Object) error {
+ obj.SetType(r.header.t)
+ obj.SetSize(r.header.size)
+ w, err := obj.Writer()
+ if err != nil {
+ return err
+ }
+ _, err = io.Copy(w, r.r)
+
+ return err
+}
diff --git a/formats/objfile/reader_test.go b/formats/objfile/reader_test.go
index ec191f6..964a071 100644
--- a/formats/objfile/reader_test.go
+++ b/formats/objfile/reader_test.go
@@ -69,3 +69,35 @@ func (s *SuiteReader) TestReadCorruptZLib(c *C) {
_, err := NewReader(source)
c.Assert(err, NotNil)
}
+
+func (s *SuiteReader) TestFillObject(c *C) {
+ for k, fixture := range objfileFixtures {
+ com := fmt.Sprintf("test %d: ", k)
+ hash := core.NewHash(fixture.hash)
+ content, _ := base64.StdEncoding.DecodeString(fixture.content)
+ data, _ := base64.StdEncoding.DecodeString(fixture.data)
+
+ testFillObject(c, bytes.NewReader(data), hash, fixture.t, content, com)
+ }
+}
+
+func testFillObject(c *C, source io.Reader, hash core.Hash, typ core.ObjectType, content []byte, com string) {
+ var o core.Object = &core.MemoryObject{}
+ r, err := NewReader(source)
+ c.Assert(err, IsNil)
+ err = r.FillObject(o)
+ c.Assert(err, IsNil)
+ c.Assert(o.Type(), Equals, typ)
+ c.Assert(o.Size(), Equals, int64(len(content)))
+ c.Assert(o.Hash(), Equals, hash)
+ or, err := o.Reader()
+ c.Assert(err, IsNil)
+ rc, err := ioutil.ReadAll(or)
+ c.Assert(err, IsNil)
+ c.Assert(rc, DeepEquals, content, Commentf("%scontent=%s, expected=%s", base64.StdEncoding.EncodeToString(rc), base64.StdEncoding.EncodeToString(content)))
+ c.Assert(or.Close(), IsNil)
+ _, err = or.Read(make([]byte, 0, 1))
+ c.Assert(err, Equals, nil)
+ ow, err := o.Writer()
+ c.Assert(ow, Equals, o)
+}