dirstate: make restoring from backup avoid ambiguity of file stat
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Mon, 13 Jun 2016 05:11:56 +0900
changeset 29351 bebe7d1c38c8
parent 29350 35861cc1076e
child 29352 37c7f9fb7040
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
mercurial/dirstate.py
--- 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'''