summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAidan Nulman <[email protected]>2014-01-29 18:55:17 -0500
committerAidan Nulman <[email protected]>2014-01-29 18:55:17 -0500
commit1c23e8ece34d217bcc787f1c5da6bfb143f27e9b (patch)
tree1865dd4fe4fa7dec79d317f21da42605a5a3fde2
parentd59f6d6d9029e7ee75602a850b57292bbd1db761 (diff)
add OdbBackend.Free() and the C it wraps; go fmt odb.go
-rw-r--r--odb.go45
-rw-r--r--wrapper.c9
2 files changed, 34 insertions, 20 deletions
diff --git a/odb.go b/odb.go
index c7c8bd9..fc8fbd4 100644
--- a/odb.go
+++ b/odb.go
@@ -5,12 +5,13 @@ package git
#include <git2/errors.h>
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 (
- "unsafe"
"reflect"
"runtime"
+ "unsafe"
)
type Odb struct {
@@ -18,33 +19,33 @@ type Odb struct {
}
type OdbBackend struct {
- ptr *C.git_odb_backend
+ ptr *C.git_odb_backend
}
func NewOdb() (odb *Odb, err error) {
- odb = new(Odb)
+ odb = new(Odb)
- ret := C.git_odb_new(&odb.ptr)
- if ret < 0 {
- return nil, LastError()
- }
+ ret := C.git_odb_new(&odb.ptr)
+ if ret < 0 {
+ return nil, LastError()
+ }
- runtime.SetFinalizer(odb, (*Odb).Free)
- return
+ runtime.SetFinalizer(odb, (*Odb).Free)
+ return
}
func NewOdbBackendFromC(ptr *C.git_odb_backend) (backend *OdbBackend) {
- backend = &OdbBackend{ptr}
- return
+ backend = &OdbBackend{ptr}
+ return
}
-
func (v *Odb) AddBackend(backend *OdbBackend, priority int) (err error) {
- ret := C.git_odb_add_backend(v.ptr, backend.ptr, C.int(priority))
- if ret < 0 {
- err = LastError()
- }
- return nil
+ ret := C.git_odb_add_backend(v.ptr, backend.ptr, C.int(priority))
+ if ret < 0 {
+ backend.Free()
+ err = LastError()
+ }
+ return nil
}
func (v *Odb) Exists(oid *Oid) bool {
@@ -93,9 +94,9 @@ func odbForEachCb(id *C.git_oid, payload unsafe.Pointer) int {
select {
case ch <- oid:
case <-ch:
- return -1
+ return -1
}
- return 0;
+ return 0
}
func (v *Odb) forEachWrap(ch chan *Oid) {
@@ -136,6 +137,10 @@ func (v *Odb) NewWriteStream(size int, otype ObjectType) (*OdbWriteStream, error
return stream, nil
}
+func (v *OdbBackend) Free() {
+ C._go_git_odb_backend_free(v.ptr)
+}
+
type OdbObject struct {
ptr *C.git_odb_object
}
@@ -199,7 +204,7 @@ func (stream *OdbReadStream) Free() {
type OdbWriteStream struct {
ptr *C.git_odb_stream
- Id Oid
+ Id Oid
}
// Write writes to the stream
diff --git a/wrapper.c b/wrapper.c
index 2af3974..6f69a7a 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -1,5 +1,6 @@
#include "_cgo_export.h"
#include "git2.h"
+#include "git2/sys/odb_backend.h"
#include "git2/submodule.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);
}
+
+void _go_git_odb_backend_free(git_odb_backend *backend)
+{
+ if (backend->free)
+ backend->free(backend);
+
+ return;
+}
/* EOF */