bookmarks: make writing files out avoid ambiguity of file stat
Cached attribute repo._bookmarks uses stat of '.hg/bookmarks' and
'.hg/bookmarks.current' files to examine validity of cached
contents. If writing these files out keeps ctime, mtime and size of
them, change is overlooked, and old contents cached before change
isn't invalidated as expected.
To avoid ambiguity of file stat, this patch writes '.hg/bookmarks' and
'.hg/bookmarks.current' files out with checkambig=True.
This patch is a part of "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
--- a/mercurial/bookmarks.py Fri Jun 03 00:44:20 2016 +0900
+++ b/mercurial/bookmarks.py Fri Jun 03 00:44:20 2016 +0900
@@ -117,7 +117,8 @@
rbm._writeactive()
with repo.wlock():
- file_ = repo.vfs('bookmarks', 'w', atomictemp=True)
+ file_ = repo.vfs('bookmarks', 'w', atomictemp=True,
+ checkambig=True)
try:
self._write(file_)
except: # re-raises
@@ -131,7 +132,8 @@
return
with self._repo.wlock():
if self._active is not None:
- f = self._repo.vfs('bookmarks.current', 'w', atomictemp=True)
+ f = self._repo.vfs('bookmarks.current', 'w', atomictemp=True,
+ checkambig=True)
try:
f.write(encoding.fromlocal(self._active))
finally: