Thu, 22 Sep 2016 21:51:58 +0900 revlog: specify checkambig at writing to avoid file stat ambiguity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:58 +0900] rev 29997
revlog: specify checkambig at writing to avoid file stat ambiguity This allows revlog-style files to be written out with checkambig=True easily. Because avoiding file stat ambiguity is needed only for filecache-ed manifest and changelog, this patch does: - use False for default value of checkambig - focus only on writing changes of index file out This patch also adds optional argument checkambig to _divert/_delay for changelog, to safely accept checkambig specified in revlog layer. But this argument can be fully ignored, because: - changes are written into other than index file, if name != target - changes are never written into index file, otherwise (into pending file by _divert, or into in-memory buffer by _delay) This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Thu, 22 Sep 2016 21:51:57 +0900 vfs: use checkambigatclosing in checkambig=True but atomictemp=False case
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:57 +0900] rev 29996
vfs: use checkambigatclosing in checkambig=True but atomictemp=False case In Mercurial source tree, opening a file in "a"/"a+" mode like below doesn't specify atomictemp=True for vfs, and this avoids file stat ambiguity check by atomictempfile. - writing changes out in revlog layer uses "a+" mode - truncation in repair.strip() uses "a" mode - truncation in transaction._playback() uses "a" mode 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 (strip or rollback) 3. append same size but different data to revlog-style file again Therefore, cache validation doesn't work after (3) as expected. This patch uses checkambigatclosing in checkambig=True but atomictemp=False case, to check (and get rid of) file stat ambiguity at closing. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
(0) -10000 -3000 -1000 -300 -100 -30 -10 -2 +2 +10 +30 +100 +300 +1000 +3000 +10000 tip