From 29840d28ade46db361fc0fe492115e41e8ecf9fd Mon Sep 17 00:00:00 2001 From: David Calavera Date: Fri, 22 Aug 2014 22:36:18 -0700 Subject: Extract data into a go struct. --- revparse.go | 69 +++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 27 deletions(-) (limited to 'revparse.go') diff --git a/revparse.go b/revparse.go index 05a75a0..6992238 100644 --- a/revparse.go +++ b/revparse.go @@ -12,37 +12,52 @@ import ( "unsafe" ) -type RevSpec struct { - ptr *C.git_revspec - repo *Repository -} +type RevparseFlag int -func newRevSpecFrom(ptr *C.git_revspec, repo *Repository) *RevSpec { - rev := &RevSpec{ - ptr: ptr, - repo: repo, - } +const ( + RevparseSingle RevparseFlag = C.GIT_REVPARSE_SINGLE + RevparseRange = C.GIT_REVPARSE_RANGE + RevparseMergeBase = C.GIT_REVPARSE_MERGE_BASE +) - return rev +type Revspec struct { + to Object + from Object + flags RevparseFlag } -func (r *RevSpec) From() Object { - if r.ptr.from == nil { - return nil - } +func (rs *Revspec) To() Object { + return rs.to +} + +func (rs *Revspec) From() Object { + return rs.from +} - return allocObject(r.ptr.from, r.repo) +func (rs *Revspec) Flags() RevparseFlag { + return rs.flags } -func (r *RevSpec) To() Object { - if r.ptr.to == nil { - return nil +func newRevspecFromC(ptr *C.git_revspec, repo *Repository) *Revspec { + var to Object + var from Object + + if ptr.to != nil { + to = allocObject(ptr.to, repo) + } + + if ptr.from != nil { + from = allocObject(ptr.from, repo) } - return allocObject(r.ptr.to, r.repo) + return &Revspec{ + to: to, + from: from, + flags: RevparseFlag(ptr.flags), + } } -func (r *Repository) RevParse(spec string) (*RevSpec, error) { +func (r *Repository) Revparse(spec string) (*Revspec, error) { cspec := C.CString(spec) defer C.free(unsafe.Pointer(cspec)) @@ -56,27 +71,27 @@ func (r *Repository) RevParse(spec string) (*RevSpec, error) { return nil, MakeGitError(ecode) } - return newRevSpecFrom(ptr, r), nil + return newRevspecFromC(ptr, r), nil } -func (r *Repository) RevParseSingle(spec string) (Object, error) { +func (v *Repository) RevparseSingle(spec string) (Object, error) { cspec := C.CString(spec) defer C.free(unsafe.Pointer(cspec)) - var obj *C.git_object + var ptr *C.git_object runtime.LockOSThread() defer runtime.UnlockOSThread() - ecode := C.git_revparse_single(&obj, r.ptr, cspec) - if ecode != 0 { + ecode := C.git_revparse_single(&ptr, v.ptr, cspec) + if ecode < 0 { return nil, MakeGitError(ecode) } - return allocObject(obj, r), nil + return allocObject(ptr, v), nil } -func (r *Repository) RevParseExt(spec string) (Object, *Reference, error) { +func (r *Repository) RevparseExt(spec string) (Object, *Reference, error) { cspec := C.CString(spec) defer C.free(unsafe.Pointer(cspec)) -- cgit v1.2.3