add OdbBackend.Free() and the C it wraps; go fmt odb.go
This commit is contained in:
parent
d59f6d6d90
commit
1c23e8ece3
45
odb.go
45
odb.go
|
@ -5,12 +5,13 @@ package git
|
||||||
#include <git2/errors.h>
|
#include <git2/errors.h>
|
||||||
|
|
||||||
extern int _go_git_odb_foreach(git_odb *db, void *payload);
|
extern int _go_git_odb_foreach(git_odb *db, void *payload);
|
||||||
|
extern void _go_git_odb_backend_free(git_odb_backend *backend);
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
import (
|
import (
|
||||||
"unsafe"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Odb struct {
|
type Odb struct {
|
||||||
|
@ -18,33 +19,33 @@ type Odb struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type OdbBackend struct {
|
type OdbBackend struct {
|
||||||
ptr *C.git_odb_backend
|
ptr *C.git_odb_backend
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewOdb() (odb *Odb, err error) {
|
func NewOdb() (odb *Odb, err error) {
|
||||||
odb = new(Odb)
|
odb = new(Odb)
|
||||||
|
|
||||||
ret := C.git_odb_new(&odb.ptr)
|
ret := C.git_odb_new(&odb.ptr)
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return nil, LastError()
|
return nil, LastError()
|
||||||
}
|
}
|
||||||
|
|
||||||
runtime.SetFinalizer(odb, (*Odb).Free)
|
runtime.SetFinalizer(odb, (*Odb).Free)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewOdbBackendFromC(ptr *C.git_odb_backend) (backend *OdbBackend) {
|
func NewOdbBackendFromC(ptr *C.git_odb_backend) (backend *OdbBackend) {
|
||||||
backend = &OdbBackend{ptr}
|
backend = &OdbBackend{ptr}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func (v *Odb) AddBackend(backend *OdbBackend, priority int) (err error) {
|
func (v *Odb) AddBackend(backend *OdbBackend, priority int) (err error) {
|
||||||
ret := C.git_odb_add_backend(v.ptr, backend.ptr, C.int(priority))
|
ret := C.git_odb_add_backend(v.ptr, backend.ptr, C.int(priority))
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
err = LastError()
|
backend.Free()
|
||||||
}
|
err = LastError()
|
||||||
return nil
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Odb) Exists(oid *Oid) bool {
|
func (v *Odb) Exists(oid *Oid) bool {
|
||||||
|
@ -93,9 +94,9 @@ func odbForEachCb(id *C.git_oid, payload unsafe.Pointer) int {
|
||||||
select {
|
select {
|
||||||
case ch <- oid:
|
case ch <- oid:
|
||||||
case <-ch:
|
case <-ch:
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
return 0;
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Odb) forEachWrap(ch chan *Oid) {
|
func (v *Odb) forEachWrap(ch chan *Oid) {
|
||||||
|
@ -136,6 +137,10 @@ func (v *Odb) NewWriteStream(size int, otype ObjectType) (*OdbWriteStream, error
|
||||||
return stream, nil
|
return stream, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *OdbBackend) Free() {
|
||||||
|
C._go_git_odb_backend_free(v.ptr)
|
||||||
|
}
|
||||||
|
|
||||||
type OdbObject struct {
|
type OdbObject struct {
|
||||||
ptr *C.git_odb_object
|
ptr *C.git_odb_object
|
||||||
}
|
}
|
||||||
|
@ -199,7 +204,7 @@ func (stream *OdbReadStream) Free() {
|
||||||
|
|
||||||
type OdbWriteStream struct {
|
type OdbWriteStream struct {
|
||||||
ptr *C.git_odb_stream
|
ptr *C.git_odb_stream
|
||||||
Id Oid
|
Id Oid
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write writes to the stream
|
// Write writes to the stream
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "git2.h"
|
#include "git2.h"
|
||||||
|
#include "git2/sys/odb_backend.h"
|
||||||
#include "git2/submodule.h"
|
#include "git2/submodule.h"
|
||||||
#include "git2/pack.h"
|
#include "git2/pack.h"
|
||||||
|
|
||||||
|
@ -24,4 +25,12 @@ int _go_git_odb_foreach(git_odb *db, void *payload)
|
||||||
{
|
{
|
||||||
return git_odb_foreach(db, (git_odb_foreach_cb)&odbForEachCb, payload);
|
return git_odb_foreach(db, (git_odb_foreach_cb)&odbForEachCb, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _go_git_odb_backend_free(git_odb_backend *backend)
|
||||||
|
{
|
||||||
|
if (backend->free)
|
||||||
|
backend->free(backend);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Reference in New Issue