2009-07-01 5 views
5

Я ищу способ иметь git-commit ждать стандартного ввода. Я кодирование это в PHP, так как мои bash навыков несуществующие, так что я thougth делать регулярныйПрочтено от STDIN на Git pre-commit Hook (с PHP)

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

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

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

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

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

+2

Попробуйте использовать 'EXEC

ответ

3

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

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

+0

Да, на самом деле я обнаружил, что мне лучше сохранить некоторые переменные в файле .git/config для этих целей и иметь на сервере эти связанные задачи. Это была больше проблема моей идеи рабочего процесса, чем сама git, оказывается. Спасибо! – Roberto

1

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

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

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