Mercurial > hg
changeset 36780:f3c314020beb
osutil: implement minimal __getitem__ compatibility on our custom listdir type
We previously declined to do this, but the removal of the deprecated
os.stat_float_times() method in Python 3.7 forces our hand.
Differential Revision: https://phab.mercurial-scm.org/D2695
author | Augie Fackler <augie@google.com> |
---|---|
date | Mon, 05 Mar 2018 15:07:32 -0500 |
parents | bf9a04d78084 |
children | ffa3026d4196 |
files | mercurial/cext/osutil.c mercurial/policy.py |
diffstat | 2 files changed, 24 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/cext/osutil.c Sun Mar 04 21:14:24 2018 -0500 +++ b/mercurial/cext/osutil.c Mon Mar 05 15:07:32 2018 -0500 @@ -121,6 +121,27 @@ o->ob_type->tp_free(o); } +static PyObject *listdir_stat_getitem(PyObject *self, PyObject *key) +{ + long index = PyLong_AsLong(key); + if (index == -1 && PyErr_Occurred()) { + return NULL; + } + if (index != 8) { + PyErr_Format(PyExc_IndexError, "osutil.stat objects only " + "support stat.ST_MTIME in " + "__getitem__"); + return NULL; + } + return listdir_stat_st_mtime(self, NULL); +} + +static PyMappingMethods listdir_stat_type_mapping_methods = { + (lenfunc)NULL, /* mp_length */ + (binaryfunc)listdir_stat_getitem, /* mp_subscript */ + (objobjargproc)NULL, /* mp_ass_subscript */ +}; + static PyTypeObject listdir_stat_type = { PyVarObject_HEAD_INIT(NULL, 0) /* header */ "osutil.stat", /*tp_name*/ @@ -134,7 +155,7 @@ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ + &listdir_stat_type_mapping_methods, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ @@ -1352,7 +1373,7 @@ {NULL, NULL} }; -static const int version = 3; +static const int version = 4; #ifdef IS_PY3K static struct PyModuleDef osutil_module = {