summaryrefslogtreecommitdiff
path: root/reference.go
diff options
context:
space:
mode:
authorAidan Nulman <[email protected]>2014-02-24 03:05:44 -0500
committerAidan Nulman <[email protected]>2014-02-24 03:05:44 -0500
commit2656a72e823e16451480b7858213f6e3cb8bb2fd (patch)
treee31656bc81965c4d18864d8305f2f6ff65fd627a /reference.go
parentdecaf064f9ace275789657343d5123ee5290ea31 (diff)
parentc6d1bde37cc7f3bd213fc182fd9f60a7cd685419 (diff)
Merge branch 'master' into custom_odb
Conflicts: git.go reference.go repository.go submodule.go
Diffstat (limited to 'reference.go')
-rw-r--r--reference.go30
1 files changed, 26 insertions, 4 deletions
diff --git a/reference.go b/reference.go
index 207b1b2..a2f1636 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))
@@ -41,7 +44,6 @@ func (v *Reference) SetSymbolicTarget(target string, sig *Signature, msg string)
defer C.free(unsafe.Pointer(cmsg))
ret := C.git_reference_symbolic_set_target(&ptr, v.ptr, ctarget, csig, cmsg)
-
if ret < 0 {
return nil, LastError()
}
@@ -52,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))
@@ -59,7 +64,6 @@ func (v *Reference) SetTarget(target *Oid, sig *Signature, msg string) (*Referen
defer C.free(unsafe.Pointer(cmsg))
ret := C.git_reference_set_target(&ptr, v.ptr, target.toC(), csig, cmsg)
-
if ret < 0 {
return nil, LastError()
}
@@ -81,15 +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))
+ 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))
+ ret := C.git_reference_rename(&ptr, v.ptr, cname, cbool(force), csig, cmsg)
if ret < 0 {
return nil, LastError()
@@ -132,6 +142,18 @@ func (v *Reference) Type() ReferenceType {
return ReferenceType(C.git_reference_type(v.ptr))
}
+func (v *Reference) IsBranch() bool {
+ return C.git_reference_is_branch(v.ptr) == 1
+}
+
+func (v *Reference) IsRemote() bool {
+ return C.git_reference_is_remote(v.ptr) == 1
+}
+
+func (v *Reference) IsTag() bool {
+ return C.git_reference_is_tag(v.ptr) == 1
+}
+
func (v *Reference) Free() {
runtime.SetFinalizer(v, nil)
C.git_reference_free(v.ptr)