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
|
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)
|
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) {
|
func checkObject(t *testing.T, obj Object, id *Oid) {
|
||||||
if obj == nil {
|
if obj == nil {
|
||||||
t.Fatalf("bad object")
|
t.Fatalf("bad object")
|
||||||
|
|
Loading…
Reference in New Issue