# HG changeset patch # User Pierre-Yves David # Date 1637726428 -3600 # Node ID ca42667c8d26311970d8f429bd88d76649ba8b1a # Parent be2317167a9b11a1508127cb1e89f1c325dfd260 status: keep second-ambiguous mtimes during fixup Now that we support the feature, we can keep "second ambiguous" mtime during the fixup phase. These are the mtime that would be ambiguous if we did not had sub-second précions. See the v2 format documentation for details. Differential Revision: https://phab.mercurial-scm.org/D11847 diff -r be2317167a9b -r ca42667c8d26 mercurial/dirstateutils/timestamp.py --- a/mercurial/dirstateutils/timestamp.py Wed Nov 24 04:43:57 2021 +0100 +++ b/mercurial/dirstateutils/timestamp.py Wed Nov 24 05:00:28 2021 +0100 @@ -102,16 +102,23 @@ """ file_mtime = mtime_of(stat_result) file_second = file_mtime[0] + file_ns = file_mtime[1] boundary_second = present_mtime[0] + boundary_ns = present_mtime[1] # If the mtime of the ambiguous file is younger (or equal) to the starting # point of the `status` walk, we cannot garantee that another, racy, write # will not happen right after with the same mtime and we cannot cache the # information. # - # However is the mtime is far away in the future, this is likely some + # However if the mtime is far away in the future, this is likely some # mismatch between the current clock and previous file system operation. So # mtime more than one days in the future are considered fine. - if boundary_second <= file_second < (3600 * 24 + boundary_second): + if boundary_second == file_second: + if file_ns and boundary_ns: + if file_ns < boundary_ns: + return timestamp((file_second, file_ns, True)) + return None + elif boundary_second < file_second < (3600 * 24 + boundary_second): return None else: return file_mtime