Merge remote-tracking branch 'xtao/merge-base'
This commit is contained in:
@@ -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
|
||||
|
@@ -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),
|
||||
|
@@ -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):
|
||||
|
||||
|
Reference in New Issue
Block a user