73 lines
1.2 KiB
Go
73 lines
1.2 KiB
Go
package git
|
|
|
|
/*
|
|
#cgo pkg-config: libgit2
|
|
#include <git2.h>
|
|
#include <git2/errors.h>
|
|
*/
|
|
import "C"
|
|
import (
|
|
"unsafe"
|
|
"reflect"
|
|
"runtime"
|
|
)
|
|
|
|
var (
|
|
OBJ_ANY = C.GIT_OBJ_ANY
|
|
OBJ_BAD = C.GIT_OBJ_BAD
|
|
OBJ_COMMIT = C.GIT_OBJ_COMMIT
|
|
OBJ_TREE = C.GIT_OBJ_TREE
|
|
OBJ_BLOB = C.GIT_OBJ_BLOB
|
|
OBJ_TAG = C.GIT_OBJ_TAG
|
|
)
|
|
|
|
type Odb struct {
|
|
ptr *C.git_odb
|
|
}
|
|
|
|
func (v *Odb) Exists(oid *Oid) bool {
|
|
ret := C.git_odb_exists(v.ptr, oid.toC())
|
|
return ret != 0
|
|
}
|
|
|
|
func (v *Odb) Write(data []byte, otype int) (oid *Oid, err error) {
|
|
oid = new(Oid)
|
|
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&data))
|
|
ret := C.git_odb_write(oid.toC(), v.ptr, unsafe.Pointer(hdr.Data), C.size_t(hdr.Len), C.git_otype(otype))
|
|
|
|
if ret < 0 {
|
|
err = LastError()
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (v *Odb) Read(oid *Oid) (obj *OdbObject, err error) {
|
|
obj = new(OdbObject)
|
|
ret := C.git_odb_read(&obj.ptr, v.ptr, oid.toC())
|
|
if ret < 0 {
|
|
return nil, LastError()
|
|
}
|
|
|
|
runtime.SetFinalizer(obj, (*OdbObject).Free)
|
|
return
|
|
}
|
|
|
|
type OdbObject struct {
|
|
ptr *C.git_odb_object
|
|
}
|
|
|
|
func (v *OdbObject) Free() {
|
|
runtime.SetFinalizer(v, nil)
|
|
C.git_odb_object_free(v.ptr)
|
|
}
|
|
|
|
func (v *OdbObject) Type() int {
|
|
return int(C.git_odb_object_type(v.ptr))
|
|
}
|
|
|
|
func (v *OdbObject) Size() int64 {
|
|
return int64(C.git_odb_object_size(v.ptr))
|
|
}
|
|
|