Implemented git_tree_entry_bypath within Tree.__getitem__
This commit is contained in:
parent
a1716a3a92
commit
398e717ec6
@ -26,6 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define PY_SSIZE_T_CLEAN
|
#define PY_SSIZE_T_CLEAN
|
||||||
|
#include <string.h>
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
#include <pygit2/error.h>
|
#include <pygit2/error.h>
|
||||||
#include <pygit2/utils.h>
|
#include <pygit2/utils.h>
|
||||||
@ -247,7 +248,15 @@ Tree_getitem(Tree *self, PyObject *value)
|
|||||||
name = py_path_to_c_str(value);
|
name = py_path_to_c_str(value);
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
return 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);
|
free(name);
|
||||||
if (!entry) {
|
if (!entry) {
|
||||||
PyErr_SetObject(PyExc_KeyError, value);
|
PyErr_SetObject(PyExc_KeyError, value);
|
||||||
|
@ -68,6 +68,9 @@ class TreeTest(utils.BareRepoTestCase):
|
|||||||
self.assertTreeEntryEqual(tree[-2], sha, 'b', 0o0100644)
|
self.assertTreeEntryEqual(tree[-2], sha, 'b', 0o0100644)
|
||||||
self.assertTreeEntryEqual(tree['b'], 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):
|
def test_read_subtree(self):
|
||||||
tree = self.repo[TREE_SHA]
|
tree = self.repo[TREE_SHA]
|
||||||
subtree_entry = tree['c']
|
subtree_entry = tree['c']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user