Finish deploying PyDoc_STRVAR

This commit is contained in:
J. David Ibáñez
2013-02-04 19:01:14 +01:00
parent 5343d28ca5
commit 7d3ba87cea
11 changed files with 398 additions and 234 deletions

View File

@@ -116,7 +116,7 @@ typedef struct {
PyObject *oid_old; PyObject *oid_old;
PyObject *oid_new; PyObject *oid_new;
PyObject *committer; PyObject *committer;
char *msg; char *message;
} RefLogEntry; } RefLogEntry;
typedef struct { typedef struct {

View File

@@ -101,8 +101,21 @@ char * py_str_to_c_str(PyObject *value, const char *encoding);
{#name, (PyCFunction) type ## _ ## name, args, type ## _ ## name ## __doc__} {#name, (PyCFunction) type ## _ ## name, args, type ## _ ## name ## __doc__}
#define GETTER(type, attr)\ #define GETTER(type, attr)\
{#attr, (getter) type ## _ ## attr ## __get__, NULL,\ { #attr,\
type ## _ ## attr ## __doc__, NULL} (getter) type ## _ ## attr ## __get__,\
NULL,\
type ## _ ## attr ## __doc__,\
NULL}
#define GETSET(type, attr)\
{ #attr,\
(getter) type ## _ ## attr ## __get__,\
(setter) type ## _ ## attr ## __set__,\
type ## _ ## attr ## __doc__,\
NULL}
#define MEMBER(type, attr, attr_type, docstr)\
{#attr, attr_type, offsetof(type, attr), 0, PyDoc_STR(docstr)}
#endif #endif

View File

@@ -31,19 +31,28 @@
#include <pygit2/object.h> #include <pygit2/object.h>
#include <pygit2/blob.h> #include <pygit2/blob.h>
PyDoc_STRVAR(Blob_size__doc__, "Size.");
PyObject * PyObject *
Blob_get_size(Blob *self) Blob_size__get__(Blob *self)
{ {
return PyInt_FromLong(git_blob_rawsize(self->blob)); return PyInt_FromLong(git_blob_rawsize(self->blob));
} }
PyDoc_STRVAR(Blob_data__doc__,
"Raw data. This is the same as Blob.read_raw()");
PyGetSetDef Blob_getseters[] = { PyGetSetDef Blob_getseters[] = {
{"data", (getter)Object_read_raw, NULL, "raw data", NULL}, GETTER(Blob, size),
{"size", (getter)Blob_get_size, NULL, "size", NULL}, {"data", (getter)Object_read_raw, NULL, Blob_data__doc__, NULL},
{NULL} {NULL}
}; };
PyDoc_STRVAR(Blob__doc__, "Blob objects.");
PyTypeObject BlobType = { PyTypeObject BlobType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.Blob", /* tp_name */ "_pygit2.Blob", /* tp_name */
@@ -65,7 +74,7 @@ PyTypeObject BlobType = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
"Blob objects", /* tp_doc */ Blob__doc__, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
@@ -84,4 +93,3 @@ PyTypeObject BlobType = {
0, /* tp_alloc */ 0, /* tp_alloc */
0, /* tp_new */ 0, /* tp_new */
}; };

View File

@@ -98,6 +98,11 @@ Config_open(char *c_path) {
return (PyObject *)config; return (PyObject *)config;
} }
PyDoc_STRVAR(Config_get_global_config__doc__,
"get_global_config() -> Config\n\n"
"Return an object representing the global configuration file.");
PyObject * PyObject *
Config_get_global_config(void) Config_get_global_config(void)
{ {
@@ -116,6 +121,11 @@ Config_get_global_config(void)
return Config_open(path); return Config_open(path);
} }
PyDoc_STRVAR(Config_get_system_config__doc__,
"get_system_config() -> Config\n\n"
"Return an object representing the system configuration file.");
PyObject * PyObject *
Config_get_system_config(void) Config_get_system_config(void)
{ {
@@ -254,6 +264,15 @@ Config_foreach_callback_wrapper(const git_config_entry *entry, void *c_payload)
return c_result; return c_result;
} }
PyDoc_STRVAR(Config_foreach__doc__,
"foreach(callback[, payload]) -> int\n\n"
"Perform an operation on each config variable.\n\n"
"The callback must be of type Callable and receives the normalized name "
"and value of each variable in the config backend, and an optional payload "
"passed to this method. As soon as one of the callbacks returns an integer "
"other than 0, this function returns that value.");
PyObject * PyObject *
Config_foreach(Config *self, PyObject *args) Config_foreach(Config *self, PyObject *args)
{ {
@@ -261,13 +280,12 @@ Config_foreach(Config *self, PyObject *args)
PyObject *py_callback; PyObject *py_callback;
PyObject *py_payload; PyObject *py_payload;
if (!PyArg_ParseTuple(args, "O|O", &py_callback, &py_payload)) if (!PyArg_ParseTuple(args, "O|O", &py_callback, &py_payload))
return NULL; return NULL;
if (!PyCallable_Check(py_callback)) { if (!PyCallable_Check(py_callback)) {
PyErr_SetString(PyExc_TypeError,"Argument 'callback' is not callable"); PyErr_SetString(PyExc_TypeError,
"Argument 'callback' is not callable");
return NULL; return NULL;
} }
@@ -277,6 +295,11 @@ Config_foreach(Config *self, PyObject *args)
return PyInt_FromLong((long)ret); return PyInt_FromLong((long)ret);
} }
PyDoc_STRVAR(Config_add_file__doc__,
"add_file(path, level=0, force=0)\n\n"
"Add a config file instance to an existing config.");
PyObject * PyObject *
Config_add_file(Config *self, PyObject *args, PyObject *kwds) Config_add_file(Config *self, PyObject *args, PyObject *kwds)
{ {
@@ -286,8 +309,7 @@ Config_add_file(Config *self, PyObject *args, PyObject *kwds)
unsigned int level = 0; unsigned int level = 0;
int force = 0; int force = 0;
if (!PyArg_ParseTupleAndKeywords( if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|Ii", keywords,
args, kwds, "s|Ii", keywords,
&path, &level, &force)) &path, &level, &force))
return NULL; return NULL;
@@ -300,6 +322,13 @@ Config_add_file(Config *self, PyObject *args, PyObject *kwds)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
PyDoc_STRVAR(Config_get_multivar__doc__,
"get_multivar(name[, regex]) -> [str, ...]\n\n"
"Get each value of a multivar ''name'' as a list. The optional ''regex'' "
"parameter is expected to be a regular expression to filter the variables "
" we're interested in.");
int int
Config_get_multivar_fn_wrapper(const git_config_entry *value, void *data) Config_get_multivar_fn_wrapper(const git_config_entry *value, void *data)
{ {
@@ -325,8 +354,10 @@ Config_get_multivar(Config *self, PyObject *args)
if (!PyArg_ParseTuple(args, "s|s", &name, &regex)) if (!PyArg_ParseTuple(args, "s|s", &name, &regex))
return NULL; return NULL;
if ((err = git_config_get_multivar(self->config, name, regex, err = git_config_get_multivar(self->config, name, regex,
Config_get_multivar_fn_wrapper, (void *)list)) < 0) { Config_get_multivar_fn_wrapper,
(void *)list);
if (err < 0) {
if (err == GIT_ENOTFOUND) if (err == GIT_ENOTFOUND)
Error_set(err); Error_set(err);
else else
@@ -337,6 +368,12 @@ Config_get_multivar(Config *self, PyObject *args)
return list; return list;
} }
PyDoc_STRVAR(Config_set_multivar__doc__,
"set_multivar(name, regex, value)\n\n"
"Set a multivar ''name'' to ''value''. ''regexp'' is a regular expression "
"to indicate which values to replace");
PyObject * PyObject *
Config_set_multivar(Config *self, PyObject *args) Config_set_multivar(Config *self, PyObject *args)
{ {
@@ -347,7 +384,9 @@ Config_set_multivar(Config *self, PyObject *args)
if (!PyArg_ParseTuple(args, "sss", &name, &regex, &value)) if (!PyArg_ParseTuple(args, "sss", &name, &regex, &value))
return NULL; return NULL;
if ((err = git_config_set_multivar(self->config, name, regex, value)) < 0) {
err = git_config_set_multivar(self->config, name, regex, value);
if (err < 0) {
if (err == GIT_ENOTFOUND) if (err == GIT_ENOTFOUND)
Error_set(err); Error_set(err);
else else
@@ -359,27 +398,12 @@ Config_set_multivar(Config *self, PyObject *args)
} }
PyMethodDef Config_methods[] = { PyMethodDef Config_methods[] = {
{"get_system_config", (PyCFunction)Config_get_system_config, METHOD(Config, get_system_config, METH_NOARGS | METH_STATIC),
METH_NOARGS | METH_STATIC, METHOD(Config, get_global_config, METH_NOARGS | METH_STATIC),
"Return an object representing the system configuration file."}, METHOD(Config, foreach, METH_VARARGS),
{"get_global_config", (PyCFunction)Config_get_global_config, METHOD(Config, add_file, METH_VARARGS | METH_KEYWORDS),
METH_NOARGS | METH_STATIC, METHOD(Config, get_multivar, METH_VARARGS),
"Return an object representing the global configuration file."}, METHOD(Config, set_multivar, METH_VARARGS),
{"foreach", (PyCFunction)Config_foreach, METH_VARARGS,
"Perform an operation on each config variable.\n\n"
"The callback must be of type Callable and receives the normalized name "
"and value of each variable in the config backend, and an optional "
"payload passed to this method. As soon as one of the callbacks returns "
"an integer other than 0, this function returns that value."},
{"add_file", (PyCFunction)Config_add_file, METH_VARARGS | METH_KEYWORDS,
"Add a config file instance to an existing config."},
{"get_multivar", (PyCFunction)Config_get_multivar, METH_VARARGS,
"Get each value of a multivar ''name'' as a list. The optional ''regex'' "
"parameter is expected to be a regular expression to filter the which "
"variables we're interested in."},
{"set_multivar", (PyCFunction)Config_set_multivar, METH_VARARGS,
"Set a multivar ''name'' to ''value''. ''regexp'' is a regular expression "
"to indicate which values to replace"},
{NULL} {NULL}
}; };
@@ -400,6 +424,9 @@ PyMappingMethods Config_as_mapping = {
(objobjargproc)Config_setitem, /* mp_ass_subscript */ (objobjargproc)Config_setitem, /* mp_ass_subscript */
}; };
PyDoc_STRVAR(Config__doc__, "Configuration management.");
PyTypeObject ConfigType = { PyTypeObject ConfigType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.Config", /* tp_name */ "_pygit2.Config", /* tp_name */
@@ -420,9 +447,8 @@ PyTypeObject ConfigType = {
0, /* tp_getattro */ 0, /* tp_getattro */
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
Py_TPFLAGS_HAVE_GC, /* tp_flags */ Config__doc__, /* tp_doc */
"Configuration management", /* tp_doc */
(traverseproc)Config_traverse, /* tp_traverse */ (traverseproc)Config_traverse, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */

View File

@@ -163,8 +163,8 @@ static int diff_hunk_cb(
return 0; return 0;
}; };
static int diff_file_cb(const git_diff_delta *delta, float progress, static int
void *cb_data) diff_file_cb(const git_diff_delta *delta, float progress, void *cb_data)
{ {
PyObject *files, *file; PyObject *files, *file;
@@ -193,8 +193,11 @@ void *cb_data)
return 0; return 0;
} }
PyDoc_STRVAR(Diff_changes__doc__, "Raw changes.");
PyObject * PyObject *
Diff_changes(Diff *self) Diff_changes__get__(Diff *self)
{ {
if (self->diff_changes == NULL) { if (self->diff_changes == NULL) {
@@ -226,8 +229,11 @@ static int diff_print_cb(
return 0; return 0;
} }
PyDoc_STRVAR(Diff_patch__doc__, "Patch.");
PyObject * PyObject *
Diff_patch(Diff *self) Diff_patch__get__(Diff *self)
{ {
PyObject *patch = PyBytes_FromString(""); PyObject *patch = PyBytes_FromString("");
@@ -280,21 +286,24 @@ Hunk_dealloc(Hunk *self)
} }
PyMemberDef Hunk_members[] = { PyMemberDef Hunk_members[] = {
{"header", T_STRING, offsetof(Hunk, header), 0, "header"}, MEMBER(Hunk, header, T_STRING, "Header."),
{"old_start", T_INT, offsetof(Hunk, old_start), 0, "old start"}, MEMBER(Hunk, old_start, T_INT, "Old start."),
{"old_lines", T_INT, offsetof(Hunk, old_lines), 0, "old lines"}, MEMBER(Hunk, old_lines, T_INT, "Old lines."),
{"old_mode", T_INT, offsetof(Hunk, old_mode), 0, "old mode"}, MEMBER(Hunk, old_mode, T_INT, "Old mode."),
{"old_file", T_STRING, offsetof(Hunk, old_file), 0, "old file"}, MEMBER(Hunk, old_file, T_STRING, "Old file."),
{"old_oid", T_OBJECT, offsetof(Hunk, old_oid), 0, "old_oid"}, MEMBER(Hunk, old_oid, T_OBJECT, "Old oid."),
{"new_start", T_INT, offsetof(Hunk, new_start), 0, "new start"}, MEMBER(Hunk, new_start, T_INT, "New start."),
{"new_lines", T_INT, offsetof(Hunk, new_lines), 0, "new lines"}, MEMBER(Hunk, new_lines, T_INT, "New lines."),
{"new_mode", T_INT, offsetof(Hunk, new_mode), 0, "new mode"}, MEMBER(Hunk, new_mode, T_INT, "New mode."),
{"new_file", T_STRING, offsetof(Hunk, new_file), 0, "old file"}, MEMBER(Hunk, new_file, T_STRING, "New file."),
{"new_oid", T_OBJECT, offsetof(Hunk, new_oid), 0, "new_oid"}, MEMBER(Hunk, new_oid, T_OBJECT, "New oid."),
{"data", T_OBJECT, offsetof(Hunk, data), 0, "data"}, MEMBER(Hunk, data, T_OBJECT, "Data."),
{NULL} {NULL}
}; };
PyDoc_STRVAR(Hunk__doc__, "Hunk object.");
PyTypeObject HunkType = { PyTypeObject HunkType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.Hunk", /* tp_name */ "_pygit2.Hunk", /* tp_name */
@@ -316,7 +325,7 @@ PyTypeObject HunkType = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
"Hunk object", /* tp_doc */ Hunk__doc__, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
@@ -336,6 +345,11 @@ PyTypeObject HunkType = {
0, /* tp_new */ 0, /* tp_new */
}; };
PyDoc_STRVAR(Diff_merge__doc__,
"merge(diff)\n\n"
"Merge one diff into another.");
PyObject * PyObject *
Diff_merge(Diff *self, PyObject *args) Diff_merge(Diff *self, PyObject *args)
{ {
@@ -356,6 +370,11 @@ Diff_merge(Diff *self, PyObject *args)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
PyDoc_STRVAR(Diff_find_similar__doc__,
"find_similar([flags])\n\n"
"Find renamed files in diff.");
PyObject * PyObject *
Diff_find_similar(Diff *self, PyObject *args) Diff_find_similar(Diff *self, PyObject *args)
{ {
@@ -384,19 +403,20 @@ Diff_dealloc(Diff *self)
} }
PyGetSetDef Diff_getseters[] = { PyGetSetDef Diff_getseters[] = {
{"changes", (getter)Diff_changes, NULL, "raw changes", NULL}, GETTER(Diff, changes),
{"patch", (getter)Diff_patch, NULL, "patch", NULL}, GETTER(Diff, patch),
{NULL} {NULL}
}; };
static PyMethodDef Diff_methods[] = { static PyMethodDef Diff_methods[] = {
{"merge", (PyCFunction)Diff_merge, METH_VARARGS, METHOD(Diff, merge, METH_VARARGS),
"Merge one diff into another."}, METHOD(Diff, find_similar, METH_VARARGS),
{"find_similar", (PyCFunction)Diff_find_similar, METH_VARARGS, {NULL}
"Find renamed files in diff."},
{NULL, NULL, 0, NULL}
}; };
PyDoc_STRVAR(Diff__doc__, "Diff objects.");
PyTypeObject DiffType = { PyTypeObject DiffType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.Diff", /* tp_name */ "_pygit2.Diff", /* tp_name */
@@ -418,7 +438,7 @@ PyTypeObject DiffType = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
"Diff objects", /* tp_doc */ Diff__doc__, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */

View File

@@ -513,6 +513,9 @@ IndexIter_iternext(IndexIter *self)
return wrap_index_entry(index_entry, self->owner); return wrap_index_entry(index_entry, self->owner);
} }
PyDoc_STRVAR(IndexIter__doc__, "Index iterator.");
PyTypeObject IndexIterType = { PyTypeObject IndexIterType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.IndexIter", /* tp_name */ "_pygit2.IndexIter", /* tp_name */
@@ -533,9 +536,8 @@ PyTypeObject IndexIterType = {
PyObject_GenericGetAttr, /* tp_getattro */ PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
Py_TPFLAGS_BASETYPE, /* tp_flags */ IndexIter__doc__, /* tp_doc */
0, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */

View File

@@ -51,17 +51,16 @@ void RefLogIter_dealloc(RefLogIter *self)
PyObject* RefLogIter_iternext(PyObject *self) PyObject* RefLogIter_iternext(PyObject *self)
{ {
RefLogIter *p = (RefLogIter *) self; RefLogIter *p = (RefLogIter *) self;
const git_reflog_entry *entry;
char oid_old[40], oid_new[40];
if (p->i < p->size) { if (p->i < p->size) {
char oid_old[40], oid_new[40];
RefLogEntry *py_entry; RefLogEntry *py_entry;
git_signature *signature; git_signature *signature;
const git_reflog_entry *entry = git_reflog_entry_byindex(p->reflog, p->i); entry = git_reflog_entry_byindex(p->reflog, p->i);
py_entry = (RefLogEntry*) PyType_GenericNew(&RefLogEntryType, NULL,
py_entry = (RefLogEntry*) PyType_GenericNew( NULL);
&RefLogEntryType, NULL, NULL
);
git_oid_fmt(oid_old, git_reflog_entry_id_old(entry)); git_oid_fmt(oid_old, git_reflog_entry_id_old(entry));
git_oid_fmt(oid_new, git_reflog_entry_id_new(entry)); git_oid_fmt(oid_new, git_reflog_entry_id_new(entry));
@@ -69,7 +68,7 @@ PyObject* RefLogIter_iternext(PyObject *self)
py_entry->oid_new = PyUnicode_FromStringAndSize(oid_new, 40); py_entry->oid_new = PyUnicode_FromStringAndSize(oid_new, 40);
py_entry->oid_old = PyUnicode_FromStringAndSize(oid_old, 40); py_entry->oid_old = PyUnicode_FromStringAndSize(oid_old, 40);
py_entry->msg = strdup(git_reflog_entry_message(entry)); py_entry->message = strdup(git_reflog_entry_message(entry));
signature = git_signature_dup( signature = git_signature_dup(
git_reflog_entry_committer(entry) git_reflog_entry_committer(entry)
@@ -90,6 +89,9 @@ PyObject* RefLogIter_iternext(PyObject *self)
return NULL; return NULL;
} }
PyDoc_STRVAR(RefLogIterType__doc__, "Internal reflog iterator object.");
PyTypeObject RefLogIterType = { PyTypeObject RefLogIterType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_libgit2.RefLogIter", /* tp_name */ "_libgit2.RefLogIter", /* tp_name */
@@ -110,17 +112,14 @@ PyTypeObject RefLogIterType = {
0, /* tp_getattro */ 0, /* tp_getattro */
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
Py_TPFLAGS_BASETYPE, /* tp_flags */ RefLogIterType__doc__, /* tp_doc */
/* tp_flags: Py_TPFLAGS_HAVE_ITER tells python to
use tp_iter and tp_iternext fields. */
"Internal reflog iterator object.", /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
0, /* tp_weaklistoffset */ 0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter: __iter__() method */ PyObject_SelfIter, /* tp_iter */
(iternextfunc) RefLogIter_iternext /* tp_iternext: next() method */ (iternextfunc)RefLogIter_iternext /* tp_iternext */
}; };
void void
@@ -130,6 +129,11 @@ Reference_dealloc(Reference *self)
PyObject_Del(self); PyObject_Del(self);
} }
PyDoc_STRVAR(Reference_delete__doc__,
"delete()\n\n"
"Delete this reference. It will no longer be valid!");
PyObject * PyObject *
Reference_delete(Reference *self, PyObject *args) Reference_delete(Reference *self, PyObject *args)
{ {
@@ -143,9 +147,14 @@ Reference_delete(Reference *self, PyObject *args)
return Error_set(err); return Error_set(err);
self->reference = NULL; /* Invalidate the pointer */ self->reference = NULL; /* Invalidate the pointer */
Py_RETURN_NONE; /* Return None */ Py_RETURN_NONE;
} }
PyDoc_STRVAR(Reference_rename__doc__,
"rename(new_name)\n\n"
"Rename the reference.");
PyObject * PyObject *
Reference_rename(Reference *self, PyObject *py_name) Reference_rename(Reference *self, PyObject *py_name)
{ {
@@ -165,9 +174,14 @@ Reference_rename(Reference *self, PyObject *py_name)
if (err < 0) if (err < 0)
return Error_set(err); return Error_set(err);
Py_RETURN_NONE; /* Return None */ Py_RETURN_NONE;
} }
PyDoc_STRVAR(Reference_reload__doc__,
"reload()\n\n"
"Reload the reference from the file-system.");
PyObject * PyObject *
Reference_reload(Reference *self) Reference_reload(Reference *self)
{ {
@@ -185,6 +199,10 @@ Reference_reload(Reference *self)
} }
PyDoc_STRVAR(Reference_resolve__doc__,
"resolve() -> Reference\n\n"
"Resolve a symbolic reference and return a direct reference.");
PyObject * PyObject *
Reference_resolve(Reference *self, PyObject *args) Reference_resolve(Reference *self, PyObject *args)
{ {
@@ -212,8 +230,11 @@ Reference_resolve(Reference *self, PyObject *args)
return wrap_reference(c_reference); return wrap_reference(c_reference);
} }
PyDoc_STRVAR(Reference_target__doc__, "Target.");
PyObject * PyObject *
Reference_get_target(Reference *self) Reference_target__get__(Reference *self)
{ {
const char * c_name; const char * c_name;
@@ -235,7 +256,7 @@ Reference_get_target(Reference *self)
} }
int int
Reference_set_target(Reference *self, PyObject *py_name) Reference_target__set__(Reference *self, PyObject *py_name)
{ {
char *c_name; char *c_name;
int err; int err;
@@ -258,15 +279,21 @@ Reference_set_target(Reference *self, PyObject *py_name)
return 0; return 0;
} }
PyDoc_STRVAR(Reference_name__doc__, "The full name of a reference.");
PyObject * PyObject *
Reference_get_name(Reference *self) Reference_name__get__(Reference *self)
{ {
CHECK_REFERENCE(self); CHECK_REFERENCE(self);
return to_path(git_reference_name(self->reference)); return to_path(git_reference_name(self->reference));
} }
PyDoc_STRVAR(Reference_oid__doc__, "Object id.");
PyObject * PyObject *
Reference_get_oid(Reference *self) Reference_oid__get__(Reference *self)
{ {
const git_oid *oid; const git_oid *oid;
@@ -286,7 +313,7 @@ Reference_get_oid(Reference *self)
} }
int int
Reference_set_oid(Reference *self, PyObject *py_hex) Reference_oid__set__(Reference *self, PyObject *py_hex)
{ {
git_oid oid; git_oid oid;
int err; int err;
@@ -294,7 +321,8 @@ Reference_set_oid(Reference *self, PyObject *py_hex)
CHECK_REFERENCE_INT(self); CHECK_REFERENCE_INT(self);
/* Get the oid */ /* Get the oid */
err = py_str_to_git_oid_expand(git_reference_owner(self->reference), py_hex, &oid); err = py_str_to_git_oid_expand(git_reference_owner(self->reference),
py_hex, &oid);
if (err < 0) { if (err < 0) {
Error_set(err); Error_set(err);
return -1; return -1;
@@ -310,8 +338,11 @@ Reference_set_oid(Reference *self, PyObject *py_hex)
return 0; return 0;
} }
PyDoc_STRVAR(Reference_hex__doc__, "Hex oid.");
PyObject * PyObject *
Reference_get_hex(Reference *self) Reference_hex__get__(Reference *self)
{ {
const git_oid *oid; const git_oid *oid;
@@ -330,8 +361,12 @@ Reference_get_hex(Reference *self)
return git_oid_to_py_str(oid); return git_oid_to_py_str(oid);
} }
PyDoc_STRVAR(Reference_type__doc__,
"Type (GIT_REF_OID, GIT_REF_SYMBOLIC or GIT_REF_PACKED).");
PyObject * PyObject *
Reference_get_type(Reference *self) Reference_type__get__(Reference *self)
{ {
git_ref_t c_type; git_ref_t c_type;
@@ -340,6 +375,11 @@ Reference_get_type(Reference *self)
return PyInt_FromLong(c_type); return PyInt_FromLong(c_type);
} }
PyDoc_STRVAR(Reference_log__doc__,
"log() -> RefLogIter\n\n"
"Retrieves the current reference log.");
PyObject * PyObject *
Reference_log(Reference *self) Reference_log(Reference *self)
{ {
@@ -365,7 +405,7 @@ RefLogEntry_init(RefLogEntry *self, PyObject *args, PyObject *kwds)
{ {
self->oid_old = Py_None; self->oid_old = Py_None;
self->oid_new = Py_None; self->oid_new = Py_None;
self->msg = ""; self->message = "";
self->committer = Py_None; self->committer = Py_None;
return 0; return 0;
@@ -378,18 +418,21 @@ RefLogEntry_dealloc(RefLogEntry *self)
Py_XDECREF(self->oid_old); Py_XDECREF(self->oid_old);
Py_XDECREF(self->oid_new); Py_XDECREF(self->oid_new);
Py_XDECREF(self->committer); Py_XDECREF(self->committer);
free(self->msg); free(self->message);
PyObject_Del(self); PyObject_Del(self);
} }
PyMemberDef RefLogEntry_members[] = { PyMemberDef RefLogEntry_members[] = {
{"oid_new", T_OBJECT, offsetof(RefLogEntry, oid_new), 0, "new oid"}, MEMBER(RefLogEntry, oid_new, T_OBJECT, "New oid."),
{"oid_old", T_OBJECT, offsetof(RefLogEntry, oid_old), 0, "old oid"}, MEMBER(RefLogEntry, oid_old, T_OBJECT, "Old oid."),
{"message", T_STRING, offsetof(RefLogEntry, msg), 0, "message"}, MEMBER(RefLogEntry, message, T_STRING, "Message."),
{"committer", T_OBJECT, offsetof(RefLogEntry, committer), 0, "committer"}, MEMBER(RefLogEntry, committer, T_OBJECT, "Committer."),
{NULL} {NULL}
}; };
PyDoc_STRVAR(RefLogEntry__doc__, "Reference log object.");
PyTypeObject RefLogEntryType = { PyTypeObject RefLogEntryType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.RefLogEntry", /* tp_name */ "_pygit2.RefLogEntry", /* tp_name */
@@ -411,7 +454,7 @@ PyTypeObject RefLogEntryType = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */ Py_TPFLAGS_DEFAULT, /* tp_flags */
"ReferenceLog object", /* tp_doc */ RefLogEntry__doc__, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
@@ -432,32 +475,26 @@ PyTypeObject RefLogEntryType = {
}; };
PyMethodDef Reference_methods[] = { PyMethodDef Reference_methods[] = {
{"delete", (PyCFunction)Reference_delete, METH_NOARGS, METHOD(Reference, delete, METH_NOARGS),
"Delete this reference. It will no longer be valid!"}, METHOD(Reference, rename, METH_O),
{"rename", (PyCFunction)Reference_rename, METH_O, METHOD(Reference, reload, METH_NOARGS),
"Rename the reference."}, METHOD(Reference, resolve, METH_NOARGS),
{"reload", (PyCFunction)Reference_reload, METH_NOARGS, METHOD(Reference, log, METH_NOARGS),
"Reload the reference from the file-system."},
{"resolve", (PyCFunction)Reference_resolve, METH_NOARGS,
"Resolve a symbolic reference and return a direct reference."},
{"log", (PyCFunction)Reference_log, METH_NOARGS,
"Retrieves the current reference log."},
{NULL} {NULL}
}; };
PyGetSetDef Reference_getseters[] = { PyGetSetDef Reference_getseters[] = {
{"name", (getter)Reference_get_name, NULL, GETTER(Reference, name),
"The full name of a reference.", NULL}, GETSET(Reference, oid),
{"oid", (getter)Reference_get_oid, (setter)Reference_set_oid, "object id", GETTER(Reference, hex),
NULL}, GETSET(Reference, target),
{"hex", (getter)Reference_get_hex, NULL, "hex oid", NULL}, GETTER(Reference, type),
{"target", (getter)Reference_get_target, (setter)Reference_set_target,
"target", NULL},
{"type", (getter)Reference_get_type, NULL,
"type (GIT_REF_OID, GIT_REF_SYMBOLIC or GIT_REF_PACKED).", NULL},
{NULL} {NULL}
}; };
PyDoc_STRVAR(Reference__doc__, "Reference.");
PyTypeObject ReferenceType = { PyTypeObject ReferenceType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.Reference", /* tp_name */ "_pygit2.Reference", /* tp_name */
@@ -479,7 +516,7 @@ PyTypeObject ReferenceType = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */ Py_TPFLAGS_DEFAULT, /* tp_flags */
"Reference", /* tp_doc */ Reference__doc__, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */

View File

@@ -34,8 +34,11 @@
#include <pygit2/oid.h> #include <pygit2/oid.h>
#include <pygit2/tag.h> #include <pygit2/tag.h>
PyDoc_STRVAR(Tag_target__doc__, "Tagged object.");
PyObject * PyObject *
Tag_get_target(Tag *self) Tag_target__get__(Tag *self)
{ {
const git_oid *oid; const git_oid *oid;
@@ -43,8 +46,11 @@ Tag_get_target(Tag *self)
return git_oid_to_python(oid->id); return git_oid_to_python(oid->id);
} }
PyDoc_STRVAR(Tag_name__doc__, "Tag name.");
PyObject * PyObject *
Tag_get_name(Tag *self) Tag_name__get__(Tag *self)
{ {
const char *name; const char *name;
name = git_tag_name(self->tag); name = git_tag_name(self->tag);
@@ -53,8 +59,11 @@ Tag_get_name(Tag *self)
return to_unicode(name, "utf-8", "strict"); return to_unicode(name, "utf-8", "strict");
} }
PyDoc_STRVAR(Tag_tagger__doc__, "Tagger.");
PyObject * PyObject *
Tag_get_tagger(Tag *self) Tag_tagger__get__(Tag *self)
{ {
const git_signature *signature = git_tag_tagger(self->tag); const git_signature *signature = git_tag_tagger(self->tag);
if (!signature) if (!signature)
@@ -63,8 +72,11 @@ Tag_get_tagger(Tag *self)
return build_signature((Object*)self, signature, "utf-8"); return build_signature((Object*)self, signature, "utf-8");
} }
PyDoc_STRVAR(Tag_message__doc__, "Tag message.");
PyObject * PyObject *
Tag_get_message(Tag *self) Tag_message__get__(Tag *self)
{ {
const char *message; const char *message;
message = git_tag_message(self->tag); message = git_tag_message(self->tag);
@@ -73,21 +85,27 @@ Tag_get_message(Tag *self)
return to_unicode(message, "utf-8", "strict"); return to_unicode(message, "utf-8", "strict");
} }
PyDoc_STRVAR(Tag__message__doc__, "Tag message (bytes).");
PyObject * PyObject *
Tag_get_raw_message(Tag *self) Tag__message__get__(Tag *self)
{ {
return PyString_FromString(git_tag_message(self->tag)); return PyString_FromString(git_tag_message(self->tag));
} }
PyGetSetDef Tag_getseters[] = { PyGetSetDef Tag_getseters[] = {
{"target", (getter)Tag_get_target, NULL, "tagged object", NULL}, GETTER(Tag, target),
{"name", (getter)Tag_get_name, NULL, "tag name", NULL}, GETTER(Tag, name),
{"tagger", (getter)Tag_get_tagger, NULL, "tagger", NULL}, GETTER(Tag, tagger),
{"message", (getter)Tag_get_message, NULL, "tag message", NULL}, GETTER(Tag, message),
{"_message", (getter)Tag_get_raw_message, NULL, "tag message (bytes)", NULL}, GETTER(Tag, _message),
{NULL} {NULL}
}; };
PyDoc_STRVAR(Tag__doc__, "Tag objects.");
PyTypeObject TagType = { PyTypeObject TagType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.Tag", /* tp_name */ "_pygit2.Tag", /* tp_name */
@@ -109,7 +127,7 @@ PyTypeObject TagType = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
"Tag objects", /* tp_doc */ Tag__doc__, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */

View File

@@ -433,9 +433,13 @@ TreeIter_iternext(TreeIter *self)
return NULL; return NULL;
self->i += 1; self->i += 1;
return (TreeEntry*)wrap_tree_entry(git_tree_entry_dup(tree_entry), self->owner); return (TreeEntry*)wrap_tree_entry(git_tree_entry_dup(tree_entry),
self->owner);
} }
PyDoc_STRVAR(TreeIter__doc__, "Tree iterator.");
PyTypeObject TreeIterType = { PyTypeObject TreeIterType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.TreeIter", /* tp_name */ "_pygit2.TreeIter", /* tp_name */
@@ -456,9 +460,8 @@ PyTypeObject TreeIterType = {
PyObject_GenericGetAttr, /* tp_getattro */ PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
Py_TPFLAGS_BASETYPE, /* tp_flags */ TreeIter__doc__, /* tp_doc */
0, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */

View File

@@ -42,6 +42,11 @@ TreeBuilder_dealloc(TreeBuilder *self)
PyObject_Del(self); PyObject_Del(self);
} }
PyDoc_STRVAR(TreeBuilder_insert__doc__,
"insert(name, oid, attr)\n\n"
"Insert or replace an entry in the treebuilder.");
PyObject * PyObject *
TreeBuilder_insert(TreeBuilder *self, PyObject *args) TreeBuilder_insert(TreeBuilder *self, PyObject *args)
{ {
@@ -68,6 +73,11 @@ TreeBuilder_insert(TreeBuilder *self, PyObject *args)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
PyDoc_STRVAR(TreeBuilder_write__doc__,
"write() -> bytes\n\n"
"Write the tree to the given repository.");
PyObject * PyObject *
TreeBuilder_write(TreeBuilder *self) TreeBuilder_write(TreeBuilder *self)
{ {
@@ -81,6 +91,11 @@ TreeBuilder_write(TreeBuilder *self)
return git_oid_to_python(&oid); return git_oid_to_python(&oid);
} }
PyDoc_STRVAR(TreeBuilder_remove__doc__,
"remove(name)\n\n"
"Remove an entry from the builder.");
PyObject * PyObject *
TreeBuilder_remove(TreeBuilder *self, PyObject *py_filename) TreeBuilder_remove(TreeBuilder *self, PyObject *py_filename)
{ {
@@ -98,6 +113,11 @@ TreeBuilder_remove(TreeBuilder *self, PyObject *py_filename)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
PyDoc_STRVAR(TreeBuilder_clear__doc__,
"clear()\n\n"
"Clear all the entries in the builder.");
PyObject * PyObject *
TreeBuilder_clear(TreeBuilder *self) TreeBuilder_clear(TreeBuilder *self)
{ {
@@ -106,17 +126,16 @@ TreeBuilder_clear(TreeBuilder *self)
} }
PyMethodDef TreeBuilder_methods[] = { PyMethodDef TreeBuilder_methods[] = {
{"insert", (PyCFunction)TreeBuilder_insert, METH_VARARGS, METHOD(TreeBuilder, insert, METH_VARARGS),
"Insert or replace an entry in the treebuilder"}, METHOD(TreeBuilder, write, METH_NOARGS),
{"write", (PyCFunction)TreeBuilder_write, METH_NOARGS, METHOD(TreeBuilder, remove, METH_O),
"Write the tree to the given repository"}, METHOD(TreeBuilder, clear, METH_NOARGS),
{"remove", (PyCFunction)TreeBuilder_remove, METH_O, {NULL}
"Remove an entry from the builder"},
{"clear", (PyCFunction)TreeBuilder_clear, METH_NOARGS,
"Clear all the entries in the builder"},
{NULL, NULL, 0, NULL}
}; };
PyDoc_STRVAR(TreeBuilder__doc__, "TreeBuilder objects");
PyTypeObject TreeBuilderType = { PyTypeObject TreeBuilderType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.TreeBuilder", /* tp_name */ "_pygit2.TreeBuilder", /* tp_name */
@@ -138,7 +157,7 @@ PyTypeObject TreeBuilderType = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
"TreeBuilder objects", /* tp_doc */ TreeBuilder__doc__, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */

View File

@@ -43,6 +43,11 @@ Walker_dealloc(Walker *self)
PyObject_Del(self); PyObject_Del(self);
} }
PyDoc_STRVAR(Walker_hide__doc__,
"hide(oid)\n\n"
"Mark a commit (and its ancestors) uninteresting for the output.");
PyObject * PyObject *
Walker_hide(Walker *self, PyObject *py_hex) Walker_hide(Walker *self, PyObject *py_hex)
{ {
@@ -50,7 +55,6 @@ Walker_hide(Walker *self, PyObject *py_hex)
git_oid oid; git_oid oid;
err = py_str_to_git_oid_expand(self->repo->repo, py_hex, &oid); err = py_str_to_git_oid_expand(self->repo->repo, py_hex, &oid);
if (err < 0) if (err < 0)
return Error_set(err); return Error_set(err);
@@ -61,6 +65,11 @@ Walker_hide(Walker *self, PyObject *py_hex)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
PyDoc_STRVAR(Walker_push__doc__,
"push(oid)\n\n"
"Mark a commit to start traversal from.");
PyObject * PyObject *
Walker_push(Walker *self, PyObject *py_hex) Walker_push(Walker *self, PyObject *py_hex)
{ {
@@ -78,6 +87,11 @@ Walker_push(Walker *self, PyObject *py_hex)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
PyDoc_STRVAR(Walker_sort__doc__,
"sort(mode)\n\n"
"Change the sorting mode (this resets the walker).");
PyObject * PyObject *
Walker_sort(Walker *self, PyObject *py_sort_mode) Walker_sort(Walker *self, PyObject *py_sort_mode)
{ {
@@ -92,6 +106,11 @@ Walker_sort(Walker *self, PyObject *py_sort_mode)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
PyDoc_STRVAR(Walker_reset__doc__,
"reset()\n\n"
"Reset the walking machinery for reuse.");
PyObject * PyObject *
Walker_reset(Walker *self) Walker_reset(Walker *self)
{ {
@@ -132,17 +151,16 @@ Walker_iternext(Walker *self)
} }
PyMethodDef Walker_methods[] = { PyMethodDef Walker_methods[] = {
{"hide", (PyCFunction)Walker_hide, METH_O, METHOD(Walker, hide, METH_O),
"Mark a commit (and its ancestors) uninteresting for the output."}, METHOD(Walker, push, METH_O),
{"push", (PyCFunction)Walker_push, METH_O, METHOD(Walker, reset, METH_NOARGS),
"Mark a commit to start traversal from."}, METHOD(Walker, sort, METH_O),
{"reset", (PyCFunction)Walker_reset, METH_NOARGS,
"Reset the walking machinery for reuse."},
{"sort", (PyCFunction)Walker_sort, METH_O,
"Change the sorting mode (this resets the walker)."},
{NULL} {NULL}
}; };
PyDoc_STRVAR(Walker__doc__, "Revision walker.");
PyTypeObject WalkerType = { PyTypeObject WalkerType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.Walker", /* tp_name */ "_pygit2.Walker", /* tp_name */
@@ -164,7 +182,7 @@ PyTypeObject WalkerType = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */ Py_TPFLAGS_DEFAULT, /* tp_flags */
"Revision walker", /* tp_doc */ Walker__doc__, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */