diff --git a/revparse.go b/revparse.go index f78867f..7c43798 100644 --- a/revparse.go +++ b/revparse.go @@ -14,39 +14,45 @@ import ( type RevSpec struct { ptr *C.git_revspec - From Object - To Object repo *Repository } func newRevSpecFrom(ptr *C.git_revspec, repo *Repository) *RevSpec { rev := &RevSpec{ ptr: ptr, - From: allocObject(ptr.from, repo), - To: allocObject(ptr.to, repo), repo: repo, } - runtime.SetFinalizer(rev, (*RevSpec).Free) return rev } -func (r *RevSpec) Free() { - runtime.SetFinalizer(r, nil) - r.From.Free() - r.To.Free() +func (r *RevSpec) From() Object { + if r.ptr.from == nil { + return nil + } + + return allocObject(r.ptr.from, r.repo) +} + +func (r *RevSpec) To() Object { + if r.ptr.to == nil { + return nil + } + + return allocObject(r.ptr.to, r.repo) } func (r *Repository) RevParse(spec string) (*RevSpec, error) { cspec := C.CString(spec) defer C.free(unsafe.Pointer(cspec)) + var ptr *C.git_revspec runtime.LockOSThread() defer runtime.UnlockOSThread() ecode := C.git_revparse(ptr, r.ptr, cspec) - if ecode < 0 { + if ecode != 0 { return nil, MakeGitError(ecode) }