Можно ли принять пользовательский ввод как часть удаленного перехвата git post-receive? - PullRequest
5 голосов
/ 18 октября 2011

У меня есть ловушка после получения, которая развертывает нашу ветку master, когда мы нажимаем master.

Я бы хотел сделать развертывание необязательным;крюк запрашивает простой ответ Y / N для достижения этого;bash псевдокод ниже:

echo "Should I deploy this code now? Enter Y/N"
read deploy_code

case ${deploy_code} in
  "Y") do_a_deploy ;;
  "N") exit ;;
    *) # ask the question again if not Y or N ;;
esac 

Из-за способа, которым хук post-receive получает свои аргументы в stdin, строка read не делает паузу для ввода от пользователя, и сценарий повторяется по кругупытаясь получить ответ Y / N.

Я думал, что конкретный запрос от /dev/tty исправит это;

read deploy_code < /dev/tty

, но это все равно заставляет скрипт бесконечно зацикливаться, поскольку вводне приходит с клавиатуры.

Возможно ли получить ввод с клавиатуры в таких условиях?

Редактировать: А-а.Похоже, это на самом деле ssh виноват.Теперь, глядя на вывод, я добавил < /dev/tty Я вижу / dev / tty: Нет такого устройства или адреса

И я могу имитировать это, если я запускаю скрипт локально, но через ssh:

ssh 127.0.0.1 "echo 40913e300c8bf4ed7ea91b5ef61a522f3be2c05f e2aabfc865547d8b494b76c96947bab0c62acfec refs/heads/master | /path/to/post-receive"

Edit 2:

Так что я могу установить опцию -t ssh для запроса tty согласно tty в сеансе SSH или я мог бы включить его в файле authorised_keys на сервере для каждого ключа

Редактировать 3:

После создания ~/ bin / ssh-t

#!/bin/sh
ssh -tt "$@"

(опция double -t заставляет tty) и установка GIT_SSH для указания на него, теперь я получаю ужасное роковое: ошибка протокола: плохая строкадлина символа: , за которым следует 005, что, я думаю, что-то в .bash_profile или аналогичное эхо, прежде чем git сможет запустить

1 Ответ

1 голос
/ 18 октября 2011

Вы также можете разобрать комментарий коммита. Git позволяет пустые коммиты. Просто еще один вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...