From 4c1569511db5e1d26e42e9cd8dadb9e65ccafb20 Mon Sep 17 00:00:00 2001 From: Jeremy Stribling Date: Wed, 29 Nov 2017 14:15:32 -0800 Subject: storer: separate loose and packed object mgmt into optional ifaces Suggested by mcuadros. --- plumbing/storer/object.go | 40 +++++++++++++++++++++++++--------------- plumbing/storer/object_test.go | 21 --------------------- 2 files changed, 25 insertions(+), 36 deletions(-) (limited to 'plumbing') diff --git a/plumbing/storer/object.go b/plumbing/storer/object.go index e5f98d7..f1d19ef 100644 --- a/plumbing/storer/object.go +++ b/plumbing/storer/object.go @@ -40,6 +40,26 @@ type EncodedObjectStorer interface { // HasEncodedObject returns ErrObjNotFound if the object doesn't // exist. If the object does exist, it returns nil. HasEncodedObject(plumbing.Hash) error +} + +// DeltaObjectStorer is an EncodedObjectStorer that can return delta +// objects. +type DeltaObjectStorer interface { + // DeltaObject is the same as EncodedObject but without resolving deltas. + // Deltas will be returned as plumbing.DeltaObject instances. + DeltaObject(plumbing.ObjectType, plumbing.Hash) (plumbing.EncodedObject, error) +} + +// Transactioner is a optional method for ObjectStorer, it enable transaction +// base write and read operations in the storage +type Transactioner interface { + // Begin starts a transaction. + Begin() Transaction +} + +// LooseObjectStorer is an optional interface for managing "loose" +// objects, i.e. those not in packfiles. +type LooseObjectStorer interface { // ForEachObjectHash iterates over all the (loose) object hashes // in the repository without necessarily having to read those objects. // Objects only inside pack files may be omitted. @@ -52,6 +72,11 @@ type EncodedObjectStorer interface { LooseObjectTime(plumbing.Hash) (time.Time, error) // DeleteLooseObject deletes a loose object if it exists. DeleteLooseObject(plumbing.Hash) error +} + +// PackedObjectStorer is an optional interface for managing objects in +// packfiles. +type PackedObjectStorer interface { // ObjectPacks returns hashes of object packs if the underlying // implementation has pack files. ObjectPacks() ([]plumbing.Hash, error) @@ -60,21 +85,6 @@ type EncodedObjectStorer interface { DeleteOldObjectPackAndIndex(plumbing.Hash, time.Time) error } -// DeltaObjectStorer is an EncodedObjectStorer that can return delta -// objects. -type DeltaObjectStorer interface { - // DeltaObject is the same as EncodedObject but without resolving deltas. - // Deltas will be returned as plumbing.DeltaObject instances. - DeltaObject(plumbing.ObjectType, plumbing.Hash) (plumbing.EncodedObject, error) -} - -// Transactioner is a optional method for ObjectStorer, it enable transaction -// base write and read operations in the storage -type Transactioner interface { - // Begin starts a transaction. - Begin() Transaction -} - // PackfileWriter is a optional method for ObjectStorer, it enable direct write // of packfile to the storage type PackfileWriter interface { diff --git a/plumbing/storer/object_test.go b/plumbing/storer/object_test.go index 9a6959d..6b4fe0f 100644 --- a/plumbing/storer/object_test.go +++ b/plumbing/storer/object_test.go @@ -3,7 +3,6 @@ package storer import ( "fmt" "testing" - "time" . "gopkg.in/check.v1" "gopkg.in/src-d/go-git.v4/plumbing" @@ -158,23 +157,3 @@ func (o *MockObjectStorage) IterEncodedObjects(t plumbing.ObjectType) (EncodedOb func (o *MockObjectStorage) Begin() Transaction { return nil } - -func (o *MockObjectStorage) ForEachObjectHash(fun func(plumbing.Hash) error) error { - return nil -} - -func (o *MockObjectStorage) LooseObjectTime(plumbing.Hash) (time.Time, error) { - return time.Time{}, plumbing.ErrObjectNotFound -} - -func (o *MockObjectStorage) DeleteLooseObject(plumbing.Hash) error { - return plumbing.ErrObjectNotFound -} - -func (o *MockObjectStorage) ObjectPacks() ([]plumbing.Hash, error) { - return nil, nil -} - -func (o *MockObjectStorage) DeleteOldObjectPackAndIndex(plumbing.Hash, time.Time) error { - return plumbing.ErrObjectNotFound -} -- cgit