summaryrefslogtreecommitdiff
path: root/reference.go
diff options
context:
space:
mode:
Diffstat (limited to 'reference.go')
-rw-r--r--reference.go37
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