D2939: fsmonitor: layer on another hack in bser.c for os.stat() compat (issue5811)

spectral (Kyle Lippincott) phabricator at mercurial-scm.org
Mon Mar 26 14:42:17 EDT 2018


spectral added inline comments.

INLINE COMMENTS

> bser.c:106
> +  if (i == 8 && PySequence_Size(obj->values) < 7) {
> +    // Hack alert: Python 3 removed support for os.stat().st_mtime
> +    // being an integer.Instead, if you need an integer, you have to

My system pythons (2.7.13 and 3.5.3) have the following behaviors:

≻ python -c 'from __future__ import print_function; import os, sys, stat; print(sys.version); s=os.stat("."); print(s.st_mtime, s[stat.ST_MTIME], type(s.st_mtime), type(s[stat.ST_MTIME]), stat.ST_MTIME)'
2.7.13 (default, Nov 24 2017, 17:33:09) 
[GCC 6.3.0 20170516]
1522089418.2 1522089418 <type 'float'> <type 'int'> 8

≻ python3 -c 'from __future__ import print_function; import os, sys, stat; print(sys.version); s=os.stat("."); print(s.st_mtime, s[stat.ST_MTIME], type(s.st_mtime), type(s[stat.ST_MTIME]), stat.ST_MTIME)' 
3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170118]
1522089422.693618 1522089422 <class 'float'> <class 'int'> 8

Seems like we could just use int(os.stat().st_mtime) instead of os.stat()[stat.ST_MTIME]  (if we really need an int instead of a float), and avoid most of the issues with attempting to access a stat_result that isn't the official one (like the one we create in cext/osutil.c, or I know other extensions create...)

I have no idea if that would solve this actual problem though, bser might be a separate problem from what I'm thinking of.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2939

To: durin42, #hg-reviewers, indygreg
Cc: spectral, indygreg, mercurial-devel


More information about the Mercurial-devel mailing list