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']