aboutsummaryrefslogblamecommitdiffstats
path: root/core/storage.go
blob: 101115bb8fdf74463018591ea1913c7711f32308 (plain) (tree)
1
2
3
4
5
6
7
8
9

            



                
 

                                                               
                                         
 
 

                                          

                                                                               
                          





                                                                                 
          
                                                                           




                                                                              
          
                                                                           





                                                                             
                                      
                           

 





                                                                                


                                                                                    
                                                

 


                                                                         
                                         


               




                                                                            



                        




                                                    




                                                                              
                                             

               
package core

import (
	"errors"
	"io"
)

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

// ObjectStorer generic storage of objects
type ObjectStorer interface {
	// NewObject returns a new Object, the real type of the object can be a
	// custom implementation or the defaul one, MemoryObject
	NewObject() Object
	// SetObject save an object into the storage, the object shuld be create
	// with the NewObject, method, and file if the type is not supported.
	SetObject(Object) (Hash, error)
	// Object 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.
	Object(ObjectType, Hash) (Object, error)
	// IterObjects returns a custom ObjectIter over all the object on the
	// storage.
	//
	// Valid ObjectType values are CommitObject, BlobObject, TagObject,
	IterObjects(ObjectType) (ObjectIter, 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 {
	// PackfileWriter retuns a writer for writing a packfile to the Storage,
	// this method is optional, if not implemented the ObjectStorer should
	// return a ErrNotImplemented error.
	//
	// If the implementation not implements Writer the objects should be written
	// using the Set method.
	PackfileWriter() (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()
}

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

// ReferenceStorer generic storage of references
type ReferenceStorer interface {
	SetReference(*Reference) error
	Reference(ReferenceName) (*Reference, error)
	IterReferences() (ReferenceIter, error)
}

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