diff --git a/src/blob.c b/src/blob.c index 90070ba..17b3ced 100644 --- a/src/blob.c +++ b/src/blob.c @@ -133,7 +133,7 @@ PyDoc_STRVAR(Blob_size__doc__, "Size."); PyObject * Blob_size__get__(Blob *self) { - return PyLong_FromLongLong(git_blob_rawsize(self->blob)); + return PyInt_FromLongLong(git_blob_rawsize(self->blob)); } diff --git a/src/commit.c b/src/commit.c index 1ca9792..7d06c75 100644 --- a/src/commit.c +++ b/src/commit.c @@ -80,7 +80,7 @@ PyDoc_STRVAR(Commit_commit_time__doc__, "Commit time."); PyObject * 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 * 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)); } diff --git a/src/diff.c b/src/diff.c index 4d17b86..810c6d2 100644 --- a/src/diff.c +++ b/src/diff.c @@ -587,7 +587,7 @@ PyDoc_STRVAR(DiffStats_insertions__doc__, "Total number of insertions"); PyObject * 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"); @@ -595,7 +595,7 @@ PyDoc_STRVAR(DiffStats_deletions__doc__, "Total number of deletions"); PyObject * 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"); @@ -603,7 +603,7 @@ PyDoc_STRVAR(DiffStats_files_changed__doc__, "Total number of files changed"); PyObject * 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__, @@ -805,10 +805,10 @@ Diff_getitem(Diff *self, PyObject *value) { size_t i; - if (!PyLong_Check(value)) - return NULL; + if (!PyInt_Check(value)) + return NULL; /* FIXME Raise error */ - i = PyLong_AsUnsignedLong(value); + i = PyInt_AsSize_t(value); return diff_get_patch_byindex(self->diff, i); } diff --git a/src/object.c b/src/object.c index 372ed3d..0a55782 100644 --- a/src/object.c +++ b/src/object.c @@ -97,7 +97,7 @@ PyDoc_STRVAR(Object_type__doc__, PyObject * 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."); @@ -143,14 +143,15 @@ PyDoc_STRVAR(Object_peel__doc__, PyObject * Object_peel(Object *self, PyObject *py_type) { - int type = -1, err; + int err; + git_otype otype; git_object *peeled; - type = py_object_to_object_type(py_type); - if (type == -1) + otype = py_object_to_otype(py_type); + if (otype == GIT_OBJ_BAD) return NULL; - err = git_object_peel(&peeled, self->obj, (git_otype)type); + err = git_object_peel(&peeled, self->obj, otype); if (err < 0) return Error_set(err); diff --git a/src/options.c b/src/options.c index cf25ef7..92571b2 100644 --- a/src/options.c +++ b/src/options.c @@ -65,11 +65,11 @@ option(PyObject *self, PyObject *args) if (!py_option) return NULL; - if (!PyLong_Check(py_option)) + if (!PyInt_Check(py_option)) return Error_type_error( "option should be an integer, got %.200s", py_option); - option = PyLong_AsLong(py_option); + option = PyInt_AsLong(py_option); switch (option) { case GIT_OPT_GET_SEARCH_PATH: @@ -80,11 +80,11 @@ option(PyObject *self, PyObject *args) if (!py_level) return NULL; - if (!PyLong_Check(py_level)) + if (!PyInt_Check(py_level)) return Error_type_error( "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: @@ -101,7 +101,7 @@ option(PyObject *self, PyObject *args) if (!py_path) return NULL; - if (!PyLong_Check(py_level)) + if (!PyInt_Check(py_level)) return Error_type_error( "level should be an integer, got %.200s", py_level); @@ -110,7 +110,7 @@ option(PyObject *self, PyObject *args) return NULL; 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); if (err < 0) @@ -127,7 +127,7 @@ option(PyObject *self, PyObject *args) if (error < 0) return Error_set(error); - return PyLong_FromSize_t(size); + return PyInt_FromSize_t(size); } case GIT_OPT_SET_MWINDOW_SIZE: @@ -139,11 +139,11 @@ option(PyObject *self, PyObject *args) if (!py_size) return NULL; - if (!PyLong_Check(py_size)) + if (!PyInt_Check(py_size)) return Error_type_error( "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); if (error < 0) return Error_set(error); @@ -159,7 +159,7 @@ option(PyObject *self, PyObject *args) if (error < 0) return Error_set(error); - return PyLong_FromSize_t(limit); + return PyInt_FromSize_t(limit); } case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT: @@ -171,11 +171,11 @@ option(PyObject *self, PyObject *args) if (!py_limit) return NULL; - if (!PyLong_Check(py_limit)) + if (!PyInt_Check(py_limit)) return Error_type_error( "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); if (error < 0) return Error_set(error); @@ -197,12 +197,12 @@ option(PyObject *self, PyObject *args) if (!py_limit) return NULL; - if (!PyLong_Check(py_limit)) + if (!PyInt_Check(py_limit)) return Error_type_error( "limit should be an integer, got %.200s", py_limit); - object_type = PyLong_AsLong(py_object_type); - limit = PyLong_AsSize_t(py_limit); + object_type = PyInt_AsLong(py_object_type); + limit = PyInt_AsSize_t(py_limit); error = git_libgit2_opts( GIT_OPT_SET_CACHE_OBJECT_LIMIT, object_type, limit); @@ -221,11 +221,11 @@ option(PyObject *self, PyObject *args) if (!py_max_size) return NULL; - if (!PyLong_Check(py_max_size)) + if (!PyInt_Check(py_max_size)) return Error_type_error( "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); if (error < 0) return Error_set(error); @@ -240,11 +240,11 @@ option(PyObject *self, PyObject *args) py_flag = PyTuple_GetItem(args, 1); - if (!PyLong_Check(py_flag)) + if (!PyInt_Check(py_flag)) return Error_type_error( "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); if (error < 0) return Error_set(error); @@ -262,8 +262,8 @@ option(PyObject *self, PyObject *args) if (error < 0) return Error_set(error); - PyTuple_SetItem(tup, 0, PyLong_FromLong(current)); - PyTuple_SetItem(tup, 1, PyLong_FromLong(allowed)); + PyTuple_SetItem(tup, 0, PyInt_FromLong(current)); + PyTuple_SetItem(tup, 1, PyInt_FromLong(allowed)); return tup; } diff --git a/src/reference.c b/src/reference.c index 4cdf757..395b241 100644 --- a/src/reference.c +++ b/src/reference.c @@ -325,7 +325,7 @@ Reference_type__get__(Reference *self) CHECK_REFERENCE(self); 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 * Reference_peel(Reference *self, PyObject *args) { - int err, type; + int err; + git_otype otype; git_object *obj; PyObject *py_type = Py_None; @@ -388,11 +389,11 @@ Reference_peel(Reference *self, PyObject *args) if (!PyArg_ParseTuple(args, "|O", &py_type)) return NULL; - type = py_object_to_object_type(py_type); - if (type == -1) + otype = py_object_to_otype(py_type); + if (otype == GIT_OBJ_BAD) return NULL; - err = git_reference_peel(&obj, self->reference, type); + err = git_reference_peel(&obj, self->reference, otype); if (err < 0) return Error_set(err); diff --git a/src/repository.c b/src/repository.c index 383a2ad..23c0fa4 100644 --- a/src/repository.c +++ b/src/repository.c @@ -1564,7 +1564,7 @@ Repository_status(Repository *self) path = entry->head_to_index->old_file.path; else 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); Py_CLEAR(status); @@ -1606,7 +1606,7 @@ Repository_status_file(Repository *self, PyObject *value) free(path); return err_obj; } - return PyLong_FromLong(status); + return PyInt_FromLong(status); } diff --git a/src/signature.c b/src/signature.c index 536a9fc..aea1f2d 100644 --- a/src/signature.c +++ b/src/signature.c @@ -158,7 +158,7 @@ PyDoc_STRVAR(Signature_time__doc__, "Unix time."); PyObject * 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 * Signature_offset__get__(Signature *self) { - return PyLong_FromLong(self->signature->when.offset); + return PyInt_FromLong(self->signature->when.offset); } PyGetSetDef Signature_getseters[] = { diff --git a/src/tree.c b/src/tree.c index c5a0bac..56222af 100644 --- a/src/tree.c +++ b/src/tree.c @@ -54,7 +54,7 @@ PyDoc_STRVAR(TreeEntry_filemode__doc__, "Filemode."); PyObject * 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; long slen; - index = PyLong_AsLong(py_index); + index = PyInt_AsLong(py_index); if (PyErr_Occurred()) return -1; @@ -359,7 +359,7 @@ Tree_getitem(Tree *self, PyObject *value) int err; /* Case 1: integer */ - if (PyLong_Check(value)) + if (PyInt_Check(value)) return Tree_getitem_by_index(self, value); /* Case 2: byte or text string */ diff --git a/src/utils.c b/src/utils.c index 2cf6aaa..ac56404 100644 --- a/src/utils.c +++ b/src/utils.c @@ -160,40 +160,39 @@ on_error: static git_otype 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) { - type = GIT_OBJ_COMMIT; - } 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; + PyErr_SetString(PyExc_ValueError, "invalid target type"); + return GIT_OBJ_BAD; /* -1 */ } -int -py_object_to_object_type(PyObject *py_type) +git_otype +py_object_to_otype(PyObject *py_type) { - int type = -1; + long value; if (py_type == Py_None) return GIT_OBJ_ANY; - if (PyLong_Check(py_type)) { - type = PyLong_AsLong(py_type); - if (type == -1 && PyErr_Occurred()) - return -1; - } else if (PyType_Check(py_type)) { - type = py_type_to_git_type((PyTypeObject *) py_type); + if (PyInt_Check(py_type)) { + value = PyInt_AsLong(py_type); + if (value == -1 && PyErr_Occurred()) + return GIT_OBJ_BAD; + + /* TODO Check whether the value is a valid value */ + return (git_otype)value; } - if (type == -1) { - PyErr_SetString(PyExc_ValueError, "invalid target type"); - } + if (PyType_Check(py_type)) + return py_type_to_git_type((PyTypeObject *) py_type); - return type; + PyErr_SetString(PyExc_ValueError, "invalid target type"); + return GIT_OBJ_BAD; /* -1 */ } diff --git a/src/utils.h b/src/utils.h index 25a598b..18e29d1 100644 --- a/src/utils.h +++ b/src/utils.h @@ -40,13 +40,17 @@ #endif /* 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 - #define PyLong_FromSize_t PyInt_FromSize_t - #define PyLong_AsSize_t (size_t)PyInt_AsSsize_t - #define PyLong_AsLong PyInt_AsLong - #undef PyLong_Check - #define PyLong_Check PyInt_Check - #define PyLong_FromLong PyInt_FromLong + #define PyInt_AsSize_t (size_t)PyInt_AsLong + #define PyInt_FromLongLong PyInt_FromLong #define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_AsString PyString_AsString #define PyBytes_AsStringAndSize PyString_AsStringAndSize @@ -57,19 +61,18 @@ #define to_path(x) to_bytes(x) #define to_encoding(x) to_bytes(x) #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_encoding(x) PyUnicode_DecodeASCII(x, strlen(x), "strict") #define PyString_FromFormat(s, ...) PyUnicode_FromFormat(s, __VA_ARGS__) #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)\ 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); 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) \ py_str_to_c_str(py_path, Py_FileSystemDefaultEncoding) diff --git a/src/walker.c b/src/walker.c index 325b72f..ebdb86d 100644 --- a/src/walker.c +++ b/src/walker.c @@ -98,13 +98,13 @@ PyDoc_STRVAR(Walker_sort__doc__, PyObject * 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()) return NULL; - git_revwalk_sorting(self->walk, sort_mode); + git_revwalk_sorting(self->walk, (unsigned int)sort_mode); Py_RETURN_NONE; }