summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Calavera <[email protected]>2014-07-24 17:41:10 -0700
committerDavid Calavera <[email protected]>2014-07-24 17:41:10 -0700
commit691d8f23bad4e6ff850fd0504bc7a8ed1cd656e9 (patch)
tree82e021bb86bfdd5aabbd2dd5d7c795c3de579375
parent43b6e0b15487b3a109f586fedfc69c8e73089b70 (diff)
Add Repository#RevParseSingle.
-rw-r--r--revparse.go17
-rw-r--r--revparse_test.go14
2 files changed, 30 insertions, 1 deletions
diff --git a/revparse.go b/revparse.go
index bc9a4e2..9cd494f 100644
--- a/revparse.go
+++ b/revparse.go
@@ -58,3 +58,20 @@ func (r *Repository) RevParse(spec string) (*RevSpec, error) {
return newRevSpecFrom(ptr, r), nil
}
+
+func (r *Repository) RevParseSingle(spec string) (Object, error) {
+ cspec := C.CString(spec)
+ defer C.free(unsafe.Pointer(cspec))
+
+ var obj *C.git_object
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ecode := C.git_revparse_single(&obj, r.ptr, cspec)
+ if ecode != 0 {
+ return nil, MakeGitError(ecode)
+ }
+
+ return allocObject(obj, r), nil
+}
diff --git a/revparse_test.go b/revparse_test.go
index 45dc7dc..df553a0 100644
--- a/revparse_test.go
+++ b/revparse_test.go
@@ -5,7 +5,7 @@ import (
"testing"
)
-func TestRevParseSingle(t *testing.T) {
+func TestRevParse(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
@@ -17,6 +17,18 @@ func TestRevParseSingle(t *testing.T) {
checkObject(t, revSpec.From(), commitId)
}
+func TestRevParseSingle(t *testing.T) {
+ repo := createTestRepo(t)
+ defer os.RemoveAll(repo.Workdir())
+
+ commitId, _ := seedTestRepo(t, repo)
+
+ obj, err := repo.RevParseSingle("HEAD")
+ checkFatal(t, err)
+
+ checkObject(t, obj, commitId)
+}
+
func checkObject(t *testing.T, obj Object, id *Oid) {
if obj == nil {
t.Fatalf("bad object")