diff options
Diffstat (limited to 'reference.go')
| -rw-r--r-- | reference.go | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/reference.go b/reference.go index 8060146..1ec1fb3 100644 --- a/reference.go +++ b/reference.go @@ -34,6 +34,9 @@ func (v *Reference) SetSymbolicTarget(target string, sig *Signature, msg string) ctarget := C.CString(target) defer C.free(unsafe.Pointer(ctarget)) + runtime.LockOSThread() + defer runtime.UnlockOSThread() + csig := sig.toC() defer C.free(unsafe.Pointer(csig)) @@ -51,6 +54,9 @@ func (v *Reference) SetSymbolicTarget(target string, sig *Signature, msg string) func (v *Reference) SetTarget(target *Oid, sig *Signature, msg string) (*Reference, error) { var ptr *C.git_reference + runtime.LockOSThread() + defer runtime.UnlockOSThread() + csig := sig.toC() defer C.free(unsafe.Pointer(csig)) @@ -68,6 +74,9 @@ func (v *Reference) SetTarget(target *Oid, sig *Signature, msg string) (*Referen func (v *Reference) Resolve() (*Reference, error) { var ptr *C.git_reference + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_reference_resolve(&ptr, v.ptr) if ret < 0 { return nil, LastError() @@ -76,12 +85,21 @@ func (v *Reference) Resolve() (*Reference, error) { return newReferenceFromC(ptr), nil } -func (v *Reference) Rename(name string, force bool) (*Reference, error) { +func (v *Reference) Rename(name string, force bool, sig *Signature, msg string) (*Reference, error) { var ptr *C.git_reference cname := C.CString(name) defer C.free(unsafe.Pointer(cname)) - ret := C.git_reference_rename(&ptr, v.ptr, cname, cbool(force)) + csig := sig.toC() + defer C.free(unsafe.Pointer(csig)) + + cmsg := C.CString(msg) + defer C.free(unsafe.Pointer(cmsg)) + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ret := C.git_reference_rename(&ptr, v.ptr, cname, cbool(force), csig, cmsg) if ret < 0 { return nil, LastError() @@ -104,6 +122,9 @@ func (v *Reference) SymbolicTarget() string { } func (v *Reference) Delete() error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_reference_delete(v.ptr) if ret < 0 { @@ -134,6 +155,10 @@ type ReferenceIterator struct { // NewReferenceIterator creates a new iterator over reference names func (repo *Repository) NewReferenceIterator() (*ReferenceIterator, error) { var ptr *C.git_reference_iterator + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_reference_iterator_new(&ptr, repo.ptr) if ret < 0 { return nil, LastError() @@ -151,6 +176,10 @@ func (repo *Repository) NewReferenceIteratorGlob(glob string) (*ReferenceIterato cstr := C.CString(glob) defer C.free(unsafe.Pointer(cstr)) var ptr *C.git_reference_iterator + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_reference_iterator_glob_new(&ptr, repo.ptr, cstr) if ret < 0 { return nil, LastError() @@ -165,6 +194,10 @@ func (repo *Repository) NewReferenceIteratorGlob(glob string) (*ReferenceIterato // the returned error is git.ErrIterOver func (v *ReferenceIterator) NextName() (string, error) { var ptr *C.char + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_reference_next_name(&ptr, v.ptr) if ret == ITEROVER { return "", ErrIterOver |
