From 19b241bd55966f495b7e32f56dc54b42a13dd0b8 Mon Sep 17 00:00:00 2001 From: Aidan Nulman Date: Thu, 19 Dec 2013 00:33:23 -0500 Subject: [PATCH] Refactor InitRepositoryWCustomOdbBackend() into component functions --- odb.go | 23 ++++++++++++++++++++++- repository.go | 34 +++++++--------------------------- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/odb.go b/odb.go index acde696..774e94c 100644 --- a/odb.go +++ b/odb.go @@ -17,8 +17,29 @@ type Odb struct { ptr *C.git_odb } +// OdbBackends need public Ptrs: client apps init the backend type OdbBackend struct { - ptr *C.git_odb_backend + Ptr *C.git_odb_backend +} + +func InitOdb() (odb *Odb, err error) { + odb = new(Odb) + + ret := C.git_odb_new(&odb.ptr) + if ret < 0 { + return nil, LastError() + } + + runtime.SetFinalizer(odb, (*Odb).Free) + return +} + +func (v *Odb) AddBackend(backend *OdbBackend, priority int) (err error) { + ret := C.git_odb_add_backend(v.ptr, backend.Ptr, C.int(priority)) + if ret < 0 { + err = LastError() + } + return nil } func (v *Odb) Exists(oid *Oid) bool { diff --git a/repository.go b/repository.go index c65bd9d..503c1b3 100644 --- a/repository.go +++ b/repository.go @@ -15,8 +15,6 @@ type Repository struct { ptr *C.git_repository } -type InitCustomBackend func(**C.git_odb_backend) int - func OpenRepository(path string) (*Repository, error) { repo := new(Repository) @@ -47,34 +45,16 @@ func InitRepository(path string, isbare bool) (*Repository, error) { return repo, nil } -func InitRepositoryWCustomOdbBackend(initStrategy InitCustomBackend, priority int) (*Repository, *Odb, error) { - // inits - repo := new(Repository) - odb := new(Odb) - backend := new(OdbBackend) +func InitRepositoryByWrapOdb(odb *Odb) (repo *Repository, err error) { + repo = new(Repository) - // wrap routine w/abstract function - ret := C.git_odb_new(&odb.ptr) - if ret >= 0 { - ret = C.git_repository_wrap_odb(&repo.ptr, odb.ptr) + ret := C.git_repository_wrap_odb(&repo.ptr, odb.ptr) + if ret < 0 { + return nil, LastError() } - if ret >= 0 { - ret = C.int(initStrategy(&backend.ptr)) - } - - if ret >= 0 { - ret = C.git_odb_add_backend(odb.ptr, backend.ptr, C.int(priority)) - } - - // cleanup and return - if ret < 0 { - return nil, nil, LastError() - } - - runtime.SetFinalizer(repo, (*Repository).Free) - runtime.SetFinalizer(odb, (*Odb).Free) - return repo, odb, nil + runtime.SetFinalizer(repo, (*Repository).Free) + return } func (v *Repository) Free() {