Submitter | phabricator |
---|---|
Date | March 5, 2018, 9:08 p.m. |
Message ID | <differential-rev-PHID-DREV-6nhihb3m2j4on4wf6lww-req@phab.mercurial-scm.org> |
Download | mbox | patch |
Permalink | /patch/29047/ |
State | Superseded |
Headers | show |
Comments
indygreg requested changes to this revision. indygreg added inline comments. This revision now requires changes to proceed. INLINE COMMENTS > osutil.c:130 > + if (index != 8) { > + PyErr_Format(PyExc_TypeError, "osutil.stat objects only suport" > + " stat.ST_MTIME in __getitem__"); I think this should be `PyExc_IndexError`. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D2695 To: durin42, #hg-reviewers, indygreg Cc: indygreg, mercurial-devel
mharbison72 added inline comments. INLINE COMMENTS > osutil.c:130 > + if (index != 8) { > + PyErr_Format(PyExc_TypeError, "osutil.stat objects only suport" > + " stat.ST_MTIME in __getitem__"); s/suport/support/ REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D2695 To: durin42, #hg-reviewers, indygreg Cc: mharbison72, indygreg, mercurial-devel
Patch
diff --git a/mercurial/policy.py b/mercurial/policy.py --- a/mercurial/policy.py +++ b/mercurial/policy.py @@ -69,7 +69,7 @@ (r'cext', r'bdiff'): 3, (r'cext', r'diffhelpers'): 1, (r'cext', r'mpatch'): 1, - (r'cext', r'osutil'): 3, + (r'cext', r'osutil'): 4, (r'cext', r'parsers'): 4, } diff --git a/mercurial/cext/osutil.c b/mercurial/cext/osutil.c --- a/mercurial/cext/osutil.c +++ b/mercurial/cext/osutil.c @@ -121,6 +121,25 @@ o->ob_type->tp_free(o); } +static PyObject *listdir_stat_getitem(PyObject *self, PyObject *key) { + long index = PyInt_AsLong(key); + if (index == -1 && PyErr_Occurred()) { + return NULL; + } + if (index != 8) { + PyErr_Format(PyExc_TypeError, "osutil.stat objects only suport" + " 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 +153,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 +1371,7 @@ {NULL, NULL} }; -static const int version = 3; +static const int version = 4; #ifdef IS_PY3K static struct PyModuleDef osutil_module = {