Интерактивный Pre-Commit Hook в IntelliJ - PullRequest
0 голосов
/ 11 января 2019

Я работаю над интерактивным Git Hook с предварительной фиксацией, чтобы обеспечить выполнение определенного набора критериев до фиксации (например, обновление определенных файлов в репо). Я основывал свой контрольный список на примере здесь . Мой хук имеет идентичную реализацию, но имеет другой текст вопроса. В настоящее время он отлично работает в Git Bash.

Однако для реализации всей команды мне нужно, чтобы она работала в IntelliJ, так как большинство разработчиков используют функциональность Git в IDE. Используя приведенный выше пример ловушки, мои коммиты завершаются с ошибкой:

0 files committed, 1 file failed to commit: COMMIT TEST MESSAGE Would you like to play a game? .git/hooks/pre-commit: line 6: /dev/tty: No such device or address

Я бы хотел, чтобы полное взаимодействие содержалось в IntelliJ, если это возможно. Если это невозможно, я бы начал изучать разработку плагинов IntelliJ, чтобы реализовать это в рамках организационных ограничений.

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

#!/bin/sh

echo "Would you like to play a game?"

# Read user input, assign stdin to keyboard
exec < /dev/tty

while read -p "Have you double checked that only relevant files were added? (Y/n) " yn; do
case $yn in
    [Yy] ) break;;
    [Nn] ) echo "Please ensure the right files were added!"; exit 1;;
    * ) echo "Please answer y (yes) or n (no):" && continue;
esac
done
while read -p "Has the documentation been updated? (Y/n) " yn; do
case $yn in
    [Yy] ) break;;
    [Nn] ) echo "Please add or update the docs!"; exit 1;;
    * ) echo "Please answer y (yes) or n (no):" && continue;
esac
done
while read -p "Do you know which issue or PR numbers to reference? (Y/n) " yn; do
case $yn in
    [Yy] ) break;;
    [Nn] ) echo "Better go check those tracking numbers!"; exit 1;;
    * ) echo "Please answer y (yes) or n (no):" && continue;
    esac
done

exec <&-

1 Ответ

0 голосов
/ 12 января 2019

Это невозможно, IDE не является терминалом и не предоставляет никаких tty, которые вы можете использовать в интерактивном режиме. Вам нужно либо заставить вас показать подсказку с графическим интерфейсом, либо реализовать то, что вы хотите, по-другому.

Есть плагины, которые уже реализуют хуки pre-commit, например https://plugins.jetbrains.com/plugin/9278-pre-commit-hook-plugin

...