dirstate: make restoring from backup avoid ambiguity of file stat
File .hg/dirstate is restored by renaming from backup in failure
inside scopes below. If renaming keeps ctime, mtime and size of a
file, restoring is overlooked, and old contents cached before
restoring isn't invalidated as expected.
- dirstateguard scope (from '.hg/dirstate.SUFFIX')
- transaction scope (from '.hg/journal.dirstate')
To avoid ambiguity of file stat at restoring, this patch invokes
vfs.rename() with checkambig=True.
This patch is a part of "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
--- a/mercurial/dirstate.py Sat Jun 11 20:59:49 2016 +0200
+++ b/mercurial/dirstate.py Mon Jun 13 05:11:56 2016 +0900
@@ -1243,7 +1243,8 @@
self.invalidate()
filename = self._actualfilename(tr)
# using self._filename to avoid having "pending" in the backup filename
- self._opener.rename(prefix + self._filename + suffix, filename)
+ self._opener.rename(prefix + self._filename + suffix, filename,
+ checkambig=True)
def clearbackup(self, tr, suffix='', prefix=''):
'''Clear backup file with suffix'''