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 *
|
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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user