Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.5 KiB
111 lines
2.5 KiB
// 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 |
|
}
|
|
|