aboutsummaryrefslogblamecommitdiffstats
path: root/core/storage.go
blob: 739dfb6c3b75826404fea66d64c90f1a63a2e364 (plain) (tree)
1
2
3
4
5
6
7

            



                
 




                                                                
 

                                           

                                                                               
                          

                                                                               
                                 


                                                                                   
          

                                                                           

                                                                                      
                                             

                                                                               
                                                                           
                                            

                                      

 











                                                                                    


                                                                         
                                         


               



                                                            
                                             



                        









                                                                              
                                             

               
package core

import (
	"errors"
	"io"
)

var (
	//ErrStop is used to stop a ForEach function in an Iter
	ErrStop           = errors.New("stop iter")
	ErrNotImplemented = errors.New("method not-implemented")
)

// ObjectStorage generic storage of objects
type ObjectStorage interface {
	// NewObject returns a new Object, the real type of the object can be a
	// custom implementation or the defaul one, MemoryObject
	NewObject() Object
	// Set save an object into the storage, the object shuld be create with
	// the NewObject, method, and file if the type is not supported.
	Set(Object) (Hash, error)
	// Get an object by hash with the given ObjectType. Implementors should
	// return (nil, ErrObjectNotFound) if an object doesn't exist with both the
	// given hash and object type.
	//
	// Valid ObjectType values are CommitObject, BlobObject, TagObject,
	// TreeObject and AnyObject.
	//
	// If AnyObject is given, the object must be looked up regardless of its type.
	Get(ObjectType, Hash) (Object, error)
	// Iter returns a custom ObjectIter over all the object on the storage.
	//
	// Valid ObjectType values are CommitObject, BlobObject, TagObject,
	Iter(ObjectType) (ObjectIter, error)
	// Begin starts a transaction.
	Begin() TxObjectStorage
}

// ObjectStorageWrite is a optional method for ObjectStorage, it enable direct
// write of packfile to the storage
type ObjectStorageWrite interface {
	// Writer retuns a writer for writing a packfile to the Storage, this method
	// is optional, if not implemented the ObjectStorage should return a
	// ErrNotImplemented error.
	//
	// If the implementation not implements Writer the objects should be written
	// using the Set method.
	Writer() (io.WriteCloser, error)
}

// ObjectIter is a generic closable interface for iterating over objects.
type ObjectIter interface {
	Next() (Object, error)
	ForEach(func(Object) error) error
	Close()
}

// TxObjectStorage is an in-progress storage transaction.
// A transaction must end with a call to Commit or Rollback.
type TxObjectStorage interface {
	Set(Object) (Hash, error)
	Get(ObjectType, Hash) (Object, error)
	Commit() error
	Rollback() error
}

// ReferenceStorage generic storage of references
type ReferenceStorage interface {
	Set(*Reference) error
	Get(ReferenceName) (*Reference, error)
	Iter() (ReferenceIter, error)
}

// ReferenceIter is a generic closable interface for iterating over references
type ReferenceIter interface {
	Next() (*Reference, error)
	ForEach(func(*Reference) error) error
	Close()
}