summaryrefslogtreecommitdiff
path: root/refdb.go
diff options
context:
space:
mode:
Diffstat (limited to 'refdb.go')
-rw-r--r--refdb.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/refdb.go b/refdb.go
new file mode 100644
index 0000000..9550b49
--- /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 refdb, nil
+}
+
+func NewRefdbBackendFromC(ptr *C.git_refdb_backend) (backend *RefdbBackend) {
+ backend = &RefdbBackend{ptr}
+ return backend
+}
+
+func (v *Refdb) SetBackend(backend *RefdbBackend) (err error) {
+ ret := C.git_refdb_set_backend(v.ptr, backend.ptr)
+ if ret < 0 {
+ backend.Free()
+ return LastError()
+ }
+ return nil
+}
+
+func (v *RefdbBackend) Free() {
+ C._go_git_refdb_backend_free(v.ptr)
+}