summaryrefslogtreecommitdiff
path: root/repository.go
diff options
context:
space:
mode:
Diffstat (limited to 'repository.go')
-rw-r--r--repository.go40
1 files changed, 23 insertions, 17 deletions
diff --git a/repository.go b/repository.go
index 3de4974..015e5bf 100644
--- a/repository.go
+++ b/repository.go
@@ -72,35 +72,41 @@ func (v *Repository) Index() (*Index, error) {
return newIndexFromC(ptr), nil
}
-func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
- tree := new(Tree)
- ret := C.git_tree_lookup(&tree.ptr, v.ptr, oid.toC())
+func (v *Repository) Lookup(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 {
return nil, LastError()
}
- return tree, nil
+ return allocObject(ptr), nil
}
-func (v *Repository) LookupCommit(o *Oid) (*Commit, error) {
- commit := new(Commit)
- ecode := C.git_commit_lookup(&commit.ptr, v.ptr, o.toC())
- if ecode < 0 {
- return nil, LastError()
+func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
+ obj, err := v.Lookup(oid, OBJ_TREE)
+ if err != nil {
+ return nil, err
}
- return commit, nil
+ return obj.(*Tree), nil
}
-func (v *Repository) LookupBlob(o *Oid) (*Blob, error) {
- blob := new(Blob)
- ecode := C.git_blob_lookup(&blob.ptr, v.ptr, o.toC())
- if ecode < 0 {
- return nil, LastError()
+func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) {
+ obj, err := v.Lookup(oid, OBJ_COMMIT)
+ if err != nil {
+ return nil, err
+ }
+
+ return obj.(*Commit), nil
+}
+
+func (v *Repository) LookupBlob(oid *Oid) (*Blob, error) {
+ obj, err := v.Lookup(oid, OBJ_BLOB)
+ if err != nil {
+ return nil, err
}
- runtime.SetFinalizer(blob, (*Blob).Free)
- return blob, nil
+ return obj.(*Blob), nil
}
func (v *Repository) LookupReference(name string) (*Reference, error) {