Options, improve error messages

This commit is contained in:
J. David Ibáñez 2017-04-08 11:16:15 +02:00
parent 9335819795
commit 11ff7a99eb
4 changed files with 30 additions and 41 deletions

View File

@ -126,3 +126,10 @@ Error_set_oid(int err, const git_oid *oid, size_t len)
hex[len] = '\0';
return Error_set_str(err, hex);
}
PyObject *
Error_type_error(const char *format, PyObject *value)
{
PyErr_Format(PyExc_TypeError, format, Py_TYPE(value)->tp_name);
return NULL;
}

View File

@ -37,5 +37,6 @@ PyObject* Error_set(int err);
PyObject* Error_set_exc(PyObject* exception);
PyObject* Error_set_str(int err, const char *str);
PyObject* Error_set_oid(int err, const git_oid *oid, size_t len);
PyObject* Error_type_error(const char *format, PyObject *value);
#endif

View File

@ -66,7 +66,7 @@ option(PyObject *self, PyObject *args)
return NULL;
if (!PyLong_Check(py_option))
goto on_non_integer;
return Error_type_error("option should be an integer, got %.200s", py_option);
option = PyLong_AsLong(py_option);
@ -80,10 +80,9 @@ option(PyObject *self, PyObject *args)
return NULL;
if (!PyLong_Check(py_level))
goto on_non_integer;
return Error_type_error("level should be an integer, got %.200s", py_level);
return get_search_path(PyLong_AsLong(py_level));
break;
}
case GIT_OPT_SET_SEARCH_PATH:
@ -101,7 +100,7 @@ option(PyObject *self, PyObject *args)
return NULL;
if (!PyLong_Check(py_level))
goto on_non_integer;
return Error_type_error("level should be an integer, got %.200s", py_level);
path = py_str_borrow_c_str(&tpath, py_path, NULL);
if (!path)
@ -116,7 +115,6 @@ option(PyObject *self, PyObject *args)
}
Py_RETURN_NONE;
break;
}
case GIT_OPT_GET_MWINDOW_SIZE:
@ -130,8 +128,6 @@ option(PyObject *self, PyObject *args)
}
return PyLong_FromSize_t(size);
break;
}
case GIT_OPT_SET_MWINDOW_SIZE:
@ -144,7 +140,7 @@ option(PyObject *self, PyObject *args)
return NULL;
if (!PyLong_Check(py_size))
goto on_non_integer;
return Error_type_error("size should be an integer, got %.200s", py_size);
size = PyLong_AsSize_t(py_size);
error = git_libgit2_opts(GIT_OPT_SET_MWINDOW_SIZE, size);
@ -154,7 +150,6 @@ option(PyObject *self, PyObject *args)
}
Py_RETURN_NONE;
break;
}
case GIT_OPT_GET_MWINDOW_MAPPED_LIMIT:
@ -168,8 +163,6 @@ option(PyObject *self, PyObject *args)
}
return PyLong_FromSize_t(limit);
break;
}
case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT:
@ -182,7 +175,7 @@ option(PyObject *self, PyObject *args)
return NULL;
if (!PyLong_Check(py_limit))
goto on_non_integer;
return Error_type_error("limit should be an integer, got %.200s", py_limit);
limit = PyLong_AsSize_t(py_limit);
error = git_libgit2_opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, limit);
@ -192,7 +185,6 @@ option(PyObject *self, PyObject *args)
}
Py_RETURN_NONE;
break;
}
case GIT_OPT_SET_CACHE_OBJECT_LIMIT:
@ -210,7 +202,7 @@ option(PyObject *self, PyObject *args)
return NULL;
if (!PyLong_Check(py_limit))
goto on_non_integer;
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);
@ -222,30 +214,28 @@ option(PyObject *self, PyObject *args)
}
Py_RETURN_NONE;
break;
}
case GIT_OPT_SET_CACHE_MAX_SIZE:
{
size_t max_size;
PyObject *py_max_size;
size_t max_size;
PyObject *py_max_size;
py_max_size = PyTuple_GetItem(args, 1);
if (!py_max_size)
return NULL;
py_max_size = PyTuple_GetItem(args, 1);
if (!py_max_size)
return NULL;
if (!PyLong_Check(py_max_size))
goto on_non_integer;
if (!PyLong_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);
error = git_libgit2_opts(GIT_OPT_SET_CACHE_MAX_SIZE, max_size);
if (error < 0) {
Error_set(error);
return NULL;
}
max_size = PyLong_AsSize_t(py_max_size);
error = git_libgit2_opts(GIT_OPT_SET_CACHE_MAX_SIZE, max_size);
if (error < 0) {
Error_set(error);
return NULL;
}
Py_RETURN_NONE;
break;
Py_RETURN_NONE;
}
case GIT_OPT_ENABLE_CACHING:
@ -256,7 +246,7 @@ option(PyObject *self, PyObject *args)
py_flag = PyTuple_GetItem(args, 1);
if (!PyLong_Check(py_flag))
goto on_non_integer;
return Error_type_error("flag should be an integer, got %.200s", py_flag);
flag = PyLong_AsSize_t(py_flag);
error = git_libgit2_opts(GIT_OPT_ENABLE_CACHING, flag);
@ -266,7 +256,6 @@ option(PyObject *self, PyObject *args)
}
Py_RETURN_NONE;
break;
}
case GIT_OPT_GET_CACHED_MEMORY:
@ -284,16 +273,10 @@ option(PyObject *self, PyObject *args)
PyTuple_SetItem(tup, 1, PyLong_FromLong(allowed));
return tup;
break;
}
}
PyErr_SetString(PyExc_ValueError, "unknown/unsupported option value");
return NULL;
on_non_integer:
PyErr_SetString(PyExc_TypeError, "option is not an integer");
return NULL;
}

View File

@ -83,9 +83,7 @@ py_str_borrow_c_str(PyObject **tvalue, PyObject *value, const char *encoding)
}
/* Type error */
PyErr_Format(PyExc_TypeError, "unexpected %.200s",
Py_TYPE(value)->tp_name);
return NULL;
return Error_type_error("unexpected %.200s", value);
}
/**