diff --git a/include/pygit2/utils.h b/include/pygit2/utils.h index e3e68d8..903966a 100644 --- a/include/pygit2/utils.h +++ b/include/pygit2/utils.h @@ -96,7 +96,10 @@ char * py_str_to_c_str(PyObject *value, const char *encoding); py_str_to_c_str(py_path, Py_FileSystemDefaultEncoding) -/* Helpers to make shorter PyGetSetDef blocks */ +/* Helpers to make shorter PyMethodDef and PyGetSetDef blocks */ +#define METHOD(type, name, args)\ + {#name, (PyCFunction) type ## _ ## name, args, type ## _ ## name ## __doc__} + #define GETTER(type, attr)\ {#attr, (getter) type ## _ ## attr ## __get__, NULL,\ type ## _ ## attr ## __doc__, NULL} diff --git a/src/pygit2/index.c b/src/pygit2/index.c index 9f39038..afb79f9 100644 --- a/src/pygit2/index.c +++ b/src/pygit2/index.c @@ -46,8 +46,7 @@ Index_init(Index *self, PyObject *args, PyObject *kwds) int err; if (kwds) { - PyErr_SetString(PyExc_TypeError, - "Index takes no keyword arguments"); + PyErr_SetString(PyExc_TypeError, "Index takes no keyword arguments"); return -1; } @@ -79,6 +78,7 @@ Index_traverse(Index *self, visitproc visit, void *arg) return 0; } + PyDoc_STRVAR(Index_add__doc__, "add(path)\n\n" "Add or update an index entry from a file in disk."); @@ -99,6 +99,7 @@ Index_add(Index *self, PyObject *args) Py_RETURN_NONE; } + PyDoc_STRVAR(Index_clear__doc__, "clear()\n\n" "Clear the contents (all the entries) of an index object."); @@ -160,13 +161,14 @@ Index_diff(Index *self, PyObject *args) return (PyObject*)py_diff; } -PyDoc_STRVAR(Index_find__doc__, + +PyDoc_STRVAR(Index__find__doc__, "_find(path) -> integer\n\n" "Find the first index of any entries which point to given path in the " "index file."); PyObject * -Index_find(Index *self, PyObject *py_path) +Index__find(Index *self, PyObject *py_path) { char *path; size_t idx; @@ -416,17 +418,15 @@ Index_write_tree(Index *self) } PyMethodDef Index_methods[] = { - {"add", (PyCFunction)Index_add, METH_VARARGS, Index_add__doc__}, - {"remove", (PyCFunction)Index_remove, METH_VARARGS, Index_remove__doc__}, - {"clear", (PyCFunction)Index_clear, METH_NOARGS, Index_clear__doc__}, - {"diff", (PyCFunction)Index_diff, METH_VARARGS, Index_diff__doc__}, - {"_find", (PyCFunction)Index_find, METH_O, Index_find__doc__}, - {"read", (PyCFunction)Index_read, METH_NOARGS, Index_read__doc__}, - {"write", (PyCFunction)Index_write, METH_NOARGS, Index_write__doc__}, - {"read_tree", (PyCFunction)Index_read_tree, METH_O, - Index_read_tree__doc__}, - {"write_tree", (PyCFunction)Index_write_tree, METH_NOARGS, - Index_write_tree__doc__}, + METHOD(Index, add, METH_VARARGS), + METHOD(Index, remove, METH_VARARGS), + METHOD(Index, clear, METH_NOARGS), + METHOD(Index, diff, METH_VARARGS), + METHOD(Index, _find, METH_O), + METHOD(Index, read, METH_NOARGS), + METHOD(Index, write, METH_NOARGS), + METHOD(Index, read_tree, METH_O), + METHOD(Index, write_tree, METH_NOARGS), {NULL} }; @@ -550,43 +550,47 @@ IndexEntry_dealloc(IndexEntry *self) PyObject_Del(self); } + PyDoc_STRVAR(IndexEntry_mode__doc__, "Mode."); PyObject * -IndexEntry_get_mode(IndexEntry *self) +IndexEntry_mode__get__(IndexEntry *self) { return PyInt_FromLong(self->entry->mode); } + PyDoc_STRVAR(IndexEntry_path__doc__, "Path."); PyObject * -IndexEntry_get_path(IndexEntry *self) +IndexEntry_path__get__(IndexEntry *self) { return to_path(self->entry->path); } + PyDoc_STRVAR(IndexEntry_oid__doc__, "Object id."); PyObject * -IndexEntry_get_oid(IndexEntry *self) +IndexEntry_oid__get__(IndexEntry *self) { return git_oid_to_python(self->entry->oid.id); } + PyDoc_STRVAR(IndexEntry_hex__doc__, "Hex id."); PyObject * -IndexEntry_get_hex(IndexEntry *self) +IndexEntry_hex__get__(IndexEntry *self) { return git_oid_to_py_str(&self->entry->oid); } PyGetSetDef IndexEntry_getseters[] = { - {"mode", (getter)IndexEntry_get_mode, NULL, IndexEntry_mode__doc__, NULL}, - {"path", (getter)IndexEntry_get_path, NULL, IndexEntry_path__doc__, NULL}, - {"oid", (getter)IndexEntry_get_oid, NULL, IndexEntry_oid__doc__, NULL}, - {"hex", (getter)IndexEntry_get_hex, NULL, IndexEntry_hex__doc__, NULL}, + GETTER(IndexEntry, mode), + GETTER(IndexEntry, path), + GETTER(IndexEntry, oid), + GETTER(IndexEntry, hex), {NULL}, }; diff --git a/src/pygit2/object.c b/src/pygit2/object.c index dcb559d..1b64be5 100644 --- a/src/pygit2/object.c +++ b/src/pygit2/object.c @@ -49,11 +49,11 @@ Object_dealloc(Object* self) } -PyDoc_STRVAR(Object_get_oid__doc__, +PyDoc_STRVAR(Object_oid__doc__, "The object id, a byte string 20 bytes long."); PyObject * -Object_get_oid(Object *self) +Object_oid__get__(Object *self) { const git_oid *oid; @@ -64,11 +64,11 @@ Object_get_oid(Object *self) } -PyDoc_STRVAR(Object_get_hex__doc__, +PyDoc_STRVAR(Object_hex__doc__, "Hexadecimal representation of the object id, a text string 40 chars long."); PyObject * -Object_get_hex(Object *self) +Object_hex__get__(Object *self) { const git_oid *oid; @@ -79,12 +79,12 @@ Object_get_hex(Object *self) } -PyDoc_STRVAR(Object_get_type__doc__, +PyDoc_STRVAR(Object_type__doc__, "One of the GIT_OBJ_COMMIT, GIT_OBJ_TREE, GIT_OBJ_BLOB or GIT_OBJ_TAG " "constants."); PyObject * -Object_get_type(Object *self) +Object_type__get__(Object *self) { return PyInt_FromLong(git_object_type(self->obj)); } @@ -116,15 +116,14 @@ Object_read_raw(Object *self) } PyGetSetDef Object_getseters[] = { - {"oid", (getter)Object_get_oid, NULL, Object_get_oid__doc__, NULL}, - {"hex", (getter)Object_get_hex, NULL, Object_get_hex__doc__, NULL}, - {"type", (getter)Object_get_type, NULL, Object_get_type__doc__, NULL}, + GETTER(Object, oid), + GETTER(Object, hex), + GETTER(Object, type), {NULL} }; PyMethodDef Object_methods[] = { - {"read_raw", (PyCFunction)Object_read_raw, METH_NOARGS, - Object_read_raw__doc__}, + METHOD(Object, read_raw, METH_NOARGS), {NULL} }; diff --git a/src/pygit2/repository.c b/src/pygit2/repository.c index 5db0d1b..79c704b 100644 --- a/src/pygit2/repository.c +++ b/src/pygit2/repository.c @@ -199,7 +199,7 @@ PyDoc_STRVAR(Repository_head__doc__, "Current head reference of the repository."); PyObject * -Repository_get_head(Repository *self) +Repository_head__get__(Repository *self) { git_reference *head; const git_oid *oid; @@ -228,7 +228,7 @@ PyDoc_STRVAR(Repository_head_is_detached__doc__, "instead of a branch."); PyObject * -Repository_head_is_detached(Repository *self) +Repository_head_is_detached__get__(Repository *self) { if (git_repository_head_detached(self->repo) > 0) Py_RETURN_TRUE; @@ -242,7 +242,7 @@ PyDoc_STRVAR(Repository_head_is_orphaned__doc__, "refs namespace, because it doesn't have any commit to point to."); PyObject * -Repository_head_is_orphaned(Repository *self) +Repository_head_is_orphaned__get__(Repository *self) { if (git_repository_head_orphan(self->repo) > 0) Py_RETURN_TRUE; @@ -255,7 +255,7 @@ PyDoc_STRVAR(Repository_is_empty__doc__, "Check if a repository is empty."); PyObject * -Repository_is_empty(Repository *self) +Repository_is_empty__get__(Repository *self) { if (git_repository_is_empty(self->repo) > 0) Py_RETURN_TRUE; @@ -268,7 +268,7 @@ PyDoc_STRVAR(Repository_is_bare__doc__, "Check if a repository is a bare repository."); PyObject * -Repository_is_bare(Repository *self) +Repository_is_bare__get__(Repository *self) { if (git_repository_is_bare(self->repo) > 0) Py_RETURN_TRUE; @@ -422,7 +422,7 @@ Repository_write(Repository *self, PyObject *args) PyDoc_STRVAR(Repository_index__doc__, "Index file."); PyObject * -Repository_get_index(Repository *self, void *closure) +Repository_index__get__(Repository *self, void *closure) { int err; git_index *index; @@ -457,7 +457,7 @@ PyDoc_STRVAR(Repository_path__doc__, "The normalized path to the git repository."); PyObject * -Repository_get_path(Repository *self, void *closure) +Repository_path__get__(Repository *self, void *closure) { return to_path(git_repository_path(self->repo)); } @@ -468,7 +468,7 @@ PyDoc_STRVAR(Repository_workdir__doc__, "If the repository is bare, None will be returned."); PyObject * -Repository_get_workdir(Repository *self, void *closure) +Repository_workdir__get__(Repository *self, void *closure) { const char *c_path; @@ -487,7 +487,7 @@ PyDoc_STRVAR(Repository_config__doc__, "(if they are available)."); PyObject * -Repository_get_config(Repository *self, void *closure) +Repository_config__get__(Repository *self, void *closure) { int err; git_config *config; @@ -998,54 +998,34 @@ Repository_TreeBuilder(Repository *self, PyObject *args) } PyMethodDef Repository_methods[] = { - {"create_commit", (PyCFunction)Repository_create_commit, METH_VARARGS, - Repository_create_commit__doc__}, - {"create_tag", (PyCFunction)Repository_create_tag, METH_VARARGS, - Repository_create_tag__doc__}, - {"walk", (PyCFunction)Repository_walk, METH_VARARGS, - Repository_walk__doc__}, - {"read", (PyCFunction)Repository_read, METH_O, Repository_read__doc__}, - {"write", (PyCFunction)Repository_write, METH_VARARGS, - Repository_write__doc__}, - {"listall_references", (PyCFunction)Repository_listall_references, - METH_VARARGS, Repository_listall_references__doc__}, - {"lookup_reference", (PyCFunction)Repository_lookup_reference, METH_O, - Repository_lookup_reference__doc__}, - {"revparse_single", (PyCFunction)Repository_revparse_single, METH_O, - Repository_revparse_single__doc__}, - {"create_blob", (PyCFunction)Repository_create_blob, METH_VARARGS, - Repository_create_blob__doc__}, - {"create_blob_fromfile", (PyCFunction)Repository_create_blob_fromfile, - METH_VARARGS, Repository_create_blob_fromfile__doc__}, - {"create_reference", (PyCFunction)Repository_create_reference, - METH_VARARGS|METH_KEYWORDS, Repository_create_reference__doc__}, - {"packall_references", (PyCFunction)Repository_packall_references, - METH_NOARGS, Repository_packall_references__doc__}, - {"status", (PyCFunction)Repository_status, METH_NOARGS, - Repository_status__doc__}, - {"status_file", (PyCFunction)Repository_status_file, METH_O, - Repository_status_file__doc__}, - {"TreeBuilder", (PyCFunction)Repository_TreeBuilder, METH_VARARGS, - Repository_TreeBuilder__doc__}, + METHOD(Repository, create_blob, METH_VARARGS), + METHOD(Repository, create_blob_fromfile, METH_VARARGS), + METHOD(Repository, create_commit, METH_VARARGS), + METHOD(Repository, create_tag, METH_VARARGS), + METHOD(Repository, TreeBuilder, METH_VARARGS), + METHOD(Repository, walk, METH_VARARGS), + METHOD(Repository, read, METH_O), + METHOD(Repository, write, METH_VARARGS), + METHOD(Repository, create_reference, METH_VARARGS|METH_KEYWORDS), + METHOD(Repository, listall_references, METH_VARARGS), + METHOD(Repository, lookup_reference, METH_O), + METHOD(Repository, packall_references, METH_NOARGS), + METHOD(Repository, revparse_single, METH_O), + METHOD(Repository, status, METH_NOARGS), + METHOD(Repository, status_file, METH_O), {NULL} }; PyGetSetDef Repository_getseters[] = { - {"index", (getter)Repository_get_index, NULL, Repository_index__doc__, - NULL}, - {"path", (getter)Repository_get_path, NULL, Repository_path__doc__, NULL}, - {"head", (getter)Repository_get_head, NULL, Repository_head__doc__, NULL}, - {"head_is_detached", (getter)Repository_head_is_detached, NULL, - Repository_head_is_detached__doc__}, - {"head_is_orphaned", (getter)Repository_head_is_orphaned, NULL, - Repository_head_is_orphaned__doc__}, - {"is_empty", (getter)Repository_is_empty, NULL, - Repository_is_empty__doc__}, - {"is_bare", (getter)Repository_is_bare, NULL, Repository_is_bare__doc__}, - {"config", (getter)Repository_get_config, NULL, Repository_config__doc__, - NULL}, - {"workdir", (getter)Repository_get_workdir, NULL, - Repository_workdir__doc__, NULL}, + GETTER(Repository, index), + GETTER(Repository, path), + GETTER(Repository, head), + GETTER(Repository, head_is_detached), + GETTER(Repository, head_is_orphaned), + GETTER(Repository, is_empty), + GETTER(Repository, is_bare), + GETTER(Repository, config), + GETTER(Repository, workdir), {NULL} };