# HG changeset patch # User Mads Kiilerich # Date 1528554513 -7200 # Node ID 9937ae52f167858b01e0f6062f49ea04f9b76377 # Parent abaf8e1033a6471172c953df2ee4555f2f3c7a40 hg: set encoding to utf-8 by default to always show unicode characters correctly Unicode characters would be shown as '?' if Kallithea was launched in a LANG=C environment (or similar). The problem could be solved by setting HGENCODING before launching Kallithea or before importing Mercurial. These are often not good solutions. Instead, introduce a hgencoding config setting that triggers monkey patching of Mercurial. diff -r abaf8e1033a6 -r 9937ae52f167 development.ini --- a/development.ini Sat May 19 22:00:41 2018 +0200 +++ b/development.ini Sat Jun 09 16:28:33 2018 +0200 @@ -160,6 +160,9 @@ ## can be also a comma separated list of encoding in case of mixed encodings default_encoding = utf8 +## Set Mercurial encoding, similar to setting HGENCODING before launching Kallithea +hgencoding = utf-8 + ## issue tracker for Kallithea (leave blank to disable, absent for default) #bugtracker = https://bitbucket.org/conservancy/kallithea/issues diff -r abaf8e1033a6 -r 9937ae52f167 docs/setup.rst --- a/docs/setup.rst Sat May 19 22:00:41 2018 +0200 +++ b/docs/setup.rst Sat Jun 09 16:28:33 2018 +0200 @@ -633,6 +633,9 @@ library is installed. If ``chardet`` is detected Kallithea will fallback to it when there are encode/decode errors. +The Mercurial encoding is configurable as ``hgencoding``. It is similar to +setting the ``HGENCODING`` environment variable, but will override it. + Celery configuration -------------------- @@ -894,7 +897,6 @@ .. code-block:: python import os - os.environ["HGENCODING"] = "UTF-8" os.environ['PYTHON_EGG_CACHE'] = '/srv/kallithea/.egg-cache' # sometimes it's needed to set the current dir diff -r abaf8e1033a6 -r 9937ae52f167 kallithea/config/app_cfg.py --- a/kallithea/config/app_cfg.py Sat May 19 22:00:41 2018 +0200 +++ b/kallithea/config/app_cfg.py Sat Jun 09 16:28:33 2018 +0200 @@ -28,6 +28,7 @@ from alembic.script.base import ScriptDirectory from alembic.migration import MigrationContext from sqlalchemy import create_engine +import mercurial from kallithea.lib.middleware.https_fixup import HttpsFixup from kallithea.lib.middleware.simplegit import SimpleGit @@ -119,6 +120,11 @@ def setup_configuration(app): config = app.config + # Mercurial sets encoding at module import time, so we have to monkey patch it + hgencoding = config.get('hgencoding') + if hgencoding: + mercurial.encoding.encoding = hgencoding + if config.get('ignore_alembic_revision', False): log.warn('database alembic revision checking is disabled') else: diff -r abaf8e1033a6 -r 9937ae52f167 kallithea/lib/paster_commands/template.ini.mako --- a/kallithea/lib/paster_commands/template.ini.mako Sat May 19 22:00:41 2018 +0200 +++ b/kallithea/lib/paster_commands/template.ini.mako Sat Jun 09 16:28:33 2018 +0200 @@ -254,6 +254,9 @@ <%text>## can be also a comma separated list of encoding in case of mixed encodings default_encoding = utf8 +<%text>## Set Mercurial encoding, similar to setting HGENCODING before launching Kallithea +hgencoding = utf-8 + <%text>## issue tracker for Kallithea (leave blank to disable, absent for default) #bugtracker = https://bitbucket.org/conservancy/kallithea/issues