@@ -214,7 +214,8 @@ treeentry_to_object(TreeEntry* self)
214214 int err ;
215215
216216 if (self -> repo == NULL ) {
217- PyErr_SetString (PyExc_ValueError , "No repository associated with this TreeEntry" );
217+ PyErr_SetString (PyExc_ValueError ,
218+ "No repository associated with this TreeEntry" );
218219 return NULL ;
219220 }
220221 py_repo = self -> repo ;
@@ -225,8 +226,9 @@ treeentry_to_object(TreeEntry* self)
225226 return NULL ;
226227 }
227228
228- return wrap_object (obj , py_repo );
229+ return wrap_object (obj , py_repo , self -> entry );
229230}
231+
230232PyDoc_STRVAR (TreeEntry_obj__doc__ , "Object (subtree/blob)" );
231233
232234PyObject *
@@ -238,7 +240,7 @@ TreeEntry_obj__get__(TreeEntry *self)
238240 if (subtree == NULL )
239241 return NULL ;
240242
241- return wrap_object ((git_object * )subtree , self -> repo );
243+ return wrap_object ((git_object * )subtree , self -> repo , self -> entry );
242244 } else {
243245 return treeentry_to_object (self );
244246 }
@@ -302,10 +304,10 @@ TreeEntry_getitem(TreeEntry *self, PyObject *value)
302304
303305 if (PyInt_Check (value )) {
304306 /* Case 1: integer */
305- r = tree_getitem_by_index (subtree , self -> repo , value );
307+ r = tree_getentry_by_index (subtree , self -> repo , value );
306308 } else {
307309 /* Case 2: byte or text string */
308- r = tree_getitem_by_path (subtree , self -> repo , value );
310+ r = tree_getentry_by_path (subtree , self -> repo , value );
309311 }
310312
311313 git_tree_free (subtree );
@@ -533,7 +535,7 @@ Tree_iter(Tree *self)
533535}
534536
535537TreeEntry *
536- tree_getitem_by_index (const git_tree * tree , Repository * repo , PyObject * py_index )
538+ tree_getentry_by_index (const git_tree * tree , Repository * repo , PyObject * py_index )
537539{
538540 int index ;
539541 const git_tree_entry * entry_src ;
@@ -558,7 +560,7 @@ tree_getitem_by_index(const git_tree *tree, Repository *repo, PyObject *py_index
558560}
559561
560562TreeEntry *
561- tree_getitem_by_path (const git_tree * tree , Repository * repo , PyObject * py_path )
563+ tree_getentry_by_path (const git_tree * tree , Repository * repo , PyObject * py_path )
562564{
563565 char * path ;
564566 git_tree_entry * entry ;
@@ -586,14 +588,23 @@ tree_getitem_by_path(const git_tree *tree, Repository *repo, PyObject *py_path)
586588}
587589
588590TreeEntry *
589- Tree_getitem (Tree * self , PyObject * value )
591+ Tree_getentry (Tree * self , PyObject * value )
590592{
591593 /* Case 1: integer */
592594 if (PyInt_Check (value ))
593- return tree_getitem_by_index (self -> tree , self -> repo , value );
595+ return tree_getentry_by_index (self -> tree , self -> repo , value );
594596
595597 /* Case 2: byte or text string */
596- return tree_getitem_by_path (self -> tree , self -> repo , value );
598+ return tree_getentry_by_path (self -> tree , self -> repo , value );
599+ }
600+
601+ PyObject *
602+ Tree_getobj (Tree * self , PyObject * value )
603+ {
604+ TreeEntry * entry = tree_getentry_by_path (self -> tree , self -> repo , value );
605+ if (entry == NULL )
606+ return NULL ;
607+ return treeentry_to_object (entry );
597608}
598609
599610
@@ -782,7 +793,7 @@ PySequenceMethods Tree_as_sequence = {
782793
783794PyMappingMethods Tree_as_mapping = {
784795 (lenfunc )Tree_len , /* mp_length */
785- (binaryfunc )Tree_getitem , /* mp_subscript */
796+ (binaryfunc )Tree_getentry , /* mp_subscript */
786797 0 , /* mp_ass_subscript */
787798};
788799
@@ -801,7 +812,7 @@ PyNumberMethods Tree_as_number = {
801812 0 , /* nb_subtract */
802813 0 , /* nb_multiply */
803814#if PY_MAJOR_VERSION < 3
804- (binaryfunc )Tree_getitem , /* Py2: nb_divide */
815+ (binaryfunc )Tree_getobj , /* Py2: nb_divide */
805816#endif
806817 0 , /* nb_remainder */
807818 0 , /* nb_divmod */
@@ -837,7 +848,7 @@ PyNumberMethods Tree_as_number = {
837848 0 , /* nb_inplace_xor */
838849 0 , /* nb_inplace_or */
839850 0 , /* nb_floor_divide */
840- (binaryfunc )Tree_getitem , /* nb_true_divide */
851+ (binaryfunc )Tree_getobj , /* nb_true_divide */
841852 0 , /* nb_inplace_floor_divide */
842853 0 , /* nb_inplace_true_divide */
843854 0 , /* nb_index */
0 commit comments