Как заставить предварительную фиксацию сцепиться, который предотвращает non-UTF-8 кодировку файла

Действительно ли возможно заставить предварительную фиксацию сцепиться для мерзавца или svn, который может отклонить файлы, не фиксировавшие в определенном кодировании?

Я работал над несколькими проектами, где это, кажется, проблема для придерживаний определенного кодирования файла (как UTF-8, например)

11
задан Jesper Rønn-Jensen 30 June 2010 в 11:26
поделиться

3 ответа

Ваш iconv может сказать вам, если что-то не UTF-8, но другие кодировки могут быть не такими простыми (особенно 8-битные, однобайтовые кодировки, такие как ISO-8859-1).

Для Git вам может потребоваться ловушка обновления вместо ловушки перед фиксацией (чтобы ее можно было запустить в центральном репозитории для обеспечения соблюдения правила).

Обработчик предварительной фиксации Git:

#!/bin/sh
git ls-files -z -- |
xargs -0 sh -c '

    e=""
    for f; do
        if ! git show :"$f" |
             iconv -f UTF-8 -t UTF-8 >/dev/null 2>&1; then
            e=1
            echo "Not UTF-8: $f"
            #exit 255 # to abort after first non-UTF-8 file
        fi
    done
    test -z "$e"

' -

Поместите один или несколько путей Git после - в командную строку git ls-files , чтобы ограничить проверяемые имена путей.

Чтобы проверить подсказку обновленной ссылки в ловушке обновления, используйте git ls-tree --name-only -r -z $ 3 - | для генерации имен путей (примечание: это не обрабатывать спецификации путей к шаблонам, такие как git ls-files , так же как и любая основанная на шаблонах фильтрация в коде оболочки) и git show "$ 3: $ f" для извлечения содержимого файла. Вы также можете проверить не только фиксацию подсказки, но и каждую новую фиксацию (цикл для каждой фиксации в git rev-list ^ $ 2 $ 3 вместо только $ 3 ).

8
ответ дан 3 December 2019 в 08:28
поделиться

Перехватчики предварительной фиксации - это просто сценарии. Поэтому, если вы можете указать кодировку в сценарии, вы можете использовать эту информацию, чтобы отклонить неправильный тип файла.

Вы можете искать в файле символы, выходящие за пределы обычного диапазона символов. Если есть магическое число или тег, сообщающий вам кодировку файла, вы можете это проверить. В противном случае спросите себя: «Как я могу узнать, что этот файл имеет неправильную кодировку?» Вы можете это закодировать?

4
ответ дан 3 December 2019 в 08:28
поделиться

Вы могли бы использовать утилиту iconv , чтобы изменить кодировку с UTF-8 на, например, UTF-16. А если изменение не удается, значит исходный файл имеет неправильную кодировку:

$ iconv -f UTF-8 -t UTF-16 Strings.java 
ÿþ
testing = iconv: illegal input sequence at position 11
2
ответ дан 3 December 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: