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

@ -1,4 +1,4 @@
# -*- coding: UTF-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright 2010 Google, Inc. # 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 # TODO This test worked with libgit2 v0.10.0, update to use the
# tree-builder # tree-builder
def xtest_new_tree(self): def xtest_new_tree(self):
tree = pygit2.Tree(self.repo) b = self.repo.TreeBuilder()
self.assertEqual(0, len(tree)) b.insert('1' * 40, 'x', 0o0100644)
tree.add_entry('1' * 40, 'x', 0o0100644) b.insert('2' * 40, 'y', 0o0100755)
tree.add_entry('2' * 40, 'y', 0o0100755) tree = self.repo[b.write()]
self.assertEqual(2, len(tree))
self.assertTrue('x' in tree) self.assertTrue('x' in tree)
self.assertTrue('y' in tree) self.assertTrue('y' in tree)
self.assertRaisesWithArg(KeyError, '1' * 40, tree['x'].to_object) 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) contents = '100644 x\0%s100755 y\0%s' % ('\x11' * 20, '\x22' * 20)
self.assertEqual((pygit2.GIT_OBJ_TREE, contents), self.assertEqual((pygit2.GIT_OBJ_TREE, contents),
self.repo.read(tree.hex)) self.repo.read(tree.hex))

@ -60,7 +60,7 @@ class TreeBuilderTest(utils.BareRepoTestCase):
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) bld.insert(e.name, e.hex, e.attributes)
result = bld.write() result = bld.write()
self.assertEqual(tree.oid, result) self.assertEqual(tree.oid, result)