diff options
| author | David Calavera <[email protected]> | 2014-08-22 22:36:18 -0700 |
|---|---|---|
| committer | David Calavera <[email protected]> | 2014-08-22 22:36:18 -0700 |
| commit | 29840d28ade46db361fc0fe492115e41e8ecf9fd (patch) | |
| tree | b240a72cf6d432fe497525b61e0df891f8c86d11 /revparse.go | |
| parent | 94d207e11cf2b7c3f405191c0525cdf67b4b14f7 (diff) | |
Extract data into a go struct.
Diffstat (limited to 'revparse.go')
| -rw-r--r-- | revparse.go | 69 |
1 files changed, 42 insertions, 27 deletions
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)) |
