##// END OF EJS Templates
fncachestore: defer updating the fncache file to a single file open...
fncachestore: defer updating the fncache file to a single file open Defers updating the fncache file with newly added entries to the end of the transaction (on e.g. pull), doing a single open call on the fncache file, instead of opening and closing it each time a new entry is added to the store. Implemented by adding a new abstract write() function on store.basicstore and registering it as a release function on the store lock in localrepo.lock (compare with dirstate.write). store.fncachestore overrides write() from basicstore and calls a new write function on the fncache object, which writes all entries to the fncache file if it's dirty. store.fncache.add() now just marks itself as dirty if a new name is added.

File last commit:

r11403:f7d7de6e default
r13391:d00bbff8 default
Show More
i18n.py
58 lines | 1.9 KiB | text/x-python | PythonLexer
# i18n.py - internationalization support for mercurial
#
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
import encoding
import gettext, sys, os
# modelled after templater.templatepath:
if hasattr(sys, 'frozen'):
module = sys.executable
else:
module = __file__
base = os.path.dirname(module)
for dir in ('.', '..'):
localedir = os.path.join(base, dir, 'locale')
if os.path.isdir(localedir):
break
t = gettext.translation('hg', localedir, fallback=True)
def gettext(message):
"""Translate message.
The message is looked up in the catalog to get a Unicode string,
which is encoded in the local encoding before being returned.
Important: message is restricted to characters in the encoding
given by sys.getdefaultencoding() which is most likely 'ascii'.
"""
# If message is None, t.ugettext will return u'None' as the
# translation whereas our callers expect us to return None.
if message is None:
return message
paragraphs = message.split('\n\n')
# Be careful not to translate the empty string -- it holds the
# meta data of the .po file.
u = u'\n\n'.join([p and t.ugettext(p) or '' for p in paragraphs])
try:
# encoding.tolocal cannot be used since it will first try to
# decode the Unicode string. Calling u.decode(enc) really
# means u.encode(sys.getdefaultencoding()).decode(enc). Since
# the Python encoding defaults to 'ascii', this fails if the
# translated string use non-ASCII characters.
return u.encode(encoding.encoding, "replace")
except LookupError:
# An unknown encoding results in a LookupError.
return message
if 'HGPLAIN' in os.environ:
_ = lambda message: message
else:
_ = gettext