# HG changeset patch # User Matt Mackall # Date 1447960884 21600 # Node ID 341cb90ffd1821d40da39af4dd1eff7d2c0325c8 # Parent 4223fc58f952cd93592e3cd7302adb11a9136933 util: disable floating point stat times (issue4836) Alternate fix for this issue which avoids putting extra function calls and exception handling in the fast path. For almost all purposes, integer timestamps are preferable to Mercurial. It stores integer timestamps in the dirstate and would thus like to avoid doing any float/int comparisons or conversions. We will continue to have to deal with 1-second granularity on filesystems for quite some time, so this won't significantly hinder our capabilities. This has some impact on our file cache validation code in that it lowers timestamp resolution. But as we still have to deal with low-resolution filesystems, we're not relying on this anyway. An alternate approach is to use stat[ST_MTIME], which is guaranteed to be an integer. But since this support isn't already in our extension, we can't depend on it being available without adding a hard Python->C API dependency that's painful for people like yours truly who have bisect regularly and people without compilers. diff -r 4223fc58f952 -r 341cb90ffd18 mercurial/util.py --- a/mercurial/util.py Wed Nov 18 15:58:06 2015 -0800 +++ b/mercurial/util.py Thu Nov 19 13:21:24 2015 -0600 @@ -88,6 +88,11 @@ _notset = object() +# disable Python's problematic floating point timestamps (issue4836) +# (Python hypocritically says you shouldn't change this behavior in +# libraries, and sure enough Mercurial is not a library.) +os.stat_float_times(False) + def safehasattr(thing, attr): return getattr(thing, attr, _notset) is not _notset