Merge remote-tracking branch 'carlos/tree-deep-search'
This commit is contained in:
commit
b27b10eb56
18
src/tree.c
18
src/tree.c
@ -191,14 +191,26 @@ Tree_len(Tree *self)
|
|||||||
int
|
int
|
||||||
Tree_contains(Tree *self, PyObject *py_name)
|
Tree_contains(Tree *self, PyObject *py_name)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int err;
|
||||||
|
git_tree_entry *entry;
|
||||||
char *name = py_path_to_c_str(py_name);
|
char *name = py_path_to_c_str(py_name);
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
result = git_tree_entry_byname(self->tree, name) ? 1 : 0;
|
err = git_tree_entry_bypath(&entry, self->tree, name);
|
||||||
free(name);
|
free(name);
|
||||||
return result;
|
|
||||||
|
if (err == GIT_ENOTFOUND)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (err < 0) {
|
||||||
|
Error_set(err);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
git_tree_entry_free(entry);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
TreeEntry *
|
TreeEntry *
|
||||||
|
@ -120,6 +120,13 @@ class TreeTest(utils.BareRepoTestCase):
|
|||||||
for tree_entry in tree:
|
for tree_entry in tree:
|
||||||
self.assertEqual(tree_entry, tree[tree_entry.name])
|
self.assertEqual(tree_entry, tree[tree_entry.name])
|
||||||
|
|
||||||
|
def test_deep_contains(self):
|
||||||
|
tree = self.repo[TREE_SHA]
|
||||||
|
self.assertTrue('a' in tree)
|
||||||
|
self.assertTrue('c' in tree)
|
||||||
|
self.assertTrue('c/d' in tree)
|
||||||
|
self.assertFalse('c/e' in tree)
|
||||||
|
self.assertFalse('d' in tree)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user