mq: restore _branchtags() fast path (issue3223)
Since a5917346c72e, mq saves the nodeid of the first applied patch to
cache/branchheads, which breaks the optimized cache handling introduced in
fbf8320f25c8. The problem is the revision being committed is appended to
mqrepo.applied after the commit succeeds, which means mqrepo._branchtags()
performs a regular update and write the first applied patch to the branch
cache.
One solution is to set a context variable _committingpatch on the mqrepo while
it is committing a patch and to take it in account when deciding to fast-path
mqrepo._branchtags(). Not really elegant but it works.
The changes to test-mq-caches.t reverse changes introduced by a5917346c72e. The
cache should not have been updated with mq records.
The changes to test-keyword.t are indirectly caused by a5917346c72e.
Reported and analyzed by Yuya Nishihara <yuya@tcha.org>
Notes:
- qpush still makes a slow path _branchtags() call when checking heads. Maybe
this can be optimized.
- be careful when merging this patch in default as secretcommit() was renamed
newcommit() right after the end of the code freeze.
[ original upstream message ]
$Id$
keyword extension for Mercurial SCM
===================================
CAVEAT: Please use the keyword extension distributed with
Mercurial > 1.0.2!
For Mercurial 0.9.2 to 1.0.2 install the 0.9.2compat branch.
The default and stable branches are meant for development.
install
-------
Run "python setup.py install".
See also "pyton setup.py --help".
Then add the line:
[extensions]
keyword = /path/to/hgkw/keyword.py
to your hgrc, where /path/to/ is somewhere in your $PYTHONPATH.
first steps and online help
---------------------------
$ hg help keyword
$ hg kwdemo
testing
-------
$ cd tests
$ ./run-tests.py --with-hg=/path/to/hg