add custom refdb backend support
This commit is contained in:
parent
1c23e8ece3
commit
decaf064f9
|
@ -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)
|
||||||
|
}
|
|
@ -15,6 +15,10 @@ type Repository struct {
|
||||||
ptr *C.git_repository
|
ptr *C.git_repository
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Repository) Pointer() *C.git_repository {
|
||||||
|
return v.ptr
|
||||||
|
}
|
||||||
|
|
||||||
func OpenRepository(path string) (*Repository, error) {
|
func OpenRepository(path string) (*Repository, error) {
|
||||||
repo := new(Repository)
|
repo := new(Repository)
|
||||||
|
|
||||||
|
@ -63,6 +67,11 @@ func NewRepositoryWrapOdb(odb *Odb) (repo *Repository, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Repository) SetRefdb(refdb *Refdb) {
|
||||||
|
C.git_repository_set_refdb(v.ptr, refdb.ptr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Repository) Free() {
|
func (v *Repository) Free() {
|
||||||
runtime.SetFinalizer(v, nil)
|
runtime.SetFinalizer(v, nil)
|
||||||
C.git_repository_free(v.ptr)
|
C.git_repository_free(v.ptr)
|
||||||
|
@ -269,6 +278,11 @@ func (v *Odb) Free() {
|
||||||
C.git_odb_free(v.ptr)
|
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) {
|
func (v *Repository) Odb() (odb *Odb, err error) {
|
||||||
odb = new(Odb)
|
odb = new(Odb)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "git2.h"
|
#include "git2.h"
|
||||||
#include "git2/sys/odb_backend.h"
|
#include "git2/sys/odb_backend.h"
|
||||||
|
#include "git2/sys/refdb_backend.h"
|
||||||
#include "git2/submodule.h"
|
#include "git2/submodule.h"
|
||||||
#include "git2/pack.h"
|
#include "git2/pack.h"
|
||||||
|
|
||||||
|
@ -33,4 +34,12 @@ void _go_git_odb_backend_free(git_odb_backend *backend)
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _go_git_refdb_backend_free(git_refdb_backend *backend)
|
||||||
|
{
|
||||||
|
if (backend->free)
|
||||||
|
backend->free(backend);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Reference in New Issue