Как написать предварительный push-запрос Python для проверки сообщения о коммите? - PullRequest
0 голосов
/ 27 апреля 2018

Я знаю, что могу использовать ловушку commit-msg для проверки сообщения (я сделал это), но я хочу проверить сообщение еще раз перед отправкой с другими критериями.

Пример, приведенный в .git / hooks, был написан в сценарии оболочки, но я хочу написать сценарий на python, в котором строковые операции, которые я имею в виду, являются более сложными.

Я знаю, что могу изменить первую строку на #!/usr/bin/env python. Моя проблема в том, что я не знаю, как получить строку сообщения последнего коммита. Я экспериментировал с git rev-list (в строке 44 этого примера), но он не дает мне строку сообщения и ему нужен идентификатор хеша коммита. Обратите внимание, что строка сообщения может быть многострочной (поскольку длина первой строки не должна превышать 50 символов).

EIDT : задавались другие вопросы о том, как написать сценарий предварительного нажатия на Python, но они не включали проверку строки сообщения.

1 Ответ

0 голосов
/ 28 апреля 2018

pre-push hook передается список локальных / удаленных ссылок и идентификаторов коммитов (sha1), поэтому вам нужно читать их построчно, разбивать и получать локальный идентификатор фиксации. См. , как это можно сделать в сценарии оболочки.

Имея идентификатор фиксации, вы можете извлечь полное сообщение фиксации с помощью команды

git show --format='%B' -s $SHA1

В Python это что-то вроде:

for line in sys.stdin:
    local_ref, local_sha1, remote_ref, remote_sha1 = line.strip().split()
    message = subprocess.check_output(
        ['git', 'show', '--format=%B', '-s', local_sha1])
    if not check(message):
        sys.exit(1)
...