diff --git a/docs/remotes.rst b/docs/remotes.rst index b8f9957bc..12a1755b2 100644 --- a/docs/remotes.rst +++ b/docs/remotes.rst @@ -13,11 +13,11 @@ The Remote type .. autoattribute:: pygit2.Remote.name .. autoattribute:: pygit2.Remote.url .. autoattribute:: pygit2.Remote.refspec_count -.. autoattribute:: pygit2.Remote.fetch_refspec -.. autoattribute:: pygit2.Remote.push_refspec +.. automethod:: pygit2.Remote.get_push_refspec +.. automethod:: pygit2.Remote.get_pull_refspec +.. automethod:: pygit2.Remote.set_push_refspec +.. automethod:: pygit2.Remote.set_pull_refspec .. automethod:: pygit2.Remote.get_refspec -.. automethod:: pygit2.Remote.set_fetch_refspecs -.. automethod:: pygit2.Remote.set_push_refspecs .. automethod:: pygit2.Remote.fetch .. automethod:: pygit2.Remote.push .. automethod:: pygit2.Remote.save diff --git a/src/remote.c b/src/remote.c index 19274b1c2..b3fb89ee3 100644 --- a/src/remote.c +++ b/src/remote.c @@ -102,6 +102,10 @@ PyObject * get_pylist_from_git_strarray(git_strarray *strarray) PyObject *new_list; new_list = PyList_New(strarray->count); + + if (new_list == NULL) + return Error_set(GITERR_NOMEMORY); + for (index = 0; index < strarray->count; (index)++ ) { PyList_SET_ITEM( new_list, @@ -112,11 +116,11 @@ PyObject * get_pylist_from_git_strarray(git_strarray *strarray) } -PyDoc_STRVAR(Remote_fetch_refspecs__doc__, "Fetch refspecs"); +PyDoc_STRVAR(Remote_get_fetch_refspecs__doc__, "Fetch refspecs"); PyObject * -Remote_fetch_refspecs__get__(Remote *self) +Remote_get_fetch_refspecs(Remote *self) { int err; git_strarray refspecs; @@ -124,7 +128,7 @@ Remote_fetch_refspecs__get__(Remote *self) err = git_remote_get_fetch_refspecs(&refspecs, self->remote); - if (err != 0) + if (err != GIT_OK) return Error_set(err); new_list = get_pylist_from_git_strarray(&refspecs); @@ -134,11 +138,11 @@ Remote_fetch_refspecs__get__(Remote *self) } -PyDoc_STRVAR(Remote_push_refspecs__doc__, "Push refspecs"); +PyDoc_STRVAR(Remote_get_push_refspecs__doc__, "Push refspecs"); PyObject * -Remote_push_refspecs__get__(Remote *self) +Remote_get_push_refspecs(Remote *self) { int err; git_strarray refspecs; @@ -146,10 +150,11 @@ Remote_push_refspecs__get__(Remote *self) err = git_remote_get_push_refspecs(&refspecs, self->remote); - if (err != 0) + if (err != GIT_OK) return Error_set(err); new_list = get_pylist_from_git_strarray(&refspecs); + git_strarray_free(&refspecs); return new_list; } @@ -163,13 +168,13 @@ get_strarraygit_from_pylist(git_strarray *array, PyObject *pylist) n = PyObject_Length(pylist); if (n < 0) - return -1; + goto error; /* allocate new git_strarray */ void *ptr = calloc(n, sizeof(char *)); if (!ptr) - return -1; + goto error; array->strings = ptr; array->count = n; @@ -178,7 +183,12 @@ get_strarraygit_from_pylist(git_strarray *array, PyObject *pylist) item = PyList_GetItem(pylist, index); array->strings[index] = py_str_to_c_str(item, NULL); } - return 0; + + return GIT_OK; + +error: + Error_set(GITERR_NOMEMORY); + return -1; } @@ -195,18 +205,19 @@ Remote_set_fetch_refspecs(Remote *self, PyObject *args) git_strarray fetch_refspecs; if (! PyArg_Parse(args, "O", &pyrefspecs)) - return NULL; + return Error_set(GITERR_INVALID); - if (get_strarraygit_from_pylist(&fetch_refspecs , pyrefspecs) != 0) + if (get_strarraygit_from_pylist(&fetch_refspecs , pyrefspecs) != GIT_OK) return NULL; err = git_remote_set_fetch_refspecs(self->remote, &fetch_refspecs); - if (err != 0) - return Error_set(err); - git_strarray_free(&fetch_refspecs); + if (err != GIT_OK) { + return Error_set(err); + } + Py_RETURN_NONE; } @@ -219,25 +230,23 @@ PyDoc_STRVAR(Remote_set_push_refspecs__doc__, PyObject * Remote_set_push_refspecs(Remote *self, PyObject *args) { - int err; PyObject *pyrefspecs; git_strarray push_refspecs; if (! PyArg_Parse(args, "O", &pyrefspecs)) - return NULL; + return Error_set(GITERR_INVALID); if (get_strarraygit_from_pylist(&push_refspecs, pyrefspecs) != 0) return NULL; err = git_remote_set_push_refspecs(self->remote, &push_refspecs); - if (err != 0) - return Error_set(err); - - git_strarray_free(&push_refspecs); + if (err != GIT_OK) + return Error_set(err); + Py_RETURN_NONE; } @@ -436,7 +445,9 @@ PyMethodDef Remote_methods[] = { METHOD(Remote, save, METH_NOARGS), METHOD(Remote, get_refspec, METH_O), METHOD(Remote, push, METH_VARARGS), + METHOD(Remote, get_fetch_refspecs, METH_NOARGS), METHOD(Remote, set_fetch_refspecs, METH_O), + METHOD(Remote, get_push_refspecs, METH_NOARGS), METHOD(Remote, set_push_refspecs, METH_O), {NULL} }; @@ -445,8 +456,6 @@ PyGetSetDef Remote_getseters[] = { GETSET(Remote, name), GETSET(Remote, url), GETTER(Remote, refspec_count), - GETTER(Remote, fetch_refspecs), - GETTER(Remote, push_refspecs), {NULL} }; diff --git a/test/test_remote.py b/test/test_remote.py index 85a95e1ee..741cd504d 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -83,26 +83,26 @@ def test_refspec(self): self.assertEqual(refspec[0], REMOTE_FETCHSPEC_SRC) self.assertEqual(refspec[1], REMOTE_FETCHSPEC_DST) - self.assertEqual(list, type(remote.fetch_refspecs)) - self.assertEqual(1, len(remote.fetch_refspecs)) + self.assertEqual(list, type(remote.get_fetch_refspecs())) + self.assertEqual(1, len(remote.get_fetch_refspecs())) self.assertEqual('+refs/heads/*:refs/remotes/origin/*', - remote.fetch_refspecs[0]) + remote.get_fetch_refspecs()[0]) - self.assertEqual(list, type(remote.fetch_refspecs)) - self.assertEqual(0, len(remote.push_refspecs)) + self.assertEqual(list, type(remote.get_push_refspecs())) + self.assertEqual(0, len(remote.get_push_refspecs())) remote.set_fetch_refspecs(['+refs/*:refs/remotes/*']) self.assertEqual('+refs/*:refs/remotes/*', - remote.fetch_refspecs[0]) + remote.get_fetch_refspecs()[0]) remote.set_fetch_refspecs([ '+refs/*:refs/remotes/*', '+refs/test/*:refs/test/remotes/*' ]) self.assertEqual('+refs/*:refs/remotes/*', - remote.fetch_refspecs[0]) + remote.get_fetch_refspecs()[0]) self.assertEqual('+refs/test/*:refs/test/remotes/*', - remote.fetch_refspecs[1]) + remote.get_fetch_refspecs()[1]) remote.set_push_refspecs([ '+refs/*:refs/remotes/*', @@ -110,9 +110,9 @@ def test_refspec(self): ]) self.assertEqual('+refs/*:refs/remotes/*', - remote.push_refspecs[0]) + remote.get_push_refspecs()[0]) self.assertEqual('+refs/test/*:refs/test/remotes/*', - remote.push_refspecs[1]) + remote.get_push_refspecs()[1]) def test_remote_list(self):