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
|
||||
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);
|
||||
if (name == NULL)
|
||||
return -1;
|
||||
|
||||
result = git_tree_entry_byname(self->tree, name) ? 1 : 0;
|
||||
err = git_tree_entry_bypath(&entry, self->tree, 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 *
|
||||
|
@ -120,6 +120,13 @@ class TreeTest(utils.BareRepoTestCase):
|
||||
for tree_entry in tree:
|
||||
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__':
|
||||
unittest.main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user