# HG changeset patch # User Adrian Buehlmann # Date 2009-08-21 12:17:23 # Node ID 1a7bcf58ba56a9043e63d0c637647666cb23a48d # Parent 68f3937888951aad62f01a513c67ee1a176afbda dirstate.write: don't ignore stat data if mtime is in the future (issue1790) This change narrows the race guard that was introduced by af3f26b6bba4 ("dirstate: ignore stat data for files that were updated too recently") to not discard the _map entry's stat data if the mtime is in the future. Without this change, status locks files having odd mtimes in the future into the 'unset' state, causing needless file compares later (admittedly harmless), but also inflicting highly irritating sticky effects on tools/plugins that directly read .hg/dirstate (e.g. TortoiseHg). diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -377,9 +377,9 @@ class dirstate(object): gran = int(self._ui.config('dirstate', 'granularity', 1)) except ValueError: gran = 1 - limit = sys.maxint if gran > 0: - limit = util.fstat(st).st_mtime - gran + hlimit = util.fstat(st).st_mtime + llimit = hlimit - gran cs = cStringIO.StringIO() copymap = self._copymap @@ -389,7 +389,8 @@ class dirstate(object): for f, e in self._map.iteritems(): if f in copymap: f = "%s\0%s" % (f, copymap[f]) - if e[3] > limit and e[0] == 'n': + if gran > 0 and e[0] == 'n' and llimit < e[3] <= hlimit: + # file was updated too recently, ignore stat data e = (e[0], 0, -1, -1) e = pack(_format, e[0], e[1], e[2], e[3], len(f)) write(e) diff --git a/tests/test-dirstate-future b/tests/test-dirstate-future new file mode 100755 --- /dev/null +++ b/tests/test-dirstate-future @@ -0,0 +1,13 @@ +#!/bin/sh + +hg init +echo a > a +hg add +hg ci -m1 + +# set mtime of a into the future +touch -t 202101011200 a + +# status must not set a's entry to unset (issue1790) +hg status +hg debugstate diff --git a/tests/test-dirstate-future.out b/tests/test-dirstate-future.out new file mode 100644 --- /dev/null +++ b/tests/test-dirstate-future.out @@ -0,0 +1,2 @@ +adding a +n 644 2 2021-01-01 12:00:00 a