From 398e717ec6fca32f02e21b3694516db39ec648f0 Mon Sep 17 00:00:00 2001 From: Ben Davis <bendavis78@gmail.com> Date: Fri, 3 Aug 2012 01:09:45 -0500 Subject: [PATCH] Implemented git_tree_entry_bypath within Tree.__getitem__ --- src/pygit2/tree.c | 11 ++++++++++- test/test_tree.py | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/pygit2/tree.c b/src/pygit2/tree.c index 827b1c0..d6cc580 100644 --- a/src/pygit2/tree.c +++ b/src/pygit2/tree.c @@ -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); diff --git a/test/test_tree.py b/test/test_tree.py index 4ec22a9..0f70644 100644 --- a/test/test_tree.py +++ b/test/test_tree.py @@ -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']