Чтение из STDIN на хуке предварительной фиксации Git (с PHP)

Я ищу способ заставить git-commit ждать стандартного ввода. Я кодирую это в PHP, так как моих bash навыков не существует, поэтому я делаю регулярные

<?php
$input = trim(fgets(STDIN));
fscanf(STDIN, "%d\n", $line);
?>

будет делать трюк и ждать, пока я напишу материал, чтобы продолжить, но он просто идет вперед и все равно продолжает выполнять мой PHP-скрипт.

Идея заключается в том, что после того, как я помечу выпуск, git отправит HEAD на тестируемый веб-сервер, отправит пару твитов и позвольте мне написать некоторые подробности о выпуске в CHANGELOG.

Хотя я могу добиться записи в файл (с помощью exec('mate -w')), я бы хотел, чтобы он оставался, пока я не проведу быстрый тест на сервере. Это позволит мне откатиться, если я обнаружу какие-либо ошибки (я знаю, ленивый).

Спасибо за любую помощь!


person Roberto    schedule 01.07.2009    source источник
comment
Попробуйте использовать exec < /dev/tty, как описано в этом ответе stackoverflow.com/a/10015707/67834   -  person Eliot Sykes    schedule 04.04.2012


Ответы (2)


В большинстве хуков git либо передается что-то особенное на стандартный ввод, либо стандартный ввод отсоединен от терминала. Все они предназначены для неинтерактивного запуска, поэтому я не верю, что ловушка подходит для того, что вы хотите сделать. Вы, конечно, можете вручную поговорить с /dev/tty, но я не думаю, что это очень хорошая идея.

Я также не верю, что ловушка «pre-commit» подходит для вашей задачи, ведь не каждая сделанная вами фиксация будет своего рода релизом? Хук "post-receive" на машине с тестирующим веб-сервером звучит более уместно.

person CB Bailey    schedule 01.07.2009
comment
Да, на самом деле я обнаружил, что для этих целей лучше оставить некоторые переменные в файле .git / config, а сервер будет выполнять эти связанные задачи. Оказывается, это была больше проблема моего представления о рабочем процессе, чем самого git. Спасибо! - person Roberto; 02.07.2009

Мне нужен пользовательский ввод в моем хуке после слияния (написанном на PHP).

Я решил это с помощью этого фрагмента кода: trim(exec('exec < /dev/tty && read input && echo $input'))

Не спрашивайте, работает;)

person nickel715    schedule 05.11.2014
comment
никогда не спрашивай. Особенно с пользовательским вводом и командной строкой - person Martijn; 21.07.2020