Merge remote-tracking branch 'xtao/merge-base'

This commit is contained in:
J. David Ibáñez
2013-05-05 00:40:21 +02:00
3 changed files with 38 additions and 0 deletions

View File

@@ -41,3 +41,4 @@ To open an existing repository::
.. autoattribute:: pygit2.Repository.is_empty
.. automethod:: pygit2.Repository.read
.. automethod:: pygit2.Repository.write
.. automethod:: pygit2.Repository.merge_base

View File

@@ -497,6 +497,38 @@ Repository_config__get__(Repository *self)
return self->config;
}
PyDoc_STRVAR(Repository_merge_base__doc__,
"merge_base(oid, oid) -> commit\n"
"\n"
"Find as good common ancestors as possible for a merge.");
PyObject *
Repository_merge_base(Repository *self, PyObject *args)
{
PyObject *value1;
PyObject *value2;
git_oid oid;
git_oid oid1;
git_oid oid2;
int err;
if (!PyArg_ParseTuple(args, "OO", &value1, &value2))
return NULL;
err = py_str_to_git_oid_expand(self->repo, value1, &oid1);
if (err < 0)
return NULL;
err = py_str_to_git_oid_expand(self->repo, value2, &oid2);
if (err < 0)
return NULL;
err = git_merge_base(&oid, self->repo, &oid1, &oid2);
if (err < 0)
return Error_set(err);
return git_oid_to_python(&oid);
}
PyDoc_STRVAR(Repository_walk__doc__,
"walk(oid, sort_mode) -> iterator\n"
@@ -1212,6 +1244,7 @@ PyMethodDef Repository_methods[] = {
METHOD(Repository, create_tag, METH_VARARGS),
METHOD(Repository, TreeBuilder, METH_VARARGS),
METHOD(Repository, walk, METH_VARARGS),
METHOD(Repository, merge_base, METH_VARARGS),
METHOD(Repository, read, METH_O),
METHOD(Repository, write, METH_VARARGS),
METHOD(Repository, create_reference_direct, METH_VARARGS),

View File

@@ -231,6 +231,10 @@ class RepositoryTest_II(utils.RepoTestCase):
self.repo.checkout(pygit2.GIT_CHECKOUT_FORCE, head=True)
self.assertTrue('bye.txt' not in self.repo.status())
def test_merge_base(self):
commit = self.repo.merge_base('5ebeeebb320790caf276b9fc8b24546d63316533', '4ec4389a8068641da2d6578db0419484972284c8')
self.assertEqual(commit.hex, 'acecd5ea2924a4b900e7e149496e1f4b57976e51')
class NewRepositoryTest(utils.NoRepoTestCase):