GitLab кодировка windows-1251

Если ваши проекты содержат файлы с кодировкой win-1251, вы столкнетесь с тем, что gitlab не корректно обрабатывает кириллицу в данных файлах (например комментарии).  Проблема в ruby gem charlock_holmes, который не может распознать не UTF-8 кодировку. Решение проблемы указать gitlab’у: если кодировка не utf-8, то она windows-1251. Но, с этого момента в репозитории можно загружать только файлы с этими двумя  кодировками: другие кодировки будут определятся как windows-1251 и соответсвующим образом обрабатываться. Данная проблема тянется уже давно, решение есть у xRayDev в репозитории на github. Данное решение так же описано в блоге JackyFox. Я покажу как я это решение применил на версии gitlab-ce 9.0.5 (Community Edition).Править нужно 2 файла, пути отличаются от указанных на github и других статьях. Если и мой вариант не подошел, значит ищите их по содержимому файлов — с обновлениями, они могут переместиться в другие каталоги.

Файл первый:

/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/git/encoding_helper.rb

Было:

# force detected encoding if we have sufficient confidence.
if detect && detect[:encoding] && detect[:confidence] > ENCODING_CONFIDENCE_THRESHOLD
  message.force_encoding(detect[:encoding])
end

Стало:

# force detected encoding if we have sufficient confidence.
if detect && detect[:encoding]
  message.force_encoding("windows-1251")
  message.encode("utf-8", "windows-1251", undef: :replace, replace: "", invalid: :replace)
end

Файл второй:

/opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/gitlab-grit-2.8.1/lib/grit_ext.rb

Было:

# encoding message to detect encoding
if detect && detect[:encoding]
  message.force_encoding(detect[:encoding])
end

Стало:

# encoding message to detect encoding
if detect && detect[:encoding]
  message.force_encoding("windows-1251")
  message.encode("utf-8", "windows-1251", undef: :replace, replace: "", invalid: :replace)
end

 

One Comments

Добавить комментарий