add custom refdb backend support

This commit is contained in:
Aidan Nulman 2014-02-24 03:01:47 -05:00
parent 1c23e8ece3
commit decaf064f9
3 changed files with 79 additions and 6 deletions

50
refdb.go Normal file
View File

@ -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)
}

View File

@ -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)

View File

@ -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 */