From 79f1e54153af174059ccfcd4d12c20504c2bdca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Rodri=CC=81guez=20Troitin=CC=83o?= Date: Fri, 17 May 2013 22:41:36 +0200 Subject: [PATCH] Implement Branch.delete. --- src/branch.c | 30 ++++++++++++++++++++++++++++++ src/branch.h | 4 ++++ test/test_branch.py | 11 +++++++++++ 3 files changed, 45 insertions(+) diff --git a/src/branch.c b/src/branch.c index 20e4085..fe5516e 100644 --- a/src/branch.c +++ b/src/branch.c @@ -26,9 +26,39 @@ */ #include "types.h" +#include "branch.h" +#include "error.h" #include "reference.h" +#include "utils.h" + +extern PyObject *GitError; + +PyDoc_STRVAR(Branch_delete__doc__, + "delete()\n" + "\n" + "Delete this branch. It will no longer be valid!"); + +PyObject * +Branch_delete(Branch *self, PyObject *args) +{ + int err; + + CHECK_REFERENCE(self); + + /* Delete the branch */ + err = git_branch_delete(self->reference); + if (err < 0) + return Error_set(err); + + git_reference_free(self->reference); + self->reference = NULL; /* Invalidate the pointer */ + + Py_RETURN_NONE; +} + PyMethodDef Branch_methods[] = { + METHOD(Branch, delete, METH_NOARGS), {NULL} }; diff --git a/src/branch.h b/src/branch.h index ecec876..ab7b0ea 100644 --- a/src/branch.h +++ b/src/branch.h @@ -28,8 +28,12 @@ #ifndef INCLUDE_pygit2_branch_h #define INCLUDE_pygit2_branch_h +#define PY_SSIZE_T_CLEAN +#include #include +PyObject* Branch_delete(Branch *self, PyObject *args); + PyObject* wrap_branch(git_reference *c_reference, Repository *repo); #endif diff --git a/test/test_branch.py b/test/test_branch.py index 4cc21ca..80828b6 100644 --- a/test/test_branch.py +++ b/test/test_branch.py @@ -68,6 +68,17 @@ class BranchesTestCase(utils.RepoTestCase): reference = self.repo.create_branch('version1', commit, True) self.assertEqual(reference.target.hex, LAST_COMMIT) + def test_delete(self): + branch = self.repo.lookup_branch('i18n') + branch.delete() + + self.assertTrue(self.repo.lookup_branch('i18n') is None) + + def test_cant_delete_master(self): + branch = self.repo.lookup_branch('master') + + self.assertRaises(pygit2.GitError, lambda: branch.delete()) + class BranchesEmptyRepoTestCase(utils.EmptyRepoTestCase): def setUp(self):