Add Repository#RevParseExt.

This commit is contained in:
David Calavera 2014-07-24 21:03:50 -07:00
parent 691d8f23ba
commit 94d207e11c
2 changed files with 40 additions and 0 deletions

View File

@ -75,3 +75,25 @@ func (r *Repository) RevParseSingle(spec string) (Object, error) {
return allocObject(obj, r), nil
}
func (r *Repository) RevParseExt(spec string) (Object, *Reference, error) {
cspec := C.CString(spec)
defer C.free(unsafe.Pointer(cspec))
var obj *C.git_object
var ref *C.git_reference
runtime.LockOSThread()
defer runtime.UnlockOSThread()
ecode := C.git_revparse_ext(&obj, &ref, r.ptr, cspec)
if ecode != 0 {
return nil, nil, MakeGitError(ecode)
}
if ref == nil {
return allocObject(obj, r), nil, nil
}
return allocObject(obj, r), newReferenceFromC(ref, r), nil
}

View File

@ -29,6 +29,24 @@ func TestRevParseSingle(t *testing.T) {
checkObject(t, obj, commitId)
}
func TestRevParseExt(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
_, treeId := seedTestRepo(t, repo)
ref, err := repo.CreateReference("refs/heads/master", treeId, true, nil, "")
checkFatal(t, err)
obj, ref, err := repo.RevParseExt("master")
checkFatal(t, err)
checkObject(t, obj, treeId)
if ref == nil {
t.Fatalf("bad reference")
}
}
func checkObject(t *testing.T, obj Object, id *Oid) {
if obj == nil {
t.Fatalf("bad object")