Implement Repository.create_branch.

This commit is contained in:
Daniel Rodríguez Troitiño
2013-05-17 22:33:17 +02:00
parent 7b5adf1da2
commit 3b4c8fe4bd
3 changed files with 51 additions and 0 deletions

View File

@@ -45,6 +45,7 @@ extern PyTypeObject IndexType;
extern PyTypeObject WalkerType;
extern PyTypeObject SignatureType;
extern PyTypeObject ObjectType;
extern PyTypeObject CommitType;
extern PyTypeObject TreeType;
extern PyTypeObject TreeBuilderType;
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__,
"listall_references([flags]) -> (str, ...)\n"
"\n"
@@ -1422,6 +1456,7 @@ PyMethodDef Repository_methods[] = {
METHOD(Repository, git_object_lookup_prefix, METH_O),
METHOD(Repository, lookup_branch, METH_VARARGS),
METHOD(Repository, listall_branches, METH_VARARGS),
METHOD(Repository, create_branch, METH_VARARGS),
{NULL}
};

View File

@@ -54,6 +54,7 @@ PyObject* Repository_create_blob(Repository *self, PyObject *args);
PyObject* Repository_create_blob_fromfile(Repository *self, PyObject *args);
PyObject* Repository_create_commit(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_branches(Repository *self, PyObject *args);
PyObject* Repository_lookup_reference(Repository *self, PyObject *py_name);

View File

@@ -52,6 +52,21 @@ class BranchesTestCase(utils.RepoTestCase):
branches = sorted(self.repo.listall_branches())
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):