Сегодня столкнулся с практической проблемой синхронизации нелатинских имен файлов репозитария Mercurial на линуксе и под окнами. Проблема была найдена при использовании TortoiseHg 1.1.9.1. Протолкнув какие-нибудь ревизии, включающие названия файлов в UTF-8, со стороны линукса и получив в локальный репозитарий в окнах, можно увидеть кракозябры. Это очень непозитивно, особенно когда приходится хранить документы с русскими названиями и по каким-то причинам трудно перейти на транслитерацию.

Смотрим логику распределения кодировок Mercurial (которая находится тут http://mercurial.selenic.com/wiki/EncodingStrategy). Неутешительно сказано, что мол нелатиница непортируется между различными платформами. Дело в том, что имена трактуются, как бинарные данные и смена кодировки как бы нарушает целостность. Эту проблему решает расширение для Mercurial, репозитарий которого находися здесь https://bitbucket.org/tinyfish/hg-fixutf8 (это форк от https://bitbucket.org/stefanrusek/hg-fixutf8, описание которого читай тут http://mercurial.selenic.com/wiki/FixUtf8Extension).

Установка расширения проста:

1. Клонирование расширения в какой-нибудь каталог.

C:\>hg clone https://bitbucket.org/tinyfish/hg-fixutf8

2. Активирование расширение в глобальном файле настроек C:\Users\\mercurial.ini

[extensions]
fixutf8 = C:\hg-fixutf8\fixutf8.py

Если бы на этом закончились проблемы. Следующая проблема, которая встает перед пользователями Windows - иконки оверлея. Ну не хотят они поверх файлов с нелатинскими названиями ложиться. Данная проблема решается заменой шелл расширения для TortoiseHg. Здесь https://bitbucket.org/marutosi/tortoisehg/wiki/Home можно почитать детальное описание проблемы. Скажем спасибо marutosi, закачаем нужно версию .dll и подменим в каталоге TortoiseHg. Для активации необходимо завершение сеанса и вход в систему.

PROFIT \m/