summaryrefslogtreecommitdiff
path: root/repository.go
diff options
context:
space:
mode:
Diffstat (limited to 'repository.go')
-rw-r--r--repository.go24
1 files changed, 20 insertions, 4 deletions
diff --git a/repository.go b/repository.go
index 015e5bf..0a07dc3 100644
--- a/repository.go
+++ b/repository.go
@@ -72,7 +72,7 @@ func (v *Repository) Index() (*Index, error) {
return newIndexFromC(ptr), nil
}
-func (v *Repository) Lookup(oid *Oid, t ObjectType) (Object, error) {
+func (v *Repository) lookupType(oid *Oid, t ObjectType) (Object, error) {
var ptr *C.git_object
ret := C.git_object_lookup(&ptr, v.ptr, oid.toC(), C.git_otype(t))
if ret < 0 {
@@ -82,8 +82,12 @@ func (v *Repository) Lookup(oid *Oid, t ObjectType) (Object, error) {
return allocObject(ptr), nil
}
+func (v *Repository) Lookup(oid *Oid) (Object, error) {
+ return v.lookupType(oid, OBJ_ANY)
+}
+
func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
- obj, err := v.Lookup(oid, OBJ_TREE)
+ obj, err := v.lookupType(oid, OBJ_TREE)
if err != nil {
return nil, err
}
@@ -92,7 +96,7 @@ func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
}
func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) {
- obj, err := v.Lookup(oid, OBJ_COMMIT)
+ obj, err := v.lookupType(oid, OBJ_COMMIT)
if err != nil {
return nil, err
}
@@ -101,7 +105,7 @@ func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) {
}
func (v *Repository) LookupBlob(oid *Oid) (*Blob, error) {
- obj, err := v.Lookup(oid, OBJ_BLOB)
+ obj, err := v.lookupType(oid, OBJ_BLOB)
if err != nil {
return nil, err
}
@@ -247,3 +251,15 @@ func (v *Repository) TreeBuilder() (*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
+ ecode := C.git_revparse_single(&ptr, v.ptr, cspec)
+ if ecode < 0 {
+ return nil, LastError()
+ }
+
+ return allocObject(ptr), nil
+}