(partial) review the way we handle Python int/long

This commit is contained in:
J. David Ibáñez 2017-04-09 10:17:01 +02:00
parent f37cf25b8e
commit f2c89a760a
12 changed files with 94 additions and 90 deletions

@ -133,7 +133,7 @@ PyDoc_STRVAR(Blob_size__doc__, "Size.");
PyObject * PyObject *
Blob_size__get__(Blob *self) Blob_size__get__(Blob *self)
{ {
return PyLong_FromLongLong(git_blob_rawsize(self->blob)); return PyInt_FromLongLong(git_blob_rawsize(self->blob));
} }

@ -80,7 +80,7 @@ PyDoc_STRVAR(Commit_commit_time__doc__, "Commit time.");
PyObject * PyObject *
Commit_commit_time__get__(Commit *commit) Commit_commit_time__get__(Commit *commit)
{ {
return PyLong_FromLongLong(git_commit_time(commit->commit)); return PyInt_FromLongLong(git_commit_time(commit->commit));
} }
@ -89,7 +89,7 @@ PyDoc_STRVAR(Commit_commit_time_offset__doc__, "Commit time offset.");
PyObject * PyObject *
Commit_commit_time_offset__get__(Commit *commit) Commit_commit_time_offset__get__(Commit *commit)
{ {
return PyLong_FromLong(git_commit_time_offset(commit->commit)); return PyInt_FromLong(git_commit_time_offset(commit->commit));
} }

@ -587,7 +587,7 @@ PyDoc_STRVAR(DiffStats_insertions__doc__, "Total number of insertions");
PyObject * PyObject *
DiffStats_insertions__get__(DiffStats *self) DiffStats_insertions__get__(DiffStats *self)
{ {
return PyLong_FromSize_t(git_diff_stats_insertions(self->stats)); return PyInt_FromSize_t(git_diff_stats_insertions(self->stats));
} }
PyDoc_STRVAR(DiffStats_deletions__doc__, "Total number of deletions"); PyDoc_STRVAR(DiffStats_deletions__doc__, "Total number of deletions");
@ -595,7 +595,7 @@ PyDoc_STRVAR(DiffStats_deletions__doc__, "Total number of deletions");
PyObject * PyObject *
DiffStats_deletions__get__(DiffStats *self) DiffStats_deletions__get__(DiffStats *self)
{ {
return PyLong_FromSize_t(git_diff_stats_deletions(self->stats)); return PyInt_FromSize_t(git_diff_stats_deletions(self->stats));
} }
PyDoc_STRVAR(DiffStats_files_changed__doc__, "Total number of files changed"); PyDoc_STRVAR(DiffStats_files_changed__doc__, "Total number of files changed");
@ -603,7 +603,7 @@ PyDoc_STRVAR(DiffStats_files_changed__doc__, "Total number of files changed");
PyObject * PyObject *
DiffStats_files_changed__get__(DiffStats *self) DiffStats_files_changed__get__(DiffStats *self)
{ {
return PyLong_FromSize_t(git_diff_stats_files_changed(self->stats)); return PyInt_FromSize_t(git_diff_stats_files_changed(self->stats));
} }
PyDoc_STRVAR(DiffStats_format__doc__, PyDoc_STRVAR(DiffStats_format__doc__,
@ -805,10 +805,10 @@ Diff_getitem(Diff *self, PyObject *value)
{ {
size_t i; size_t i;
if (!PyLong_Check(value)) if (!PyInt_Check(value))
return NULL; return NULL; /* FIXME Raise error */
i = PyLong_AsUnsignedLong(value); i = PyInt_AsSize_t(value);
return diff_get_patch_byindex(self->diff, i); return diff_get_patch_byindex(self->diff, i);
} }

@ -97,7 +97,7 @@ PyDoc_STRVAR(Object_type__doc__,
PyObject * PyObject *
Object_type__get__(Object *self) Object_type__get__(Object *self)
{ {
return PyLong_FromLong(git_object_type(self->obj)); return PyInt_FromLong(git_object_type(self->obj));
} }
PyDoc_STRVAR(Object__pointer__doc__, "Get the object's pointer. For internal use only."); PyDoc_STRVAR(Object__pointer__doc__, "Get the object's pointer. For internal use only.");
@ -143,14 +143,15 @@ PyDoc_STRVAR(Object_peel__doc__,
PyObject * PyObject *
Object_peel(Object *self, PyObject *py_type) Object_peel(Object *self, PyObject *py_type)
{ {
int type = -1, err; int err;
git_otype otype;
git_object *peeled; git_object *peeled;
type = py_object_to_object_type(py_type); otype = py_object_to_otype(py_type);
if (type == -1) if (otype == GIT_OBJ_BAD)
return NULL; return NULL;
err = git_object_peel(&peeled, self->obj, (git_otype)type); err = git_object_peel(&peeled, self->obj, otype);
if (err < 0) if (err < 0)
return Error_set(err); return Error_set(err);

@ -65,11 +65,11 @@ option(PyObject *self, PyObject *args)
if (!py_option) if (!py_option)
return NULL; return NULL;
if (!PyLong_Check(py_option)) if (!PyInt_Check(py_option))
return Error_type_error( return Error_type_error(
"option should be an integer, got %.200s", py_option); "option should be an integer, got %.200s", py_option);
option = PyLong_AsLong(py_option); option = PyInt_AsLong(py_option);
switch (option) { switch (option) {
case GIT_OPT_GET_SEARCH_PATH: case GIT_OPT_GET_SEARCH_PATH:
@ -80,11 +80,11 @@ option(PyObject *self, PyObject *args)
if (!py_level) if (!py_level)
return NULL; return NULL;
if (!PyLong_Check(py_level)) if (!PyInt_Check(py_level))
return Error_type_error( return Error_type_error(
"level should be an integer, got %.200s", py_level); "level should be an integer, got %.200s", py_level);
return get_search_path(PyLong_AsLong(py_level)); return get_search_path(PyInt_AsLong(py_level));
} }
case GIT_OPT_SET_SEARCH_PATH: case GIT_OPT_SET_SEARCH_PATH:
@ -101,7 +101,7 @@ option(PyObject *self, PyObject *args)
if (!py_path) if (!py_path)
return NULL; return NULL;
if (!PyLong_Check(py_level)) if (!PyInt_Check(py_level))
return Error_type_error( return Error_type_error(
"level should be an integer, got %.200s", py_level); "level should be an integer, got %.200s", py_level);
@ -110,7 +110,7 @@ option(PyObject *self, PyObject *args)
return NULL; return NULL;
err = git_libgit2_opts( err = git_libgit2_opts(
GIT_OPT_SET_SEARCH_PATH, PyLong_AsLong(py_level), path); GIT_OPT_SET_SEARCH_PATH, PyInt_AsLong(py_level), path);
Py_DECREF(tpath); Py_DECREF(tpath);
if (err < 0) if (err < 0)
@ -127,7 +127,7 @@ option(PyObject *self, PyObject *args)
if (error < 0) if (error < 0)
return Error_set(error); return Error_set(error);
return PyLong_FromSize_t(size); return PyInt_FromSize_t(size);
} }
case GIT_OPT_SET_MWINDOW_SIZE: case GIT_OPT_SET_MWINDOW_SIZE:
@ -139,11 +139,11 @@ option(PyObject *self, PyObject *args)
if (!py_size) if (!py_size)
return NULL; return NULL;
if (!PyLong_Check(py_size)) if (!PyInt_Check(py_size))
return Error_type_error( return Error_type_error(
"size should be an integer, got %.200s", py_size); "size should be an integer, got %.200s", py_size);
size = PyLong_AsSize_t(py_size); size = PyInt_AsSize_t(py_size);
error = git_libgit2_opts(GIT_OPT_SET_MWINDOW_SIZE, size); error = git_libgit2_opts(GIT_OPT_SET_MWINDOW_SIZE, size);
if (error < 0) if (error < 0)
return Error_set(error); return Error_set(error);
@ -159,7 +159,7 @@ option(PyObject *self, PyObject *args)
if (error < 0) if (error < 0)
return Error_set(error); return Error_set(error);
return PyLong_FromSize_t(limit); return PyInt_FromSize_t(limit);
} }
case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT: case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT:
@ -171,11 +171,11 @@ option(PyObject *self, PyObject *args)
if (!py_limit) if (!py_limit)
return NULL; return NULL;
if (!PyLong_Check(py_limit)) if (!PyInt_Check(py_limit))
return Error_type_error( return Error_type_error(
"limit should be an integer, got %.200s", py_limit); "limit should be an integer, got %.200s", py_limit);
limit = PyLong_AsSize_t(py_limit); limit = PyInt_AsSize_t(py_limit);
error = git_libgit2_opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, limit); error = git_libgit2_opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, limit);
if (error < 0) if (error < 0)
return Error_set(error); return Error_set(error);
@ -197,12 +197,12 @@ option(PyObject *self, PyObject *args)
if (!py_limit) if (!py_limit)
return NULL; return NULL;
if (!PyLong_Check(py_limit)) if (!PyInt_Check(py_limit))
return Error_type_error( return Error_type_error(
"limit should be an integer, got %.200s", py_limit); "limit should be an integer, got %.200s", py_limit);
object_type = PyLong_AsLong(py_object_type); object_type = PyInt_AsLong(py_object_type);
limit = PyLong_AsSize_t(py_limit); limit = PyInt_AsSize_t(py_limit);
error = git_libgit2_opts( error = git_libgit2_opts(
GIT_OPT_SET_CACHE_OBJECT_LIMIT, object_type, limit); GIT_OPT_SET_CACHE_OBJECT_LIMIT, object_type, limit);
@ -221,11 +221,11 @@ option(PyObject *self, PyObject *args)
if (!py_max_size) if (!py_max_size)
return NULL; return NULL;
if (!PyLong_Check(py_max_size)) if (!PyInt_Check(py_max_size))
return Error_type_error( return Error_type_error(
"max_size should be an integer, got %.200s", py_max_size); "max_size should be an integer, got %.200s", py_max_size);
max_size = PyLong_AsSize_t(py_max_size); max_size = PyInt_AsSize_t(py_max_size);
error = git_libgit2_opts(GIT_OPT_SET_CACHE_MAX_SIZE, max_size); error = git_libgit2_opts(GIT_OPT_SET_CACHE_MAX_SIZE, max_size);
if (error < 0) if (error < 0)
return Error_set(error); return Error_set(error);
@ -240,11 +240,11 @@ option(PyObject *self, PyObject *args)
py_flag = PyTuple_GetItem(args, 1); py_flag = PyTuple_GetItem(args, 1);
if (!PyLong_Check(py_flag)) if (!PyInt_Check(py_flag))
return Error_type_error( return Error_type_error(
"flag should be an integer, got %.200s", py_flag); "flag should be an integer, got %.200s", py_flag);
flag = PyLong_AsSize_t(py_flag); flag = PyInt_AsSize_t(py_flag);
error = git_libgit2_opts(GIT_OPT_ENABLE_CACHING, flag); error = git_libgit2_opts(GIT_OPT_ENABLE_CACHING, flag);
if (error < 0) if (error < 0)
return Error_set(error); return Error_set(error);
@ -262,8 +262,8 @@ option(PyObject *self, PyObject *args)
if (error < 0) if (error < 0)
return Error_set(error); return Error_set(error);
PyTuple_SetItem(tup, 0, PyLong_FromLong(current)); PyTuple_SetItem(tup, 0, PyInt_FromLong(current));
PyTuple_SetItem(tup, 1, PyLong_FromLong(allowed)); PyTuple_SetItem(tup, 1, PyInt_FromLong(allowed));
return tup; return tup;
} }

@ -325,7 +325,7 @@ Reference_type__get__(Reference *self)
CHECK_REFERENCE(self); CHECK_REFERENCE(self);
c_type = git_reference_type(self->reference); c_type = git_reference_type(self->reference);
return PyLong_FromLong(c_type); return PyInt_FromLong(c_type);
} }
@ -379,7 +379,8 @@ PyDoc_STRVAR(Reference_peel__doc__,
PyObject * PyObject *
Reference_peel(Reference *self, PyObject *args) Reference_peel(Reference *self, PyObject *args)
{ {
int err, type; int err;
git_otype otype;
git_object *obj; git_object *obj;
PyObject *py_type = Py_None; PyObject *py_type = Py_None;
@ -388,11 +389,11 @@ Reference_peel(Reference *self, PyObject *args)
if (!PyArg_ParseTuple(args, "|O", &py_type)) if (!PyArg_ParseTuple(args, "|O", &py_type))
return NULL; return NULL;
type = py_object_to_object_type(py_type); otype = py_object_to_otype(py_type);
if (type == -1) if (otype == GIT_OBJ_BAD)
return NULL; return NULL;
err = git_reference_peel(&obj, self->reference, type); err = git_reference_peel(&obj, self->reference, otype);
if (err < 0) if (err < 0)
return Error_set(err); return Error_set(err);

@ -1564,7 +1564,7 @@ Repository_status(Repository *self)
path = entry->head_to_index->old_file.path; path = entry->head_to_index->old_file.path;
else else
path = entry->index_to_workdir->old_file.path; path = entry->index_to_workdir->old_file.path;
status = PyLong_FromLong((long) entry->status); status = PyInt_FromLong((long) entry->status);
err = PyDict_SetItemString(dict, path, status); err = PyDict_SetItemString(dict, path, status);
Py_CLEAR(status); Py_CLEAR(status);
@ -1606,7 +1606,7 @@ Repository_status_file(Repository *self, PyObject *value)
free(path); free(path);
return err_obj; return err_obj;
} }
return PyLong_FromLong(status); return PyInt_FromLong(status);
} }

@ -158,7 +158,7 @@ PyDoc_STRVAR(Signature_time__doc__, "Unix time.");
PyObject * PyObject *
Signature_time__get__(Signature *self) Signature_time__get__(Signature *self)
{ {
return PyLong_FromLongLong(self->signature->when.time); return PyInt_FromLongLong(self->signature->when.time);
} }
@ -167,7 +167,7 @@ PyDoc_STRVAR(Signature_offset__doc__, "Offset from UTC in minutes.");
PyObject * PyObject *
Signature_offset__get__(Signature *self) Signature_offset__get__(Signature *self)
{ {
return PyLong_FromLong(self->signature->when.offset); return PyInt_FromLong(self->signature->when.offset);
} }
PyGetSetDef Signature_getseters[] = { PyGetSetDef Signature_getseters[] = {

@ -54,7 +54,7 @@ PyDoc_STRVAR(TreeEntry_filemode__doc__, "Filemode.");
PyObject * PyObject *
TreeEntry_filemode__get__(TreeEntry *self) TreeEntry_filemode__get__(TreeEntry *self)
{ {
return PyLong_FromLong(git_tree_entry_filemode(self->entry)); return PyInt_FromLong(git_tree_entry_filemode(self->entry));
} }
@ -290,7 +290,7 @@ Tree_fix_index(Tree *self, PyObject *py_index)
size_t len; size_t len;
long slen; long slen;
index = PyLong_AsLong(py_index); index = PyInt_AsLong(py_index);
if (PyErr_Occurred()) if (PyErr_Occurred())
return -1; return -1;
@ -359,7 +359,7 @@ Tree_getitem(Tree *self, PyObject *value)
int err; int err;
/* Case 1: integer */ /* Case 1: integer */
if (PyLong_Check(value)) if (PyInt_Check(value))
return Tree_getitem_by_index(self, value); return Tree_getitem_by_index(self, value);
/* Case 2: byte or text string */ /* Case 2: byte or text string */

@ -160,40 +160,39 @@ on_error:
static git_otype static git_otype
py_type_to_git_type(PyTypeObject *py_type) py_type_to_git_type(PyTypeObject *py_type)
{ {
git_otype type = GIT_OBJ_BAD; if (py_type == &CommitType)
return GIT_OBJ_COMMIT;
else if (py_type == &TreeType)
return GIT_OBJ_TREE;
else if (py_type == &BlobType)
return GIT_OBJ_BLOB;
else if (py_type == &TagType)
return GIT_OBJ_TAG;
if (py_type == &CommitType) { PyErr_SetString(PyExc_ValueError, "invalid target type");
type = GIT_OBJ_COMMIT; return GIT_OBJ_BAD; /* -1 */
} else if (py_type == &TreeType) {
type = GIT_OBJ_TREE;
} else if (py_type == &BlobType) {
type = GIT_OBJ_BLOB;
} else if (py_type == &TagType) {
type = GIT_OBJ_TAG;
}
return type;
} }
int git_otype
py_object_to_object_type(PyObject *py_type) py_object_to_otype(PyObject *py_type)
{ {
int type = -1; long value;
if (py_type == Py_None) if (py_type == Py_None)
return GIT_OBJ_ANY; return GIT_OBJ_ANY;
if (PyLong_Check(py_type)) { if (PyInt_Check(py_type)) {
type = PyLong_AsLong(py_type); value = PyInt_AsLong(py_type);
if (type == -1 && PyErr_Occurred()) if (value == -1 && PyErr_Occurred())
return -1; return GIT_OBJ_BAD;
} else if (PyType_Check(py_type)) {
type = py_type_to_git_type((PyTypeObject *) py_type); /* TODO Check whether the value is a valid value */
return (git_otype)value;
} }
if (type == -1) { if (PyType_Check(py_type))
PyErr_SetString(PyExc_ValueError, "invalid target type"); return py_type_to_git_type((PyTypeObject *) py_type);
}
return type; PyErr_SetString(PyExc_ValueError, "invalid target type");
return GIT_OBJ_BAD; /* -1 */
} }

@ -40,13 +40,17 @@
#endif #endif
/* Python 2 support */ /* Python 2 support */
#ifndef Py_hash_t
#define Py_hash_t long
#endif
#ifndef PyLong_AsSize_t
#define PyLong_AsSize_t (size_t)PyLong_AsUnsignedLong
#endif
#if PY_MAJOR_VERSION == 2 #if PY_MAJOR_VERSION == 2
#define PyLong_FromSize_t PyInt_FromSize_t #define PyInt_AsSize_t (size_t)PyInt_AsLong
#define PyLong_AsSize_t (size_t)PyInt_AsSsize_t #define PyInt_FromLongLong PyInt_FromLong
#define PyLong_AsLong PyInt_AsLong
#undef PyLong_Check
#define PyLong_Check PyInt_Check
#define PyLong_FromLong PyInt_FromLong
#define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_AS_STRING PyString_AS_STRING
#define PyBytes_AsString PyString_AsString #define PyBytes_AsString PyString_AsString
#define PyBytes_AsStringAndSize PyString_AsStringAndSize #define PyBytes_AsStringAndSize PyString_AsStringAndSize
@ -57,19 +61,18 @@
#define to_path(x) to_bytes(x) #define to_path(x) to_bytes(x)
#define to_encoding(x) to_bytes(x) #define to_encoding(x) to_bytes(x)
#else #else
#define PyInt_Check PyLong_Check
#define PyInt_FromSize_t PyLong_FromSize_t
#define PyInt_FromLong PyLong_FromLong
#define PyInt_FromLongLong PyLong_FromLongLong
#define PyInt_AsLong PyLong_AsLong
#define PyInt_AsSize_t PyLong_AsSize_t
#define to_path(x) to_unicode(x, Py_FileSystemDefaultEncoding, "strict") #define to_path(x) to_unicode(x, Py_FileSystemDefaultEncoding, "strict")
#define to_encoding(x) PyUnicode_DecodeASCII(x, strlen(x), "strict") #define to_encoding(x) PyUnicode_DecodeASCII(x, strlen(x), "strict")
#define PyString_FromFormat(s, ...) PyUnicode_FromFormat(s, __VA_ARGS__) #define PyString_FromFormat(s, ...) PyUnicode_FromFormat(s, __VA_ARGS__)
#endif #endif
#ifdef PYPY_VERSION
#define PyLong_AsSize_t (size_t)PyLong_AsUnsignedLong
#endif
#ifndef Py_hash_t
#define Py_hash_t long
#endif
#define CHECK_REFERENCE(self)\ #define CHECK_REFERENCE(self)\
if (self->reference == NULL) {\ if (self->reference == NULL) {\
@ -118,7 +121,7 @@ const char *py_str_borrow_c_str(PyObject **tvaue, PyObject *value, const char *e
PyObject * get_pylist_from_git_strarray(git_strarray *strarray); PyObject * get_pylist_from_git_strarray(git_strarray *strarray);
int get_strarraygit_from_pylist(git_strarray *array, PyObject *pylist); int get_strarraygit_from_pylist(git_strarray *array, PyObject *pylist);
int py_object_to_object_type(PyObject *py_type); int py_object_to_otype(PyObject *py_type);
#define py_path_to_c_str(py_path) \ #define py_path_to_c_str(py_path) \
py_str_to_c_str(py_path, Py_FileSystemDefaultEncoding) py_str_to_c_str(py_path, Py_FileSystemDefaultEncoding)

@ -98,13 +98,13 @@ PyDoc_STRVAR(Walker_sort__doc__,
PyObject * PyObject *
Walker_sort(Walker *self, PyObject *py_sort_mode) Walker_sort(Walker *self, PyObject *py_sort_mode)
{ {
int sort_mode; long sort_mode;
sort_mode = (int)PyLong_AsLong(py_sort_mode); sort_mode = PyInt_AsLong(py_sort_mode);
if (sort_mode == -1 && PyErr_Occurred()) if (sort_mode == -1 && PyErr_Occurred())
return NULL; return NULL;
git_revwalk_sorting(self->walk, sort_mode); git_revwalk_sorting(self->walk, (unsigned int)sort_mode);
Py_RETURN_NONE; Py_RETURN_NONE;
} }