// package plumbing implement the core interfaces and structs used by go-git package plumbing import ( "errors" "io" ) var ( ErrObjectNotFound = errors.New("object not found") // ErrInvalidType is returned when an invalid object type is provided. ErrInvalidType = errors.New("invalid object type") ) // Object is a generic representation of any git object type EncodedObject interface { Hash() Hash Type() ObjectType SetType(ObjectType) Size() int64 SetSize(int64) Reader() (io.ReadCloser, error) Writer() (io.WriteCloser, error) } // DeltaObject is an EncodedObject representing a delta. type DeltaObject interface { EncodedObject // BaseHash returns the hash of the object used as base for this delta. BaseHash() Hash // ActualHash returns the hash of the object after applying the delta. ActualHash() Hash // Size returns the size of the object after applying the delta. ActualSize() int64 } // ObjectType internal object type // Integer values from 0 to 7 map to those exposed by git. // AnyObject is used to represent any from 0 to 7. type ObjectType int8 const ( InvalidObject ObjectType = 0 CommitObject ObjectType = 1 TreeObject ObjectType = 2 BlobObject ObjectType = 3 TagObject ObjectType = 4 // 5 reserved for future expansion OFSDeltaObject ObjectType = 6 REFDeltaObject ObjectType = 7 AnyObject ObjectType = -127 ) func (t ObjectType) String() string { switch t { case CommitObject: return "commit" case TreeObject: return "tree" case BlobObject: return "blob" case TagObject: return "tag" case OFSDeltaObject: return "ofs-delta" case REFDeltaObject: return "ref-delta" case AnyObject: return "any" default: return "unknown" } } func (t ObjectType) Bytes() []byte { return []byte(t.String()) } // Valid returns true if t is a valid ObjectType. func (t ObjectType) Valid() bool { return t >= CommitObject && t <= REFDeltaObject } // IsDelta returns true for any ObjectTyoe that represents a delta (i.e. // REFDeltaObject or OFSDeltaObject). func (t ObjectType) IsDelta() bool { return t == REFDeltaObject || t == OFSDeltaObject } // ParseObjectType parses a string representation of ObjectType. It returns an // error on parse failure. func ParseObjectType(value string) (typ ObjectType, err error) { switch value { case "commit": typ = CommitObject case "tree": typ = TreeObject case "blob": typ = BlobObject case "tag": typ = TagObject case "ofs-delta": typ = OFSDeltaObject case "ref-delta": typ = REFDeltaObject default: err = ErrInvalidType } return }