Implement Repository.create_branch.
This commit is contained in:
@@ -45,6 +45,7 @@ extern PyTypeObject IndexType;
|
|||||||
extern PyTypeObject WalkerType;
|
extern PyTypeObject WalkerType;
|
||||||
extern PyTypeObject SignatureType;
|
extern PyTypeObject SignatureType;
|
||||||
extern PyTypeObject ObjectType;
|
extern PyTypeObject ObjectType;
|
||||||
|
extern PyTypeObject CommitType;
|
||||||
extern PyTypeObject TreeType;
|
extern PyTypeObject TreeType;
|
||||||
extern PyTypeObject TreeBuilderType;
|
extern PyTypeObject TreeBuilderType;
|
||||||
extern PyTypeObject ConfigType;
|
extern PyTypeObject ConfigType;
|
||||||
@@ -842,6 +843,39 @@ Repository_create_tag(Repository *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PyDoc_STRVAR(Repository_create_branch__doc__,
|
||||||
|
"create_branch(name, commit, force=False) -> bytes\n"
|
||||||
|
"\n"
|
||||||
|
"Create a new branch \"name\" which points to a commit.\n"
|
||||||
|
"\n"
|
||||||
|
"Arguments:\n"
|
||||||
|
"\n"
|
||||||
|
"force\n"
|
||||||
|
" If True branches will be overridden, otherwise (the default) an\n"
|
||||||
|
" exception is raised.\n"
|
||||||
|
"\n"
|
||||||
|
"Examples::\n"
|
||||||
|
"\n"
|
||||||
|
" repo.create_branch('foo', repo.head.hex, force=False)");
|
||||||
|
|
||||||
|
PyObject* Repository_create_branch(Repository *self, PyObject *args)
|
||||||
|
{
|
||||||
|
Commit *py_commit;
|
||||||
|
git_reference *c_reference;
|
||||||
|
char *c_name;
|
||||||
|
int err, force = 0;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "sO!|i", &c_name, &CommitType, &py_commit, &force))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
err = git_branch_create(&c_reference, self->repo, c_name, py_commit->commit, force);
|
||||||
|
if (err < 0)
|
||||||
|
return Error_set(err);
|
||||||
|
|
||||||
|
return wrap_branch(c_reference, self);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PyDoc_STRVAR(Repository_listall_references__doc__,
|
PyDoc_STRVAR(Repository_listall_references__doc__,
|
||||||
"listall_references([flags]) -> (str, ...)\n"
|
"listall_references([flags]) -> (str, ...)\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -1422,6 +1456,7 @@ PyMethodDef Repository_methods[] = {
|
|||||||
METHOD(Repository, git_object_lookup_prefix, METH_O),
|
METHOD(Repository, git_object_lookup_prefix, METH_O),
|
||||||
METHOD(Repository, lookup_branch, METH_VARARGS),
|
METHOD(Repository, lookup_branch, METH_VARARGS),
|
||||||
METHOD(Repository, listall_branches, METH_VARARGS),
|
METHOD(Repository, listall_branches, METH_VARARGS),
|
||||||
|
METHOD(Repository, create_branch, METH_VARARGS),
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -54,6 +54,7 @@ PyObject* Repository_create_blob(Repository *self, PyObject *args);
|
|||||||
PyObject* Repository_create_blob_fromfile(Repository *self, PyObject *args);
|
PyObject* Repository_create_blob_fromfile(Repository *self, PyObject *args);
|
||||||
PyObject* Repository_create_commit(Repository *self, PyObject *args);
|
PyObject* Repository_create_commit(Repository *self, PyObject *args);
|
||||||
PyObject* Repository_create_tag(Repository *self, PyObject *args);
|
PyObject* Repository_create_tag(Repository *self, PyObject *args);
|
||||||
|
PyObject* Repository_create_branch(Repository *self, PyObject *args);
|
||||||
PyObject* Repository_listall_references(Repository *self, PyObject *args);
|
PyObject* Repository_listall_references(Repository *self, PyObject *args);
|
||||||
PyObject* Repository_listall_branches(Repository *self, PyObject *args);
|
PyObject* Repository_listall_branches(Repository *self, PyObject *args);
|
||||||
PyObject* Repository_lookup_reference(Repository *self, PyObject *py_name);
|
PyObject* Repository_lookup_reference(Repository *self, PyObject *py_name);
|
||||||
|
@@ -52,6 +52,21 @@ class BranchesTestCase(utils.RepoTestCase):
|
|||||||
branches = sorted(self.repo.listall_branches())
|
branches = sorted(self.repo.listall_branches())
|
||||||
self.assertEqual(branches, ['i18n', 'master'])
|
self.assertEqual(branches, ['i18n', 'master'])
|
||||||
|
|
||||||
|
def test_create_branch(self):
|
||||||
|
commit = self.repo[LAST_COMMIT]
|
||||||
|
reference = self.repo.create_branch('version1', commit)
|
||||||
|
refs = self.repo.listall_branches()
|
||||||
|
self.assertTrue('version1' in refs)
|
||||||
|
reference = self.repo.lookup_branch('version1')
|
||||||
|
self.assertEqual(reference.target.hex, LAST_COMMIT)
|
||||||
|
|
||||||
|
# try to create existing reference
|
||||||
|
self.assertRaises(ValueError,
|
||||||
|
lambda: self.repo.create_branch('version1', commit))
|
||||||
|
|
||||||
|
# try to create existing reference with force
|
||||||
|
reference = self.repo.create_branch('version1', commit, True)
|
||||||
|
self.assertEqual(reference.target.hex, LAST_COMMIT)
|
||||||
|
|
||||||
|
|
||||||
class BranchesEmptyRepoTestCase(utils.EmptyRepoTestCase):
|
class BranchesEmptyRepoTestCase(utils.EmptyRepoTestCase):
|
||||||
|
Reference in New Issue
Block a user