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
#require test-repo slow debhelper
$ . "$TESTDIR/helpers-testrepo.sh"
Ensure debuild doesn't run the testsuite, as that could get silly.
$ DEB_BUILD_OPTIONS=nocheck
$ export DEB_BUILD_OPTIONS
$ OUTPUTDIR=`pwd`
$ export OUTPUTDIR
$ cd "$TESTDIR"/..
$ make deb > $OUTPUTDIR/build.log 2>&1
$ cd $OUTPUTDIR
$ ls *.deb
mercurial-common_*.deb (glob)
mercurial_*.deb (glob)
main deb should have .so but no .py
$ dpkg --contents mercurial_*.deb | egrep '(localrepo|parsers)'
* ./usr/lib/python2.7/dist-packages/mercurial/parsers*.so (glob)
mercurial-common should have py but no .so or pyc
$ dpkg --contents mercurial-common_*.deb | egrep '(localrepo|parsers)'
* ./usr/lib/python2.7/dist-packages/mercurial/localrepo.py (glob)