Change signature of TreeBuilder.insert to take (name, oid, attribute).
This is analogous to git_treebuilder_insert(); update tests.
This commit is contained in:
parent
f530917463
commit
21a366e049
30
pygit2.c
30
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"},
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user