Options, improve error messages
This commit is contained in:
@@ -126,3 +126,10 @@ Error_set_oid(int err, const git_oid *oid, size_t len)
|
|||||||
hex[len] = '\0';
|
hex[len] = '\0';
|
||||||
return Error_set_str(err, hex);
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -37,5 +37,6 @@ PyObject* Error_set(int err);
|
|||||||
PyObject* Error_set_exc(PyObject* exception);
|
PyObject* Error_set_exc(PyObject* exception);
|
||||||
PyObject* Error_set_str(int err, const char *str);
|
PyObject* Error_set_str(int err, const char *str);
|
||||||
PyObject* Error_set_oid(int err, const git_oid *oid, size_t len);
|
PyObject* Error_set_oid(int err, const git_oid *oid, size_t len);
|
||||||
|
PyObject* Error_type_error(const char *format, PyObject *value);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ option(PyObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!PyLong_Check(py_option))
|
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);
|
option = PyLong_AsLong(py_option);
|
||||||
|
|
||||||
@@ -80,10 +80,9 @@ option(PyObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!PyLong_Check(py_level))
|
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));
|
return get_search_path(PyLong_AsLong(py_level));
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_SET_SEARCH_PATH:
|
case GIT_OPT_SET_SEARCH_PATH:
|
||||||
@@ -101,7 +100,7 @@ option(PyObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!PyLong_Check(py_level))
|
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);
|
path = py_str_borrow_c_str(&tpath, py_path, NULL);
|
||||||
if (!path)
|
if (!path)
|
||||||
@@ -116,7 +115,6 @@ option(PyObject *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_GET_MWINDOW_SIZE:
|
case GIT_OPT_GET_MWINDOW_SIZE:
|
||||||
@@ -130,8 +128,6 @@ option(PyObject *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return PyLong_FromSize_t(size);
|
return PyLong_FromSize_t(size);
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_SET_MWINDOW_SIZE:
|
case GIT_OPT_SET_MWINDOW_SIZE:
|
||||||
@@ -144,7 +140,7 @@ option(PyObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!PyLong_Check(py_size))
|
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);
|
size = PyLong_AsSize_t(py_size);
|
||||||
error = git_libgit2_opts(GIT_OPT_SET_MWINDOW_SIZE, size);
|
error = git_libgit2_opts(GIT_OPT_SET_MWINDOW_SIZE, size);
|
||||||
@@ -154,7 +150,6 @@ option(PyObject *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_GET_MWINDOW_MAPPED_LIMIT:
|
case GIT_OPT_GET_MWINDOW_MAPPED_LIMIT:
|
||||||
@@ -168,8 +163,6 @@ option(PyObject *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return PyLong_FromSize_t(limit);
|
return PyLong_FromSize_t(limit);
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT:
|
case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT:
|
||||||
@@ -182,7 +175,7 @@ option(PyObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!PyLong_Check(py_limit))
|
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);
|
limit = PyLong_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);
|
||||||
@@ -192,7 +185,6 @@ option(PyObject *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_SET_CACHE_OBJECT_LIMIT:
|
case GIT_OPT_SET_CACHE_OBJECT_LIMIT:
|
||||||
@@ -210,7 +202,7 @@ option(PyObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!PyLong_Check(py_limit))
|
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);
|
object_type = PyLong_AsLong(py_object_type);
|
||||||
limit = PyLong_AsSize_t(py_limit);
|
limit = PyLong_AsSize_t(py_limit);
|
||||||
@@ -222,7 +214,6 @@ option(PyObject *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_SET_CACHE_MAX_SIZE:
|
case GIT_OPT_SET_CACHE_MAX_SIZE:
|
||||||
@@ -235,7 +226,7 @@ option(PyObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!PyLong_Check(py_max_size))
|
if (!PyLong_Check(py_max_size))
|
||||||
goto on_non_integer;
|
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 = PyLong_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);
|
||||||
@@ -245,7 +236,6 @@ option(PyObject *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_ENABLE_CACHING:
|
case GIT_OPT_ENABLE_CACHING:
|
||||||
@@ -256,7 +246,7 @@ option(PyObject *self, PyObject *args)
|
|||||||
py_flag = PyTuple_GetItem(args, 1);
|
py_flag = PyTuple_GetItem(args, 1);
|
||||||
|
|
||||||
if (!PyLong_Check(py_flag))
|
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);
|
flag = PyLong_AsSize_t(py_flag);
|
||||||
error = git_libgit2_opts(GIT_OPT_ENABLE_CACHING, flag);
|
error = git_libgit2_opts(GIT_OPT_ENABLE_CACHING, flag);
|
||||||
@@ -266,7 +256,6 @@ option(PyObject *self, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case GIT_OPT_GET_CACHED_MEMORY:
|
case GIT_OPT_GET_CACHED_MEMORY:
|
||||||
@@ -284,16 +273,10 @@ option(PyObject *self, PyObject *args)
|
|||||||
PyTuple_SetItem(tup, 1, PyLong_FromLong(allowed));
|
PyTuple_SetItem(tup, 1, PyLong_FromLong(allowed));
|
||||||
|
|
||||||
return tup;
|
return tup;
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PyErr_SetString(PyExc_ValueError, "unknown/unsupported option value");
|
PyErr_SetString(PyExc_ValueError, "unknown/unsupported option value");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
on_non_integer:
|
|
||||||
PyErr_SetString(PyExc_TypeError, "option is not an integer");
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,9 +83,7 @@ py_str_borrow_c_str(PyObject **tvalue, PyObject *value, const char *encoding)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Type error */
|
/* Type error */
|
||||||
PyErr_Format(PyExc_TypeError, "unexpected %.200s",
|
return Error_type_error("unexpected %.200s", value);
|
||||||
Py_TYPE(value)->tp_name);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user