Add "len(treebuider)" to the API
This commit is contained in:
@@ -56,20 +56,16 @@ TreeBuilder_insert(TreeBuilder *self, PyObject *args)
|
|||||||
git_oid oid;
|
git_oid oid;
|
||||||
const char *fname;
|
const char *fname;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "sOi", &fname, &py_oid, &attr)) {
|
if (!PyArg_ParseTuple(args, "sOi", &fname, &py_oid, &attr))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
len = py_str_to_git_oid(py_oid, &oid);
|
len = py_str_to_git_oid(py_oid, &oid);
|
||||||
if (len < 0) {
|
if (len < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
err = git_treebuilder_insert(NULL, self->bld, fname, &oid, attr);
|
err = git_treebuilder_insert(NULL, self->bld, fname, &oid, attr);
|
||||||
if (err < 0) {
|
if (err < 0)
|
||||||
Error_set(err);
|
return Error_set(err);
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
@@ -138,6 +134,20 @@ PyMethodDef TreeBuilder_methods[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Py_ssize_t
|
||||||
|
TreeBuilder_len(TreeBuilder *self)
|
||||||
|
{
|
||||||
|
return (Py_ssize_t)git_treebuilder_entrycount(self->bld);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PyMappingMethods TreeBuilder_as_mapping = {
|
||||||
|
(lenfunc)TreeBuilder_len, /* mp_length */
|
||||||
|
0, /* mp_subscript */
|
||||||
|
0, /* mp_ass_subscript */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
PyDoc_STRVAR(TreeBuilder__doc__, "TreeBuilder objects.");
|
PyDoc_STRVAR(TreeBuilder__doc__, "TreeBuilder objects.");
|
||||||
|
|
||||||
PyTypeObject TreeBuilderType = {
|
PyTypeObject TreeBuilderType = {
|
||||||
@@ -153,7 +163,7 @@ PyTypeObject TreeBuilderType = {
|
|||||||
0, /* tp_repr */
|
0, /* tp_repr */
|
||||||
0, /* tp_as_number */
|
0, /* tp_as_number */
|
||||||
0, /* tp_as_sequence */
|
0, /* tp_as_sequence */
|
||||||
0, /* tp_as_mapping */
|
&TreeBuilder_as_mapping, /* tp_as_mapping */
|
||||||
0, /* tp_hash */
|
0, /* tp_hash */
|
||||||
0, /* tp_call */
|
0, /* tp_call */
|
||||||
0, /* tp_str */
|
0, /* tp_str */
|
||||||
|
@@ -41,25 +41,33 @@ class TreeBuilderTest(utils.BareRepoTestCase):
|
|||||||
def test_new_empty_treebuilder(self):
|
def test_new_empty_treebuilder(self):
|
||||||
self.repo.TreeBuilder()
|
self.repo.TreeBuilder()
|
||||||
|
|
||||||
|
|
||||||
def test_noop_treebuilder(self):
|
def test_noop_treebuilder(self):
|
||||||
tree = self.repo[TREE_SHA]
|
tree = self.repo[TREE_SHA]
|
||||||
bld = self.repo.TreeBuilder(TREE_SHA)
|
bld = self.repo.TreeBuilder(TREE_SHA)
|
||||||
result = bld.write()
|
result = bld.write()
|
||||||
|
|
||||||
|
self.assertEqual(len(bld), len(tree))
|
||||||
self.assertEqual(tree.oid, result)
|
self.assertEqual(tree.oid, result)
|
||||||
|
|
||||||
|
|
||||||
def test_noop_treebuilder_from_tree(self):
|
def test_noop_treebuilder_from_tree(self):
|
||||||
tree = self.repo[TREE_SHA]
|
tree = self.repo[TREE_SHA]
|
||||||
bld = self.repo.TreeBuilder(tree)
|
bld = self.repo.TreeBuilder(tree)
|
||||||
result = bld.write()
|
result = bld.write()
|
||||||
|
|
||||||
|
self.assertEqual(len(bld), len(tree))
|
||||||
self.assertEqual(tree.oid, result)
|
self.assertEqual(tree.oid, result)
|
||||||
|
|
||||||
|
|
||||||
def test_rebuild_treebuilder(self):
|
def test_rebuild_treebuilder(self):
|
||||||
tree = self.repo[TREE_SHA]
|
tree = self.repo[TREE_SHA]
|
||||||
bld = self.repo.TreeBuilder()
|
bld = self.repo.TreeBuilder()
|
||||||
for e in tree:
|
for e in tree:
|
||||||
bld.insert(e.name, e.hex, e.filemode)
|
bld.insert(e.name, e.hex, e.filemode)
|
||||||
|
|
||||||
result = bld.write()
|
result = bld.write()
|
||||||
|
|
||||||
|
self.assertEqual(len(bld), len(tree))
|
||||||
self.assertEqual(tree.oid, result)
|
self.assertEqual(tree.oid, result)
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user