diff --git a/src/remote.c b/src/remote.c index a1a5eac..4d32de1 100644 --- a/src/remote.c +++ b/src/remote.c @@ -278,6 +278,42 @@ Remote_url__set__(Remote *self, PyObject* py_url) return -1; } +PyDoc_STRVAR(Remote_push_url__doc__, "Push url of the remote"); + + +PyObject * +Remote_push_url__get__(Remote *self) +{ + const char *url; + + url = git_remote_pushurl(self->remote); + if (!url) + Py_RETURN_NONE; + + return to_unicode(url, NULL, NULL); +} + + +int +Remote_push_url__set__(Remote *self, PyObject* py_url) +{ + int err; + char* url = NULL; + + url = py_str_to_c_str(py_url, NULL); + if (url != NULL) { + err = git_remote_set_pushurl(self->remote, url); + free(url); + + if (err == GIT_OK) + return 0; + + Error_set(err); + } + + return -1; +} + PyDoc_STRVAR(Remote_refspec_count__doc__, "Number of refspecs."); @@ -452,6 +488,7 @@ PyMethodDef Remote_methods[] = { PyGetSetDef Remote_getseters[] = { GETSET(Remote, name), GETSET(Remote, url), + GETSET(Remote, push_url), GETTER(Remote, refspec_count), {NULL} }; diff --git a/test/test_remote.py b/test/test_remote.py index 741cd50..85478c8 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -50,6 +50,7 @@ class RepositoryTest(utils.RepoTestCase): self.assertEqual(type(remote), pygit2.Remote) self.assertEqual(name, remote.name) self.assertEqual(url, remote.url) + self.assertEqual(None, remote.push_url) self.assertRaises(ValueError, self.repo.create_remote, *(name, url)) @@ -74,6 +75,10 @@ class RepositoryTest(utils.RepoTestCase): self.assertRaisesAssign(ValueError, remote, 'url', '') + remote.push_url = new_url + self.assertEqual(new_url, remote.push_url) + self.assertRaisesAssign(ValueError, remote, 'push_url', '') + def test_refspec(self): remote = self.repo.remotes[0]