Implemented git_tree_entry_bypath within Tree.__getitem__

This commit is contained in:
Ben Davis 2012-08-03 01:09:45 -05:00
parent a1716a3a92
commit 398e717ec6
2 changed files with 13 additions and 1 deletions
src/pygit2
test

@ -26,6 +26,7 @@
*/
#define PY_SSIZE_T_CLEAN
#include <string.h>
#include <Python.h>
#include <pygit2/error.h>
#include <pygit2/utils.h>
@ -247,7 +248,15 @@ Tree_getitem(Tree *self, PyObject *value)
name = py_path_to_c_str(value);
if (name == NULL)
return NULL;
entry = git_tree_entry_byname(self->tree, name);
if (strchr(name, '/') != NULL) {
/* Case 2a: path string */
git_tree_entry_bypath(&entry, self->tree, name);
} else {
/* Case 2b: base name */
entry = git_tree_entry_byname(self->tree, name);
}
free(name);
if (!entry) {
PyErr_SetObject(PyExc_KeyError, value);

@ -68,6 +68,9 @@ class TreeTest(utils.BareRepoTestCase):
self.assertTreeEntryEqual(tree[-2], sha, 'b', 0o0100644)
self.assertTreeEntryEqual(tree['b'], sha, 'b', 0o0100644)
sha = '297efb891a47de80be0cfe9c639e4b8c9b450989'
self.assertTreeEntryEqual(tree['c/d'], sha, 'd', 0o0100644)
def test_read_subtree(self):
tree = self.repo[TREE_SHA]
subtree_entry = tree['c']