@@ -72,35 +72,41 @@ func (v *Repository) Index() (*Index, error) {
7272 return newIndexFromC (ptr ), nil
7373}
7474
75- func (v * Repository ) LookupTree (oid * Oid ) (* Tree , error ) {
76- tree := new ( Tree )
77- ret := C .git_tree_lookup ( & tree . ptr , v .ptr , oid .toC ())
75+ func (v * Repository ) Lookup (oid * Oid , t ObjectType ) (Object , error ) {
76+ var ptr * C. git_object
77+ ret := C .git_object_lookup ( & ptr , v .ptr , oid .toC (), C . git_otype ( t ))
7878 if ret < 0 {
7979 return nil , LastError ()
8080 }
8181
82- return tree , nil
82+ return allocObject ( ptr ) , nil
8383}
8484
85- func (v * Repository ) LookupCommit (o * Oid ) (* Commit , error ) {
86- commit := new (Commit )
87- ecode := C .git_commit_lookup (& commit .ptr , v .ptr , o .toC ())
88- if ecode < 0 {
89- return nil , LastError ()
85+ func (v * Repository ) LookupTree (oid * Oid ) (* Tree , error ) {
86+ obj , err := v .Lookup (oid , OBJ_TREE )
87+ if err != nil {
88+ return nil , err
9089 }
9190
92- return commit , nil
91+ return obj .( * Tree ) , nil
9392}
9493
95- func (v * Repository ) LookupBlob (o * Oid ) (* Blob , error ) {
96- blob := new (Blob )
97- ecode := C .git_blob_lookup (& blob .ptr , v .ptr , o .toC ())
98- if ecode < 0 {
99- return nil , LastError ()
94+ func (v * Repository ) LookupCommit (oid * Oid ) (* Commit , error ) {
95+ obj , err := v .Lookup (oid , OBJ_COMMIT )
96+ if err != nil {
97+ return nil , err
98+ }
99+
100+ return obj .(* Commit ), nil
101+ }
102+
103+ func (v * Repository ) LookupBlob (oid * Oid ) (* Blob , error ) {
104+ obj , err := v .Lookup (oid , OBJ_BLOB )
105+ if err != nil {
106+ return nil , err
100107 }
101108
102- runtime .SetFinalizer (blob , (* Blob ).Free )
103- return blob , nil
109+ return obj .(* Blob ), nil
104110}
105111
106112func (v * Repository ) LookupReference (name string ) (* Reference , error ) {
0 commit comments