From 1c23e8ece34d217bcc787f1c5da6bfb143f27e9b Mon Sep 17 00:00:00 2001 From: Aidan Nulman Date: Wed, 29 Jan 2014 18:55:17 -0500 Subject: add OdbBackend.Free() and the C it wraps; go fmt odb.go --- wrapper.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'wrapper.c') 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 */ -- cgit v1.2.3 From decaf064f9ace275789657343d5123ee5290ea31 Mon Sep 17 00:00:00 2001 From: Aidan Nulman Date: Mon, 24 Feb 2014 03:01:47 -0500 Subject: add custom refdb backend support --- refdb.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ repository.go | 26 ++++++++++++++++++++------ wrapper.c | 9 +++++++++ 3 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 refdb.go (limited to 'wrapper.c') diff --git a/refdb.go b/refdb.go new file mode 100644 index 0000000..3b8ed03 --- /dev/null +++ b/refdb.go @@ -0,0 +1,50 @@ +package git + +/* +#include +#include + +extern void _go_git_refdb_backend_free(git_refdb_backend *backend); +*/ +import "C" +import ( + "runtime" +) + +type Refdb struct { + ptr *C.git_refdb +} + +type RefdbBackend struct { + ptr *C.git_refdb_backend +} + +func (v *Repository) NewRefdb() (refdb *Refdb, err error) { + refdb = new(Refdb) + + ret := C.git_refdb_new(&refdb.ptr, v.ptr) + if ret < 0 { + return nil, LastError() + } + + runtime.SetFinalizer(refdb, (*Refdb).Free) + return +} + +func NewRefdbBackendFromC(ptr *C.git_refdb_backend) (backend *RefdbBackend) { + backend = &RefdbBackend{ptr} + return +} + +func (v *Refdb) SetBackend(backend *RefdbBackend) (err error) { + ret := C.git_refdb_set_backend(v.ptr, backend.ptr) + if ret < 0 { + backend.Free() + err = LastError() + } + return +} + +func (v *RefdbBackend) Free() { + C._go_git_refdb_backend_free(v.ptr) +} diff --git a/repository.go b/repository.go index 68b9aba..f8b327a 100644 --- a/repository.go +++ b/repository.go @@ -15,6 +15,10 @@ type Repository struct { ptr *C.git_repository } +func (v *Repository) Pointer() *C.git_repository { + return v.ptr +} + func OpenRepository(path string) (*Repository, error) { repo := new(Repository) @@ -52,15 +56,20 @@ func InitRepository(path string, isbare bool) (*Repository, error) { } func NewRepositoryWrapOdb(odb *Odb) (repo *Repository, err error) { - repo = new(Repository) + repo = new(Repository) - ret := C.git_repository_wrap_odb(&repo.ptr, odb.ptr) - if ret < 0 { - return nil, LastError() + ret := C.git_repository_wrap_odb(&repo.ptr, odb.ptr) + if ret < 0 { + return nil, LastError() } - runtime.SetFinalizer(repo, (*Repository).Free) - return + runtime.SetFinalizer(repo, (*Repository).Free) + return +} + +func (v *Repository) SetRefdb(refdb *Refdb) { + C.git_repository_set_refdb(v.ptr, refdb.ptr) + return } func (v *Repository) Free() { @@ -269,6 +278,11 @@ func (v *Odb) Free() { C.git_odb_free(v.ptr) } +func (v *Refdb) Free() { + runtime.SetFinalizer(v, nil) + C.git_refdb_free(v.ptr) +} + func (v *Repository) Odb() (odb *Odb, err error) { odb = new(Odb) diff --git a/wrapper.c b/wrapper.c index 6f69a7a..66a6110 100644 --- a/wrapper.c +++ b/wrapper.c @@ -1,6 +1,7 @@ #include "_cgo_export.h" #include "git2.h" #include "git2/sys/odb_backend.h" +#include "git2/sys/refdb_backend.h" #include "git2/submodule.h" #include "git2/pack.h" @@ -33,4 +34,12 @@ void _go_git_odb_backend_free(git_odb_backend *backend) return; } + +void _go_git_refdb_backend_free(git_refdb_backend *backend) +{ + if (backend->free) + backend->free(backend); + + return; +} /* EOF */ -- cgit v1.2.3