50 lines
854 B
Go
50 lines
854 B
Go
package git
|
|
|
|
/*
|
|
#cgo pkg-config: libgit2
|
|
#include <git2.h>
|
|
#include <git2/errors.h>
|
|
*/
|
|
import "C"
|
|
import "runtime"
|
|
|
|
type ObjectType int
|
|
|
|
var (
|
|
OBJ_ANY ObjectType = C.GIT_OBJ_ANY
|
|
OBJ_BAD ObjectType = C.GIT_OBJ_BAD
|
|
OBJ_COMMIT ObjectType = C.GIT_OBJ_COMMIT
|
|
OBJ_TREE ObjectType = C.GIT_OBJ_TREE
|
|
OBJ_BLOB ObjectType = C.GIT_OBJ_BLOB
|
|
OBJ_TAG ObjectType = C.GIT_OBJ_TAG
|
|
)
|
|
|
|
type Object interface {
|
|
Free()
|
|
Id() *Oid
|
|
Type() ObjectType
|
|
}
|
|
|
|
func allocObject(cobj *C.git_object) Object {
|
|
var object Object
|
|
|
|
switch ObjectType(C.git_object_type(cobj)) {
|
|
case OBJ_COMMIT:
|
|
object = &Commit{cobj}
|
|
runtime.SetFinalizer(object, (*Commit).Free)
|
|
|
|
case OBJ_TREE:
|
|
object = &Tree{cobj}
|
|
runtime.SetFinalizer(object, (*Tree).Free)
|
|
|
|
case OBJ_BLOB:
|
|
object = &Blob{cobj}
|
|
runtime.SetFinalizer(object, (*Blob).Free)
|
|
|
|
default:
|
|
return nil
|
|
}
|
|
|
|
return object
|
|
}
|