diff options
Diffstat (limited to 'repository.go')
| -rw-r--r-- | repository.go | 88 |
1 files changed, 84 insertions, 4 deletions
diff --git a/repository.go b/repository.go index 02dcff6..5ae10f2 100644 --- a/repository.go +++ b/repository.go @@ -2,7 +2,7 @@ package git /* #include <git2.h> -#include <git2/errors.h> +#include <git2/sys/repository.h> */ import "C" import ( @@ -69,6 +69,22 @@ func InitRepository(path string, isbare bool) (*Repository, error) { return repo, nil } +func NewRepositoryWrapOdb(odb *Odb) (repo *Repository, err error) { + repo = new(Repository) + + ret := C.git_repository_wrap_odb(&repo.ptr, odb.ptr) + if ret < 0 { + return nil, MakeGitError(ret) + } + + runtime.SetFinalizer(repo, (*Repository).Free) + return repo, nil +} + +func (v *Repository) SetRefdb(refdb *Refdb) { + C.git_repository_set_refdb(v.ptr, refdb.ptr) +} + func (v *Repository) Free() { runtime.SetFinalizer(v, nil) C.git_repository_free(v.ptr) @@ -164,6 +180,63 @@ func (v *Repository) LookupReference(name string) (*Reference, error) { return newReferenceFromC(ptr), nil } +func (v *Repository) Head() (*Reference, error) { + var ptr *C.git_reference + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ecode := C.git_repository_head(&ptr, v.ptr) + if ecode < 0 { + return nil, MakeGitError(ecode) + } + + return newReferenceFromC(ptr), nil +} + +func (v *Repository) SetHead(refname string, sig *Signature, msg string) error { + cname := C.CString(refname) + defer C.free(unsafe.Pointer(cname)) + + csig := sig.toC() + defer C.free(unsafe.Pointer(csig)) + + var cmsg *C.char + if msg != "" { + cmsg = C.CString(msg) + defer C.free(unsafe.Pointer(cmsg)) + } + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ecode := C.git_repository_set_head(v.ptr, cname, csig, cmsg) + if ecode != 0 { + return MakeGitError(ecode) + } + return nil +} + +func (v *Repository) SetHeadDetached(id *Oid, sig *Signature, msg string) error { + csig := sig.toC() + defer C.free(unsafe.Pointer(csig)) + + var cmsg *C.char + if msg != "" { + cmsg = C.CString(msg) + defer C.free(unsafe.Pointer(cmsg)) + } + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ecode := C.git_repository_set_head_detached(v.ptr, id.toC(), csig, cmsg) + if ecode != 0 { + return MakeGitError(ecode) + } + return nil +} + func (v *Repository) CreateReference(name string, id *Oid, force bool, sig *Signature, msg string) (*Reference, error) { cname := C.CString(name) defer C.free(unsafe.Pointer(cname)) @@ -288,6 +361,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) @@ -299,7 +377,7 @@ func (v *Repository) Odb() (odb *Odb, err error) { } runtime.SetFinalizer(odb, (*Odb).Free) - return + return odb, nil } func (repo *Repository) Path() string { @@ -384,7 +462,8 @@ func (v *Repository) EnsureLog(name string) error { runtime.LockOSThread() defer runtime.UnlockOSThread() - if ret := C.git_reference_ensure_log(v.ptr, cname); ret < 0 { + ret := C.git_reference_ensure_log(v.ptr, cname) + if ret < 0 { return MakeGitError(ret) } @@ -417,7 +496,8 @@ func (v *Repository) DwimReference(name string) (*Reference, error) { defer runtime.UnlockOSThread() var ptr *C.git_reference - if ret := C.git_reference_dwim(&ptr, v.ptr, cname); ret < 0 { + ret := C.git_reference_dwim(&ptr, v.ptr, cname) + if ret < 0 { return nil, MakeGitError(ret) } |
