Add Repository#RevParseExt.
This commit is contained in:
parent
691d8f23ba
commit
94d207e11c
22
revparse.go
22
revparse.go
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue