summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Calavera <[email protected]>2014-08-22 22:36:18 -0700
committerDavid Calavera <[email protected]>2014-08-22 22:36:18 -0700
commit29840d28ade46db361fc0fe492115e41e8ecf9fd (patch)
treeb240a72cf6d432fe497525b61e0df891f8c86d11
parent94d207e11cf2b7c3f405191c0525cdf67b4b14f7 (diff)
Extract data into a go struct.
-rw-r--r--repository.go17
-rw-r--r--revparse.go69
-rw-r--r--revparse_test.go12
3 files changed, 48 insertions, 50 deletions
diff --git a/repository.go b/repository.go
index 8cc966c..5b4e806 100644
--- a/repository.go
+++ b/repository.go
@@ -469,23 +469,6 @@ func (v *Repository) TreeBuilderFromTree(tree *Tree) (*TreeBuilder, error) {
return bld, nil
}
-func (v *Repository) RevparseSingle(spec string) (Object, error) {
- cspec := C.CString(spec)
- defer C.free(unsafe.Pointer(cspec))
-
- var ptr *C.git_object
-
- runtime.LockOSThread()
- defer runtime.UnlockOSThread()
-
- ecode := C.git_revparse_single(&ptr, v.ptr, cspec)
- if ecode < 0 {
- return nil, MakeGitError(ecode)
- }
-
- return allocObject(ptr, v), nil
-}
-
// EnsureLog ensures that there is a reflog for the given reference
// name and creates an empty one if necessary.
func (v *Repository) EnsureLog(name string) error {
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))
diff --git a/revparse_test.go b/revparse_test.go
index fc267a3..c046a20 100644
--- a/revparse_test.go
+++ b/revparse_test.go
@@ -5,31 +5,31 @@ import (
"testing"
)
-func TestRevParse(t *testing.T) {
+func TestRevparse(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
commitId, _ := seedTestRepo(t, repo)
- revSpec, err := repo.RevParse("HEAD")
+ revSpec, err := repo.Revparse("HEAD")
checkFatal(t, err)
checkObject(t, revSpec.From(), commitId)
}
-func TestRevParseSingle(t *testing.T) {
+func TestRevparseSingle(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
commitId, _ := seedTestRepo(t, repo)
- obj, err := repo.RevParseSingle("HEAD")
+ obj, err := repo.RevparseSingle("HEAD")
checkFatal(t, err)
checkObject(t, obj, commitId)
}
-func TestRevParseExt(t *testing.T) {
+func TestRevparseExt(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
@@ -38,7 +38,7 @@ func TestRevParseExt(t *testing.T) {
ref, err := repo.CreateReference("refs/heads/master", treeId, true, nil, "")
checkFatal(t, err)
- obj, ref, err := repo.RevParseExt("master")
+ obj, ref, err := repo.RevparseExt("master")
checkFatal(t, err)
checkObject(t, obj, treeId)