Skip to content

Commit b27b10e

Browse files
committed
Merge remote-tracking branch 'carlos/tree-deep-search'
2 parents 4c28c48 + 5baaf28 commit b27b10e

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/tree.c

+15-3
Original file line numberDiff line numberDiff line change
@@ -191,14 +191,26 @@ Tree_len(Tree *self)
191191
int
192192
Tree_contains(Tree *self, PyObject *py_name)
193193
{
194-
int result = 0;
194+
int err;
195+
git_tree_entry *entry;
195196
char *name = py_path_to_c_str(py_name);
196197
if (name == NULL)
197198
return -1;
198199

199-
result = git_tree_entry_byname(self->tree, name) ? 1 : 0;
200+
err = git_tree_entry_bypath(&entry, self->tree, name);
200201
free(name);
201-
return result;
202+
203+
if (err == GIT_ENOTFOUND)
204+
return 0;
205+
206+
if (err < 0) {
207+
Error_set(err);
208+
return -1;
209+
}
210+
211+
git_tree_entry_free(entry);
212+
213+
return 1;
202214
}
203215

204216
TreeEntry *

test/test_tree.py

+7
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,13 @@ def test_iterate_tree(self):
120120
for tree_entry in tree:
121121
self.assertEqual(tree_entry, tree[tree_entry.name])
122122

123+
def test_deep_contains(self):
124+
tree = self.repo[TREE_SHA]
125+
self.assertTrue('a' in tree)
126+
self.assertTrue('c' in tree)
127+
self.assertTrue('c/d' in tree)
128+
self.assertFalse('c/e' in tree)
129+
self.assertFalse('d' in tree)
123130

124131
if __name__ == '__main__':
125132
unittest.main()

0 commit comments

Comments
 (0)