osutil: export a "getfstype" method

This patch exports the "getfstype" method. So we can use it to enable
hardlinks for known safe filesystems.

The patch was tested manually via debugshell on a Linux system.
"mercurial.osutil.getfstype" works as expected. It's hard to mount
filesystem on user-space easily. I will add a test for real hardlink support
to indirectly test this patch, after turning on real hardlinks support for
certain whitelisted filesystems.
This commit is contained in:
Jun Wu 2017-03-20 16:34:12 -07:00
parent 57405f31c1
commit ef355a6e06

View File

@ -1079,6 +1079,20 @@ const char *getfstype(const char *path) {
/* End of Linux filesystems */
return NULL;
}
static PyObject *pygetfstype(PyObject *self, PyObject *args)
{
const char *path = NULL;
if (!PyArg_ParseTuple(args, "s", &path))
return NULL;
const char *type = getfstype(path);
if (type == NULL)
Py_RETURN_NONE;
PyObject *result = Py_BuildValue("s", type);
return result;
}
#endif /* def HAVE_STATFS */
#endif /* ndef _WIN32 */
@ -1257,6 +1271,10 @@ static PyMethodDef methods[] = {
{"setprocname", (PyCFunction)setprocname, METH_VARARGS,
"set process title (best-effort)\n"},
#endif
#ifdef HAVE_STATFS
{"getfstype", (PyCFunction)pygetfstype, METH_VARARGS,
"get filesystem type (best-effort)\n"},
#endif
#endif /* ndef _WIN32 */
#ifdef __APPLE__
{