From 21a366e049112bbfaac7714c43492d12ac82c80f Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys <hanwen@google.com> Date: Fri, 30 Mar 2012 00:11:30 -0300 Subject: [PATCH] Change signature of TreeBuilder.insert to take (name, oid, attribute). This is analogous to git_treebuilder_insert(); update tests. --- pygit2.c | 30 ++++++++++++++++++------------ test/test_tree.py | 21 ++++++--------------- test/test_treebuilder.py | 2 +- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/pygit2.c b/pygit2.c index d0b8877..046148e 100644 --- a/pygit2.c +++ b/pygit2.c @@ -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"}, diff --git a/test/test_tree.py b/test/test_tree.py index 6c1a916..c9f41cc 100644 --- a/test/test_tree.py +++ b/test/test_tree.py @@ -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)) diff --git a/test/test_treebuilder.py b/test/test_treebuilder.py index f9628b1..455f4f4 100644 --- a/test/test_treebuilder.py +++ b/test/test_treebuilder.py @@ -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)