# HG changeset patch # User Mads Kiilerich # Date 2018-06-09 14:28:33 # 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 --git a/development.ini b/development.ini --- a/development.ini +++ b/development.ini @@ -160,6 +160,9 @@ api_access_controllers_whitelist = ## 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 --git a/docs/setup.rst b/docs/setup.rst --- a/docs/setup.rst +++ b/docs/setup.rst @@ -633,6 +633,9 @@ encoding of commit messages. In addition 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 @@ Example WSGI dispatch script: .. 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 --git a/kallithea/config/app_cfg.py b/kallithea/config/app_cfg.py --- a/kallithea/config/app_cfg.py +++ b/kallithea/config/app_cfg.py @@ -28,6 +28,7 @@ import alembic.config 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 @@ else: 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 --git a/kallithea/lib/paster_commands/template.ini.mako b/kallithea/lib/paster_commands/template.ini.mako --- a/kallithea/lib/paster_commands/template.ini.mako +++ b/kallithea/lib/paster_commands/template.ini.mako @@ -254,6 +254,9 @@ api_access_controllers_whitelist = <%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