From 0af572dd21c0aa79d13745b633ee24ba6c4d6cf1 Mon Sep 17 00:00:00 2001 From: "Santiago M. Mola" Date: Wed, 14 Dec 2016 23:12:44 +0100 Subject: move plumbing from top level package to plumbing (#183) * plumbing: rename Object -> EncodedObject. * plumbing/storer: rename ObjectStorer -> EncodedObjectStorer. * move difftree to plumbing/difftree. * move diff -> utils/diff * make Object/Tag/Blob/Tree/Commit/File depend on storer. * Object and its implementations now depend only on storer.EncodedObjectStorer, not git.Repository. * Tests are decoupled accordingly. * move Object/Commit/File/Tag/Tree to plumbing/object. * move Object/Commit/File/Tag/Tree to plumbing/object. * move checkClose to utils/ioutil. * move RevListObjects to plumbing/revlist.Objects. * move DiffTree to plumbing/difftree package. * rename files with plural nouns to singular * plumbing/object: add GetBlob/GetCommit/GetTag/GetTree. --- blobs.go | 116 --------------------------------------------------------------- 1 file changed, 116 deletions(-) delete mode 100644 blobs.go (limited to 'blobs.go') diff --git a/blobs.go b/blobs.go deleted file mode 100644 index 9585af8..0000000 --- a/blobs.go +++ /dev/null @@ -1,116 +0,0 @@ -package git - -import ( - "io" - - "gopkg.in/src-d/go-git.v4/plumbing" - "gopkg.in/src-d/go-git.v4/plumbing/storer" -) - -// Blob is used to store file data - it is generally a file. -type Blob struct { - Hash plumbing.Hash - Size int64 - - obj plumbing.Object -} - -// ID returns the object ID of the blob. The returned value will always match -// the current value of Blob.Hash. -// -// ID is present to fulfill the Object interface. -func (b *Blob) ID() plumbing.Hash { - return b.Hash -} - -// Type returns the type of object. It always returns plumbing.BlobObject. -// -// Type is present to fulfill the Object interface. -func (b *Blob) Type() plumbing.ObjectType { - return plumbing.BlobObject -} - -// Decode transforms a plumbing.Object into a Blob struct. -func (b *Blob) Decode(o plumbing.Object) error { - if o.Type() != plumbing.BlobObject { - return ErrUnsupportedObject - } - - b.Hash = o.Hash() - b.Size = o.Size() - b.obj = o - - return nil -} - -// Encode transforms a Blob into a plumbing.Object. -func (b *Blob) Encode(o plumbing.Object) error { - w, err := o.Writer() - if err != nil { - return err - } - defer checkClose(w, &err) - r, err := b.Reader() - if err != nil { - return err - } - defer checkClose(r, &err) - _, err = io.Copy(w, r) - o.SetType(plumbing.BlobObject) - return err -} - -// Reader returns a reader allow the access to the content of the blob -func (b *Blob) Reader() (io.ReadCloser, error) { - return b.obj.Reader() -} - -// BlobIter provides an iterator for a set of blobs. -type BlobIter struct { - storer.ObjectIter - r *Repository -} - -// NewBlobIter returns a CommitIter for the given repository and underlying -// object iterator. -// -// The returned BlobIter will automatically skip over non-blob objects. -func NewBlobIter(r *Repository, iter storer.ObjectIter) *BlobIter { - return &BlobIter{iter, r} -} - -// Next moves the iterator to the next blob and returns a pointer to it. If it -// has reached the end of the set it will return io.EOF. -func (iter *BlobIter) Next() (*Blob, error) { - for { - obj, err := iter.ObjectIter.Next() - if err != nil { - return nil, err - } - - if obj.Type() != plumbing.BlobObject { - continue - } - - blob := &Blob{} - return blob, blob.Decode(obj) - } -} - -// ForEach call the cb function for each blob contained on this iter until -// an error happens or the end of the iter is reached. If ErrStop is sent -// the iteration is stop but no error is returned. The iterator is closed. -func (iter *BlobIter) ForEach(cb func(*Blob) error) error { - return iter.ObjectIter.ForEach(func(obj plumbing.Object) error { - if obj.Type() != plumbing.BlobObject { - return nil - } - - blob := &Blob{} - if err := blob.Decode(obj); err != nil { - return err - } - - return cb(blob) - }) -} -- cgit