summaryrefslogtreecommitdiff
path: root/refdb.go
diff options
context:
space:
mode:
authorAidan Nulman <[email protected]>2014-02-24 03:01:47 -0500
committerAidan Nulman <[email protected]>2014-02-24 03:01:47 -0500
commitdecaf064f9ace275789657343d5123ee5290ea31 (patch)
tree843bbf40222a52103a45337bac397371279c780c /refdb.go
parent1c23e8ece34d217bcc787f1c5da6bfb143f27e9b (diff)
add custom refdb backend support
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..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)
+}