sapling/mercurial
Pierre-Yves David d6838f12a9 repoview: cache filtered changelog
Creating a new changelog object for each access is costly and prevents efficient
caching changelog side. This introduced a x5 performance regression in log
because chunk read from disk were never reused. We were jumping from about 100
disk read to about 20 000.

This changeset introduce a simple cache mechanism that help the last changelog
object created by a repoview. The changelog is reused until the changelog or the
filtering changes.

The cache invalidation is much more complicated than it should be. But MQ test
show a strange cache desync. I was unable to track down the source of this
desync in descent time so I'm not sure if the issue is in MQ or core. However
given the proximity to the 2.5 freeze, I'm choosing the inelegant but safe route
that makes the cache mechanism safer.
2013-01-18 23:43:32 +01:00
..
help docs: "deprecate" checkchanged and checkconflicts in merge-tool configuration 2013-01-15 23:30:10 +01:00
hgweb hgweb: run with "served" filter 2013-01-15 22:34:56 +01:00
httpclient httpclient: apply change df9aea1def3e: remove use of two-argument raise 2013-01-01 13:25:07 -06:00
pure declare local constants instead of using magic values and comments 2012-08-27 23:16:22 +02:00
templates hgweb, spartan: link from manifest title to changeset page 2012-12-21 02:41:07 +01:00
__init__.py Add back links from file revisions to changeset revisions 2005-05-03 13:16:10 -08:00
ancestor.py ancestor: add lazy membership testing to lazyancestors 2012-12-18 12:47:20 -08:00
archival.py subrepos: process subrepos in sorted order 2012-12-12 02:38:14 +01:00
base85.c base85: cast Py_ssize_t values to int (issue3481) 2012-06-04 16:59:34 +02:00
bdiff.c bdiff: check and cast first parameter value on putbe32() calls 2012-05-15 22:36:47 +02:00
bookmarks.py bookmarks: process pulled remote bookmarks in sorted order 2013-01-15 02:59:12 +01:00
branchmap.py localrepo: store branchheads sorted 2013-01-15 02:59:12 +01:00
bundlerepo.py bundlerepo: remove old style check of file names 2013-01-16 20:52:56 +01:00
byterange.py fix trivial spelling errors 2012-08-15 22:38:42 +02:00
changegroup.py changegroup: decompress GZ algorithm in larger chunks for better performance 2012-04-29 20:58:50 +02:00
changelog.py tests: fix doctest stability over Python versions 2013-01-15 18:42:04 +01:00
cmdutil.py subrepos: process subrepos in sorted order 2012-12-12 02:38:14 +01:00
commands.py refactoring: use unlinkpath with ignoremissing 2013-01-15 23:30:10 +01:00
commandserver.py commandserver: report capabilities sorted 2012-12-12 02:38:14 +01:00
config.py grammar: it-handles 2012-08-17 13:58:19 -07:00
context.py clfilter: stronger detection of filtered changeset in changectx.__init__ 2013-01-16 05:21:11 +01:00
copies.py copies: report found copies sorted 2012-12-12 02:38:14 +01:00
dagparser.py en-us: labeled 2012-08-17 13:58:18 -07:00
dagutil.py cleanup: "raise SomeException()" -> "raise SomeException" 2012-05-12 16:00:58 +02:00
demandimport.py demandimport: determine at load time if __import__ has level argument 2011-08-22 22:50:52 +02:00
diffhelpers.c diffhelpers: use Py_ssize_t in testhunk() 2012-05-12 14:00:51 +02:00
dirstate.py merge with crew-stable 2012-12-16 23:02:54 -06:00
discovery.py filtering: rename filters to their antonyms 2013-01-13 01:39:16 -06:00
dispatch.py clfilter: enforce hidden filtering on all repository accesses 2013-01-11 20:34:54 +01:00
encoding.py tests: stabilize doctest output 2013-01-15 02:59:14 +01:00
error.py wireproto: add out-of-band error class to allow remote repo to report errors 2011-08-02 15:21:10 -04:00
exewrapper.c exewrapper: adapt for legacy HackableMercurial 2012-08-07 11:04:41 +02:00
extensions.py hooks: print out more information when loading a python hook fails 2012-07-06 18:41:25 +02:00
fancyopts.py fancyopts: don't show a traceback on invalid integer values 2012-10-08 15:35:16 +02:00
filelog.py filelog: add file function to open other filelogs 2011-05-10 17:38:58 +02:00
filemerge.py merge: warn when internal:merge cannot merge symlinks 2013-01-15 01:05:11 +01:00
fileset.py subrepos: process subrepos in sorted order 2012-12-12 02:38:14 +01:00
formatter.py formatter: add condwrite method 2012-11-03 14:37:50 -05:00
graphmod.py graphlog: extract ascii drawing code into graphmod 2012-07-11 17:13:39 +02:00
hbisect.py bisect: store state sorted 2012-12-12 02:38:14 +01:00
help.py help: indicate help omitting if help document is not fully displayed 2012-10-18 10:31:15 +09:00
hg.py filtering: rename filters to their antonyms 2013-01-13 01:39:16 -06:00
hook.py hook: disable demandimport before importing hooks 2012-12-20 21:26:30 +01:00
httpconnection.py httpclient: fix calling convention violation 2012-10-18 23:55:15 -05:00
httppeer.py httprepo: ensure Content-Type header exists when pushing data 2012-07-13 13:21:20 +02:00
i18n.py i18n: use getattr instead of hasattr 2011-07-25 20:46:30 -05:00
ignore.py ignore: process hgignore files in deterministic order 2012-12-17 15:57:02 -08:00
keepalive.py keepalive: drop python 2.2 legacy code 2012-10-02 14:27:13 -07:00
localrepo.py validate: check for spurious incoming filelog entries 2012-12-11 20:13:21 +01:00
lock.py merge with stable 2012-09-29 12:28:52 -05:00
lsprof.py lsprof: report units correctly 2012-05-30 13:57:41 -07:00
lsprofcalltree.py drop unused imports 2009-05-14 15:35:46 +02:00
mail.py avoid using abbreviations that look like spelling errors 2012-08-27 23:14:27 +02:00
manifest.py commit: increase perf by building a new addlist instead of editing the old one 2012-11-19 16:05:40 -08:00
match.py fix wording and not-completely-trivial spelling errors and bad docstrings 2012-08-15 22:39:18 +02:00
mdiff.py diff: move index header generation to patch 2012-11-15 15:16:41 -08:00
merge.py subrepos: process subrepos in sorted order 2012-12-12 02:38:14 +01:00
minirst.py spelling: indented 2012-08-17 13:58:18 -07:00
mpatch.c mpatch: use Py_ssize_t for string length 2012-05-20 01:28:31 +02:00
node.py Update license to GPLv2+ 2010-01-19 22:20:08 -06:00
obsolete.py obsolete: process markers in a stable order 2013-01-15 02:59:13 +01:00
osutil.c osutil: tab damage, how i hate thee 2012-12-03 13:17:01 -08:00
parser.py en-us: labeled 2012-08-17 13:58:18 -07:00
parsers.c store: implement lowerencode in C 2012-12-12 13:09:33 -08:00
patch.py util: fold ENOENT check into unlinkpath, controlled by new ignoremissing flag 2012-12-28 11:55:57 +01:00
pathencode.c pathencode: implement both basic and hashed encoding in C 2012-12-12 13:09:36 -08:00
peer.py peer: delete double definition of method peer 2012-07-28 22:36:22 +02:00
phases.py phases: make _filterunknown a member function of phasecache 2013-01-04 06:11:29 +01:00
posix.py posix: don't compare atime when determining if a file has changed 2013-01-18 15:55:16 -08:00
pushkey.py pushkey: do not exchange obsole markers if feature is disabled 2012-07-28 13:33:06 +02:00
pvec.py fix trivial spelling errors 2012-08-15 22:38:42 +02:00
py3kcompat.py spelling: relies 2012-08-17 13:58:18 -07:00
repair.py destroyed: drop complex branchcache rebuilt logic 2013-01-16 00:09:26 +01:00
repoview.py repoview: cache filtered changelog 2013-01-18 23:43:32 +01:00
revlog.py revlog: move ancestor generation out to a new class 2012-12-18 10:14:01 -08:00
revset.py bundlerepo: improve performance for bundle() revset expression 2013-01-16 20:41:34 +01:00
scmutil.py scmutil: simplify vfs.audit - drop wrapped vfs.auditor 2013-01-09 00:01:33 +01:00
setdiscovery.py delete some dead comments and docstrings 2012-08-21 02:41:20 +02:00
similar.py cleanup: eradicate long lines 2012-05-12 15:54:54 +02:00
simplemerge.py cleanup: "raise SomeException()" -> "raise SomeException" 2012-05-12 16:00:58 +02:00
sshpeer.py peer: introduce real peer classes 2012-07-13 21:47:06 +02:00
sshserver.py sshserver: avoid a multi-dot attribute lookup in a hot loop 2012-09-14 12:09:44 -07:00
sslutil.py ui: optionally quiesce ssl verification warnings on python 2.5 2012-04-09 14:36:16 -07:00
statichttprepo.py branchmap: enable caching for filtered version too 2012-12-24 03:21:15 +01:00
store.py store: switch to C-based hashed path encoding 2012-12-12 13:09:37 -08:00
strutil.py Update license to GPLv2+ 2010-01-19 22:20:08 -06:00
subrepo.py subrepos: process subrepos in sorted order 2012-12-12 02:38:14 +01:00
tags.py fix trivial spelling errors 2012-08-15 22:38:42 +02:00
templatefilters.py hgweb: make the escape filter remove null characters (issue2567) 2012-10-15 09:43:34 -07:00
templatekw.py templating: make new-style templating features work with command line lists 2012-09-21 18:54:00 -05:00
templater.py templater: add no-op template function 'label' 2012-12-22 21:46:26 -06:00
transaction.py fix trivial spelling errors 2012-08-15 22:38:42 +02:00
treediscovery.py util: subclass deque for Python 2.4 backwards compatibility 2012-06-01 17:05:31 -07:00
ui.py check-code: there must also be whitespace between ')' and operator 2012-12-09 23:33:16 +01:00
url.py url: clean up use of two-argument raise 2013-01-01 12:50:46 -06:00
util.h store: implement fncache basic path encoding in C 2012-09-18 15:42:19 -07:00
util.py util: copyfile: remove dest before copying 2013-01-10 00:44:23 +01:00
verify.py clfilter: verify logic should be unfiltered 2012-10-08 17:08:52 +02:00
win32.py win32: clean up use of two-argument raise 2013-01-01 12:50:23 -06:00
windows.py util: fold ENOENT check into unlinkpath, controlled by new ignoremissing flag 2012-12-28 11:55:57 +01:00
wireproto.py filtering: rename filters to their antonyms 2013-01-13 01:39:16 -06:00