Move RevSpec#From and RevSpec#To to struct methods.

This commit is contained in:
David Calavera 2014-07-24 17:02:14 -07:00
parent 3003e5e190
commit 8bbcdd65a6
1 changed files with 16 additions and 10 deletions

View File

@ -14,39 +14,45 @@ import (
type RevSpec struct { type RevSpec struct {
ptr *C.git_revspec ptr *C.git_revspec
From Object
To Object
repo *Repository repo *Repository
} }
func newRevSpecFrom(ptr *C.git_revspec, repo *Repository) *RevSpec { func newRevSpecFrom(ptr *C.git_revspec, repo *Repository) *RevSpec {
rev := &RevSpec{ rev := &RevSpec{
ptr: ptr, ptr: ptr,
From: allocObject(ptr.from, repo),
To: allocObject(ptr.to, repo),
repo: repo, repo: repo,
} }
runtime.SetFinalizer(rev, (*RevSpec).Free)
return rev return rev
} }
func (r *RevSpec) Free() { func (r *RevSpec) From() Object {
runtime.SetFinalizer(r, nil) if r.ptr.from == nil {
r.From.Free() return nil
r.To.Free() }
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) { func (r *Repository) RevParse(spec string) (*RevSpec, error) {
cspec := C.CString(spec) cspec := C.CString(spec)
defer C.free(unsafe.Pointer(cspec)) defer C.free(unsafe.Pointer(cspec))
var ptr *C.git_revspec var ptr *C.git_revspec
runtime.LockOSThread() runtime.LockOSThread()
defer runtime.UnlockOSThread() defer runtime.UnlockOSThread()
ecode := C.git_revparse(ptr, r.ptr, cspec) ecode := C.git_revparse(ptr, r.ptr, cspec)
if ecode < 0 { if ecode != 0 {
return nil, MakeGitError(ecode) return nil, MakeGitError(ecode)
} }