summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--refdb.go50
-rw-r--r--repository.go26
-rw-r--r--wrapper.c9
3 files changed, 79 insertions, 6 deletions
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 <git2.h>
+#include <git2/errors.h>
+
+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 */