Change signature of TreeBuilder.insert to take (name, oid, attribute).

This is analogous to git_treebuilder_insert(); update tests.
This commit is contained in:
Han-Wen Nienhuys 2012-03-30 00:11:30 -03:00
parent f530917463
commit 21a366e049
3 changed files with 25 additions and 28 deletions

@ -1703,21 +1703,27 @@ TreeBuilder_dealloc(TreeBuilder* self)
}
static PyObject *
TreeBuilder_insert(TreeBuilder *self, TreeEntry *py_tentry)
TreeBuilder_insert(TreeBuilder *self, PyObject *args)
{
int err, attr;
const git_oid *oid;
PyObject *py_oid;
int len, err, attr;
git_oid oid;
const char *fname;
const git_tree_entry *tentry;
tentry = py_tentry->entry;
fname = git_tree_entry_name(tentry);
oid = git_tree_entry_id(tentry);
attr = git_tree_entry_attributes(tentry);
if (!PyArg_ParseTuple(args, "sOi", &fname, &py_oid, &attr)) {
return NULL;
}
err = git_treebuilder_insert(NULL, self->bld, fname, oid, attr);
if (err < 0)
return Error_set(err);
len = py_str_to_git_oid(py_oid, &oid);
if (len < 0) {
return NULL;
}
err = git_treebuilder_insert(NULL, self->bld, fname, &oid, attr);
if (err < 0) {
Error_set(err);
return NULL;
}
Py_RETURN_NONE;
}
@ -1760,7 +1766,7 @@ TreeBuilder_clear(TreeBuilder *self)
}
static PyMethodDef TreeBuilder_methods[] = {
{"insert", (PyCFunction)TreeBuilder_insert, METH_O,
{"insert", (PyCFunction)TreeBuilder_insert, METH_VARARGS,
"Insert or replace an entry in the treebuilder"},
{"write", (PyCFunction)TreeBuilder_write, METH_NOARGS,
"Write the tree to the given repository"},

@ -1,4 +1,4 @@
# -*- coding: UTF-8 -*-
# -*- coding: utf-8 -*-
#
# Copyright 2010 Google, Inc.
#
@ -83,24 +83,15 @@ class TreeTest(utils.BareRepoTestCase):
# TODO This test worked with libgit2 v0.10.0, update to use the
# tree-builder
def xtest_new_tree(self):
tree = pygit2.Tree(self.repo)
self.assertEqual(0, len(tree))
tree.add_entry('1' * 40, 'x', 0o0100644)
tree.add_entry('2' * 40, 'y', 0o0100755)
self.assertEqual(2, len(tree))
b = self.repo.TreeBuilder()
b.insert('1' * 40, 'x', 0o0100644)
b.insert('2' * 40, 'y', 0o0100755)
tree = self.repo[b.write()]
self.assertTrue('x' in tree)
self.assertTrue('y' in tree)
self.assertRaisesWithArg(KeyError, '1' * 40, tree['x'].to_object)
tree.add_entry('3' * 40, 'z1', 0o0100644)
tree.add_entry('4' * 40, 'z2', 0o0100644)
self.assertEqual(4, len(tree))
del tree['z1']
del tree[2]
self.assertEqual(2, len(tree))
self.assertEqual(None, tree.hex)
tree.write()
contents = '100644 x\0%s100755 y\0%s' % ('\x11' * 20, '\x22' * 20)
self.assertEqual((pygit2.GIT_OBJ_TREE, contents),
self.repo.read(tree.hex))

@ -60,7 +60,7 @@ class TreeBuilderTest(utils.BareRepoTestCase):
tree = self.repo[TREE_SHA]
bld = self.repo.TreeBuilder()
for e in tree:
bld.insert(e)
bld.insert(e.name, e.hex, e.attributes)
result = bld.write()
self.assertEqual(tree.oid, result)