У меня есть репозитории Mercurial, работающие на Apache с mod_wsgi. Репозитории имеют все имена файлов, закодированные в windows-1251. Эта кодировка используется по историческим причинам: они были преобразованы в Mercurial из SVN, Windows-1251 является кодировкой Windows по умолчанию для русской локали.
Теперь программисты хотят использовать инструмент Crucible для проверки кода. Он не может понимать имена файлов в любой другой кодировке, кроме utf-8. Поэтому мне нужно конвертировать их из windows-1251 в utf-8. Кто-нибудь знает как это сделать? Расширение Mercurial для конвертации не имеет опций для конвертации кодировок.
hgweb.config:
[web]
#encoding = UTF-8
encoding = windows-1251
#allow_archive = gz, zip, bz2
allow_archive = zip
allow_push = *
push_ssl = false
[extensions]
[collections]
/data/mercurial = /data/mercurial
encoding = windows-1251
наencoding = UTF-8
только что сделанное имя файла нечитаемым. Это потому, что они хранятся в Windows-1251. "UTF-8" os.environ ["HGENCODING"] = "UTF-8" равно этому параметру.Ответы:
Вы правы, что расширение для преобразования не поддерживает это в настоящее время. То есть, вы не можете попросить его перекодировать из кодирующей X кодирования Y . Тем не менее, вы можете попросить его переименовать файлы один за другим для вас! Сначала создайте файл
rename.py
с именемТогда беги
Это создает вашу файловую карту. Теперь вы можете использовать
преобразовать репозиторий в новый репозиторий. В новом хранилище будет выглядеть, как будто файлы всегда сохранялись с использованием имен файлов UTF-8.
Примечание. Имена файлов теперь хранятся в хранилище как UTF-8. Это означает, что проверки будут хорошо смотреться на современных машинах Linux. Windows, однако, не использует имена файлов UTF-8. Расширение FixUtf-8 должно использоваться, чтобы Mercurial конвертировал имена файлов UTF-8 в UTF-16 на лету. Это также создаст читаемые имена файлов в Windows.
Примечание: каждый должен будет повторно клонировать новый репозиторий! Изменение любой части истории неизбежно приводит также к изменению всех хэшей наборов изменений. Так что, чтобы осуществить это, вам нужно либо
или
Любой способ работает, так как преобразование является детерминированным, и поэтому ваши пользователи могут запускать его самостоятельно, если у них есть Python. Если у них установлена только TortoiseHg, то, вероятно, проще всего конвертировать их на свой сервер.
Я рассмотрел вопрос о том, чтобы сделать поддержку расширений преобразования более прямой, и отправил исправление в список рассылки Mercurial для более прямой поддержки.
источник
У меня такая же проблема. Мне нужно было конвертировать кучу репозиториев, поэтому я написал скрипт, который конвертирует все репозитории, представленные в виде списка.
использование:
Вы можете получить из моего хранилища на BitBucket.
источник
Просто извлечение из Mercurial Wiki FYI
Таким образом, я полагаю, просто изменение представления кодового в
encoding =
может сделать толстоеЕсли это предположение неверно (это всегда возможно), попробуйте FixUtf8 Extension , прочитайте часть. Исправление существующих имен файлов из readme.
источник
encoding = windows-1251
кencoding = UTF-8
только из имен файлов нечитаемым. FixUtf8 тоже не помог.AddDefaultCharset utf-8
в Apache. Другая идея - изменить WAMP на LAMP с UTF8 в качестве локали и ничего не делать с именами файлов, ноencoding = UTF-8
повторитьencoding = windows-1251
был установлен, потому что данные уже были в этой кодировке.