# HG changeset patch # User FUJIWARA Katsunori # Date 1474548720 -32400 # Node ID 599912a62ff65005b8b6c8e8c44a67855f0e0bbd # Parent e38d85be978f28555b4f566e9a2c1f3b23494135 transaction: open a file with checkambig=True to avoid file stat ambiguity Before this patch, if steps below occurs at "the same time in sec", all of mtime, ctime and size are same between (1) and (3). 1. append data to revlog-style file (and close transaction) 2. discard appended data by truncation of rollback 3. append same size but different data to revlog-style file again Therefore, cache validation doesn't work after (3) as expected. To avoid file stat ambiguity around truncation, this patch opens a file with checkambig=True. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan diff -r e38d85be978f -r 599912a62ff6 mercurial/transaction.py --- a/mercurial/transaction.py Thu Sep 22 21:52:00 2016 +0900 +++ b/mercurial/transaction.py Thu Sep 22 21:52:00 2016 +0900 @@ -48,7 +48,7 @@ for f, o, _ignore in entries: if o or not unlink: try: - fp = opener(f, 'a') + fp = opener(f, 'a', checkambig=True) fp.truncate(o) fp.close() except IOError: