##// END OF EJS Templates
revlog: remove unnecessary cache validation in _chunks...
revlog: remove unnecessary cache validation in _chunks Previously, we likely called _chunkraw() multiple times in order to ensure it didn't change out from under us. I'm pretty certain this code had its origins in the days where we attempted to have thread safety of localrepository and thus revlog instances. revlog instances are already not thread safe for writing. And, as of Mercurial 3.6, hgweb uses a separate localrepository instance per request, so there should only be a single thread reading a revlog at a time. We more or less decided that attempting to make classes like revlog thread safe is a lost cause. So, this patch removes thread safety from _chunks. As a result, we make one less call into _chunkraw() when the initial read isn't serviced by the cache. This translates to savings of 4 function calls overall and possibly prevents the creation of an additional buffer view into the cache. I doubt this translates into any real world performance wins because decompression will almost certainly dwarf time spent in _chunks(). But it does make the code simpler, so it is an improvement.

File last commit:

r27637:b502138f default
r27650:e7222d32 default
Show More
highlight.py
75 lines | 2.6 KiB | text/x-python | PythonLexer
Martin Geisler
highlight: add copyright and license header
r8251 # highlight.py - highlight extension implementation file
#
# Copyright 2007-2009 Adam Hupp <adam@hupp.org> and others
#
# This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
Patrick Mezard
highlight: split code to improve startup times
r6938 #
# The original module was split in an interface and an implementation
# file to defer pygments loading and speedup extension setup.
from mercurial import demandimport
Benoit Boissinot
fix coding style (reported by pylint)
r10394 demandimport.ignore.extend(['pkgutil', 'pkg_resources', '__main__'])
Matt Mackall
move encoding bits from util to encoding...
r7948 from mercurial import util, encoding
Patrick Mezard
highlight: split code to improve startup times
r6938
from pygments import highlight
from pygments.util import ClassNotFound
from pygments.lexers import guess_lexer, guess_lexer_for_filename, TextLexer
from pygments.formatters import HtmlFormatter
SYNTAX_CSS = ('\n<link rel="stylesheet" href="{url}highlightcss" '
'type="text/css" />')
Gregory Szorc
highlight: add option to prevent content-only based fallback...
r26680 def pygmentize(field, fctx, style, tmpl, guessfilenameonly=False):
Patrick Mezard
highlight: split code to improve startup times
r6938
# append a <link ...> to the syntax highlighting css
Matt Mackall
highlight: fix to work with caching templater
r10959 old_header = tmpl.load('header')
Patrick Mezard
highlight: split code to improve startup times
r6938 if SYNTAX_CSS not in old_header:
timeless
cleanup: remove superfluous space after space after equals (python)
r27637 new_header = old_header + SYNTAX_CSS
Patrick Mezard
highlight: split code to improve startup times
r6938 tmpl.cache['header'] = new_header
text = fctx.data()
if util.binary(text):
return
Matt Mackall
highlight: ignore Unicode's extra linebreaks (issue4291)...
r23613 # str.splitlines() != unicode.splitlines() because "reasons"
for c in "\x0c\x1c\x1d\x1e":
if c in text:
text = text.replace(c, '')
Yuya Nishihara
highlight: fixes garbled text in non-UTF-8 environment...
r9424 # Pygments is best used with Unicode strings:
# <http://pygments.org/docs/unicode/>
text = text.decode(encoding.encoding, 'replace')
Christian Ebert
highlight: convert text to local before passing to pygmentize (issue1341)...
r7120
Patrick Mezard
highlight: split code to improve startup times
r6938 # To get multi-line strings right, we can't format line-by-line
try:
Alexander Plavin
highlight: fix page layout with empty first and last lines...
r19169 lexer = guess_lexer_for_filename(fctx.path(), text[:1024],
stripnl=False)
Patrick Mezard
highlight: split code to improve startup times
r6938 except (ClassNotFound, ValueError):
Gregory Szorc
highlight: add option to prevent content-only based fallback...
r26680 # guess_lexer will return a lexer if *any* lexer matches. There is
# no way to specify a minimum match score. This can give a high rate of
# false positives on files with an unknown filename pattern.
if guessfilenameonly:
return
Patrick Mezard
highlight: split code to improve startup times
r6938 try:
Alexander Plavin
highlight: fix page layout with empty first and last lines...
r19169 lexer = guess_lexer(text[:1024], stripnl=False)
Patrick Mezard
highlight: split code to improve startup times
r6938 except (ClassNotFound, ValueError):
av6
highlight: exit early on textual and unknown files (issue3005)...
r25899 # Don't highlight unknown files
return
# Don't highlight text files
if isinstance(lexer, TextLexer):
return
Patrick Mezard
highlight: split code to improve startup times
r6938
av6
highlight: produce correct markup when there's a blank line just before EOF...
r25867 formatter = HtmlFormatter(nowrap=True, style=style)
Patrick Mezard
highlight: split code to improve startup times
r6938
colorized = highlight(text, lexer, formatter)
Yuya Nishihara
highlight: fixes garbled text in non-UTF-8 environment...
r9424 coloriter = (s.encode(encoding.encoding, 'replace')
for s in colorized.splitlines())
Patrick Mezard
highlight: split code to improve startup times
r6938
Dirkjan Ochtman
templater: provide the standard template filters by default
r8360 tmpl.filters['colorize'] = lambda x: coloriter.next()
Patrick Mezard
highlight: split code to improve startup times
r6938
oldl = tmpl.cache[field]
newl = oldl.replace('line|escape', 'line|colorize')
tmpl.cache[field] = newl